2017/09/12

VHD(X) が期待どおりに縮小されないときは...もう一押し


1 年ほど前に @IT さんにこんな記事を書きました。

VHD/VHDXのサイズを縮小するための事前準備は面倒?──その行為、無駄です!(@IT)

[URL] http://www.atmarkit.co.jp/ait/articles/1609/26/news016.html

Hyper-V マネージャーの仮想ハードディスクの編集ウィザードを使って、容量可変タイプの VHD/VHDX が期待どおりに最適化 (未使用領域を解放してサイズを縮小) できないというときに、読み取り専用でマウントして、Optimize-VHD で縮小すれば劇的に効果があるという話です。

ちょっとミスして、容量いっぱいまで拡大しちゃった仮想マシンの VHDX ができてしまい、Hyper-V マネージャーからの最適化ではまったく効果がなかったので、この方法を久々に試してみることに...

すると、なんだかおかしなことが...



具体的には、こんな感じでいけるはず。VHDX の場合は Quick モードで OK(VHDX の既定のモードは Quick、VHD の既定のモードは Full)。

PS> $targetvhd = "VHD(X)のフルパス"
PS> Mount-VHD $targetvhd -Readonly
PS> Optimize-VHD $targetvhd -Mode Quick
PS> Dismount-VHD $targetvhd


ところが、まったくサイズは縮小されませんでした。Dismount-VHD の前または後にもう一度、Optimize-VHD を実行すると、期待どおりに縮小されました。???

つまり...

PS> $targetvhd = "VHD(X)のフルパス"
PS> Mount-VHD $targetvhd -Readonly
PS> Optimize-VHD $targetvhd -Mode Quick (これがなぜか一瞬で終わる)

PS> Optimize-VHD $targetvhd -Mode Quick (こちらはがんばって最適化している感じ)
PS> Dismount-VHD $targetvhd
または
PS> $targetvhd = "VHD(X)のフルパス"
PS> Mount-VHD $targetvhd -Readonly
PS> Optimize-VHD $targetvhd -Mode Quick
PS> Dismount-VHD $targetvhd

PS> Optimize-VHD $targetvhd -Mode Quick (Dismount-VHD の後の最適化も効く)
 
とすると期待通りに縮小されました。理由は謎です。

3 件のコメント:

匿名 さんのコメント...

実際に 数回Optimize-VHD $targetvhd -Mode Quick行ってみたのですが、1回目は1秒くらい、2回目は2秒くらいで終了してしまい、最適化されませんでした

何かほかに手立てはあるのでしょうか?

山市 良 さんのコメント...

Hyper-V ホストの「ディスクの管理」に VHD/VHDX を接続して、マウントされた VHD/VHDX のボリュームを最適化し、VHD/VHDX を切断してから、VHD/VHDX の最適化(読み取り専用マウントしての)すると小さくなるかもしれません。

山市 良 さんのコメント...

それでも圧縮できない場合は、マウントしたVHD/VHDXのOSドライブのボリュームを縮小し、再び拡張したあとに最適化してみるとか。