[Hyper-v]仮想ディスク最適化・VHDXファイルサイズの縮小手順

hyper-v Windows

概要

仮想マシンの仮想ディスクサイズが肥大化したため縮小させたい場合の手順。レプリケーションしているサーバーについての説明も含む。

手順

仮想マシン:不要データの削除

仮想マシンにログイン等行って不要データを削除する。例えば以下の内容が対象となる

  • ゴミ箱
  • システムクリーンアップ
  • シャドウコピーの領域
  • 重複除去を使用しているならガーページコレクションの圧縮を行う
    PowerShell (管理者として実行。そうしないと ”一般的なエラーが発生しました” となる)にて
    Start-DedupJob D: -Type GarbageCollection -Full
    Dは対象となるドライブ名
    ジョブの進捗は Get-DedupJob(ただ Progress は あてにならない。 0% と表示される。)このコマンドを実行して何も返ってこない場合はジョブ終了という意味。

仮想マシン上:「ディスクの管理」にて領域の縮小

仮想マシンにて対象となるボリュームの縮小を行う。必須ではないが空き領域がないと次の手順のVHDXで「縮小」ができない。「最適化」だけとなる。

空き容量 は 1GByte以上 は残しておきましょう。画面で勧められるまま最大限の縮小をすると,まれにボリュームの縮小が失敗します。進捗状況を知りたい場合は こちら のページを参照

母体サーバー:VHDXの最適化や縮小

hyper-v マネージャー にて 仮想マシンの設定をあけて,仮想ハードディスクの「編集」をクリックする。

仮想ハードディスクの編集ウィザードが表示される。画面の指示に従って操作を進める。
「最適化」と「縮小」を実施する。(レプリケーションを使用している場合は下の囲みを参照)

レプリケーションがなされている場合は,仮想マシンを一旦シャットダウンさせる。(稼働していると拡張メニューしか表示されない。)その後「最適化」だけを実施する。

補足:「縮小」はレプリカ間で”仮想ディスクのサイズが異なる”というエラーが発生し,レプリケーションが失敗するのでやめた方がいい。レプリカ側でも手動で同サイズまで縮小できればエラーは回避できるが,最大縮小サイズ値を変更できず問題が発生する場合がある。再同期を要求されるが再同期ですら失敗となる。レプリケーションを作り直すしかない。

レプリカサーバーがある場合

プライマリサーバーで「最適化」を実施しても,自動的にレプリカ側のVHDXは小さくならない。手動でレプリカのVHDXの「最適化」を実施する。

レプリカ側の「最適化」を実施してもサイズが小さくならない場合,1時間ぐらい放置してから再び最適化すると小さくなることもある。(レプリケートのタイミング都合でもなく理由は不明)

かなり大きい縮小を行った場合は「再同期」が求められる。再同期が成功しない場合は レプリケーションを作り直す。(面倒だけどあれこれするより確実)「縮小」の場合は 必ずプライマリもレプリカサーバー共に領域サイズは同じにしておく。そうしないとレプリケーションがエラーになる。前述の通り,「最適化」で対応しているほうが無難。実質VHDXファイルサイズは小さくなっているので目的にかなっている。

仮想ディスク内のファイルシステムがReFSの場合

不要ファイルをできるだけ削除したものの,ファイルシステムがReFSの場合,ボリュームの縮小ができない。それで以下の手順で行う。

1.仮想マシンをシャットダウン。レプリカ側であれば レプリケーションの一時停止

2.母体サーバーで,PowerShellを使って最適化。(管理者権限 必要)

optimize-vhd -Path "vhdxがあるフルパスファイル名" -Mode Full
仮想ディスクの圧縮が始まる

3.仮想マシンの起動 または レプリケーションの再開

プロパティ

Windows Server 2022

コメント

スポンサーリンク
タイトルとURLをコピーしました