[小ネタ] Windows Server で大きなサイズのダミーファイルを作成したり削除したりする PowerShell スクリプトをスケジュール実行しディスク負荷テストをおこなう

2024.03.17

コーヒーが好きな emi です。

以前、Windows Server で fsutill コマンドを使い 10GiB のダミーファイルを作成する PowerShell スクリプトを作ってタスクスケジューラーでスケジュール実行しディスクの負荷をじわじわ上げていく手順を以下ブログに記載しました。

今回更に、大きなサイズのダミーファイルを作成したり削除したりする PowerShell スクリプトをスケジュール実行することでデータの差分を生み出し、データの差分を取得するスナップショットの大きさを大きくする試みをおこないました。これを実行することで、常にファイルの変更が発生している状態を再現します。
また使う機会がありそうなのでブログに残しておきます。

EC2 で Windows Server 2022 を起動し、フリートマネージャーで RDP 接続して検証しています。

PowerShell スクリプトを作成して実行する

使用するスクリプトは以下です。

CreateDeleteDummyFile.ps1

# Stopwatch を開始
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()

# 4分 = 240秒
$duration = 240

while ($stopwatch.Elapsed.TotalSeconds -lt $duration) {
    # 作成されたファイルのパスを保持する配列
    $createdFiles = @()

    # 3つのファイルを作成
    1..3 | ForEach-Object {
        # 現在のタイムスタンプを取得
        $timestamp = Get-Date -Format "yyyyMMddHHmmss"
        # ファイルパスを設定
        $filePath = "E:\work\dummyfile\dummyfile_created_${timestamp}_$_.txt"
        # ファイルサイズ (1GiB = 1,073,741,824 Byte)
        $fileSize = 1073741824

        # fsutil コマンドを使用してファイルを作成
        fsutil file createnew $filePath $fileSize

        # 作成したファイルのパスを配列に追加
        $createdFiles += $filePath

        # 1秒待機
        Start-Sleep -Seconds 1
    }

    # 作成したファイルを削除
    $createdFiles | ForEach-Object {
        Remove-Item $_ -ErrorAction SilentlyContinue
    }

    # 経過時間が4分に達していない場合、ループの最初に戻る
    # 次のファイル作成に進む前に1秒間待機(削除処理の時間も含めるため)
    Start-Sleep -Seconds 1
}

# Stopwatch を停止
$stopwatch.Stop()

# スクリプト終了メッセージ
Write-Output "Operation completed. All files have been created and deleted within the 4-minute timeframe."

このスクリプトは、E:\work\dummyfile\ フォルダ配下で、以下の動作を 4 分(240 秒)間繰り返します。

  • 1 秒ごとに dummyfile_created_yyyyMMddHHmmss_1.txt などの名前の 1GiB サイズのファイルを 3 回作成し、すべて削除する

1 秒ごととしたのは、作成が速すぎるとエラーになりうまくいかなかったからです。

まずは手動でこのスクリプトを実行してみます。
以下のように E:\work\ 配下にスクリプトを配置し、フォルダ内の何もないところで Shift + 右クリックすると「PowerShell ウィンドウをここで開く」というメニューが出てくるので、PowerShell を開き、以下コマンドでスクリプトを実行します。

.\CreateDeleteDummyFile.ps1

以下の動画のように、3 回ファイルを作成しては削除する、という動作を繰り返します。

タスクスケジューラーで実行する

タスクスケジューラーで以下の設定をしてタスクを実行することで、1 日間ファイルを作成したり削除したりし続けることができます。

  • 全般タブ
    • 名前:CreateDeleteDummyFile_E
    • タスクの実行時に使うユーザーアカウント:Administrator
    • ユーザーがログオンしているかどうかにかかわらず実行する
    • 構成:Windows Server 2022
  • トリガータブ
    • タスクの開始:スケジュールに従う
    • 1 回
    • 繰り返し間隔:5 分間
    • 継続時間:1 日間
    • 有効
  • 操作タブ
    • 操作:プログラムの開始
    • プログラム/スクリプト:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    • 引数の追加:-ExecutionPolicy Bypass E:\work\CreateDeleteDummyFile.ps1
    • 開始:E:\work

条件タブ、設定タブはデフォルトです。

タスクが実行されると以下のように、ファイルを作成したり削除したりを繰り返します。

おわりに

これだけファイルの変更が発生すれば、きっと巨大なスナップショットが取得できるでしょう。
あまりこのような挙動が必要とされる機会はないかもしれませんが、どなたかのお役に立てば幸いです。