本連載は、PowerShellコマンドレットについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は「Optimize-VHD」コマンドレットを解説します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載では、Windows PowerShellの基本的なコマンドレットについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、容量固定仮想ディスク以外の仮想ディスクに対して最適化を実施する「Optimize-VHD」コマンドレットです。
仮想ディスクには「容量固定」「容量可変」「差分」の3種類があることは紹介済みですが、容量可変ディスクや差分ディスクは追加の書き込みが発生するたびに実体のファイルサイズが増えていきます。
これは仮想ディスク作成時に、最初から設定された容量と同じサイズのファイルを物理ディスク上に作成する容量固定仮想ディスクとは異なり、容量可変ディスクや差分ディスクは作成時に最小サイズの物理ファイルを作成し、追記のたびに物理ファイルのサイズが大きくなっていくためです。
例えば、1GBのファイルを容量可変仮想ディスクに追記した場合、仮想ディスクサイズは1GB増えることになります。
では、この状態で1GBのファイルを削除するとどうなるでしょうか? 答えは物理ファイルのサイズが小さくなることはなく、合計1GB以上の追記が発生しない限り、物理サイズは増えない(空き領域として使用される)という挙動になります。
以下の例では仮想ディスクをマウントして容量を確認していますが、仮想ディスク内では32.9GBの使用量であるのに対し、物理ファイルは50.9GBで差し引き18GB分が空き容量として確保されています(画面1)。
この例では微々たる量ですが、100GBのテンポラリファイルを追記して削除すると物理サイズは100GBまで拡張され、削除後も100GBを維持することになると、使われていない部分がある意味無駄に拡張されてしまっている形になります。
Optimize-VHDは仮想ディスクを最適化するコマンドレットであり、拡張されているものの空き領域となってしまっている領域を削除し、容量可変仮想ディスクを最適化してくれます。
なお、容量固定仮想ディスクに対しては、Optimize-VHDコマンドレットの最適化効果はないので注意してください。
【注】Optimize-VHDは「Windows PowerShell用Hyper-Vモジュール」に含まれるコマンドレットです。GUIの「Windowsの機能の有効化」や「役割と機能の追加」から「Hyper-V」を有効にするか、Windows PowerShellで「Enable-WindowsOptionalFeature」コマンドレットを実行して有効にすることで使用できます。
オプション | 意味 |
---|---|
-Path | 最適化したい仮想ディスクのパスを指定する |
-Mode | 最適化のモード(Full、Pretrimmed、Prezeroed、Quick、Retrim)を指定する |
-Passthru | オブジェクトをパイプ(|)で渡す場合に使用する。省略可能 |
仮想ディスクの最適化で最も効果が期待されるモードは「Full」になります。ただし、Fullモード実行時には、対象となる仮想ディスクを「読み取り専用」でマウントする必要があります。読み取り専用でのマウントに関しては、本連載第110回の「Mount-VHD」コマンドレットを参照してください。
読み取り専用で仮想ディスクをマウントしたら、Optimize-VHDコマンドレットを実行します(画面2)。なお、Optimize-VHDコマンドレットは管理者権限で実行する必要があります。
Mount-VHD -Path D:\VHDFolder\DataDisk_01.vhdx -ReadOnly Optimize-VHD -Path D:\VHDFolder\DataDisk_01.vhdx -Mode Full
上記実行例では、Optimize-VHDコマンドレット実行前後に「Get-VHD」コマンドレット(本連載第107回で紹介)で仮想ディスクの物理サイズ(実行結果では「FileSize」として表示)を確認しています。
Optimize-VHDコマンドレット実行前には「54697918464」バイト(50.9GB)あった仮想ディスクの物理ファイルサイズが、実行後には「35102130176」バイト(32.7GB)にまで最適化されていることが分かります。
最適化後は、画面2のように「Dismount-VHD」コマンドレット(本連載第111回で紹介)で読み取り専用としてマウントしていた仮想ディスクを忘れずにアンマウントしてください。
なお、読み書き可能な状態で仮想ディスクをマウントしてOptimize-VHDコマンドレットを実行してしまった場合にはエラーが発生し、最適化されないので注意してください(画面3)。
なお、読み取り専用でのマウントを必要とする最適化モードはFullの他、「Quick」と「Retrim」があります。
FullモードとQuickモードの違いは、「ゼロパディング領域のスキャンの有無」(Quickモードはゼロパディング領域をスキャンしない)で、RetrimモードとQuickモードとの違いは「未使用ブロックの再利用の有無」(Retrimモードは未使用ブロックを再利用しない)となります。
実は、仮想ディスクは読み取り専用でマウントしなくても最適化できます。
読み取り専用でマウントした場合と異なるのは、仮想ディスク内のNTFSファイルシステムの空き領域に関する情報を照会せずに最適化するため、未使用領域の検出効果が異なることです。従って、確実に最適化したい場合は読み取り専用でマウントした方がよいのです。
仮想ディスクをマウントせずに最適化する場合は、最適化モードは「Pretrimmed」もしくは「Prezeroed」を指定します。以下の実行例では、最適化モードにPrezeroedを指定してOptimize-VHDコマンドレットを実行しています(画面4)
Optimize-VHD -Path D:\VHDFolder\DataDisk_01.vhdx -Mode Prezeroed
今回使用したテスト用の仮想ディスクでは、Fullモードで実行した結果とPrezeroedモードで実行した結果で差はありませんでしたが、長期間運用された仮想ディスクでは最適化の効果が異なる場合があります。状況に応じて、最適なモードを選択するようにしてください。
Microsoft MVP for Cloud and Datacenter Management(2012-2025)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.