treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Hyper-VでLinuxゲストOSのVHD/VHDX容量を削減(ダイエット)

Hyper-Vを使っていてよく出会うのが、メモリとストレージの容量不足。
WindowsがゲストOSのときのやり方は多くあれど、Linuxゲストの場合は…?

やってみたのでご報告します。

Hyper-Vを利用していると、ゲストOS上ではそれほど消費していないはずのディスク容量が、ホストOSからそのゲストのVHD/VHDXファイルを確認すると結構な容量を食っていることがあります。
これを縮小したい、という時のTIPSをやってみたのでメモ。

容量、ホスト:ゲストの比

DebianでsambaサーバによるActive Directory環境を稼働させているのですが、このドメインコントローラとなるsambaサーバが今回の対象です。
Debian上から見たときの容量は…
-------------------------------------------------------
$ df -m
ファイルシス 1M-ブロック 使用 使用可 使用% マウント位置
/dev/sda1 125864 2489 116959 3% /
udev 10 0 10 0% /dev
tmpfs 98 5 93 5% /run
tmpfs 244 0 244 0% /dev/shm
tmpfs 5 0 5 0% /run/lock
tmpfs 244 0 244 0% /sys/fs/cgroup
tmpfs 49 0 49 0% /run/user/1000
-------------------------------------------------------

2489MBなので、約2.5GBしか使われていないということが分かります。
しかし実際にホストOS上からVHDXファイルのプロパティで容量を確認すると、

f:id:treedown:20180313173659p:plain
「サイズ:19.8 GB (21,311,258,624 バイト)」と記載されており、20GBの容量が使われていることが分かります。sambaサーバのActive Directoryは何回かリプレイスを繰り返しているのですがよく見るとこのサーバは2014年から4年間稼働しっぱなしということが分かります。

手順その1:ゲストOSで

ゲストOS上では、Linuxゲストの空き領域をゼロクリアする、という操作を実行します。
WindowsだとWindows SysinternalsでSDeleteというプログラムを用意し、空き領域ゼロクリアすることになります。

※Windows Sysinternals:SDelete

https://technet.microsoft.com/ja-jp/sysinternals/bb897443(en-us).aspx

しかし今回はゲストOSはDebian GNU/Linuxです。
この場合にはddコマンドを実行してゼロクリアを実行することになります。

$ dd if=/dev/zero of=zero bs=4k; \rm zero

※指定を間違えるとディスク上のデータを完全消去してしまうことになる(場合もある)のでご注意をば

手順その2:ホストOSで

ホストOSでやることは一つ、PowerShellの「Optimize-VHD」コマンドレットでVHD/VHDXファイルを指定して容量縮小を実行する、という一点です。

> Optimize-VHD -Path %VHDファイル名% -Mode Full

-ModeはQuickとかPretrimmedなどといったいくつかオプションがありまして、デフォルトはWindowsのバージョンによってFullだったりQuickだったりと変化しますが、以前のバージョンからFullを指定しておけばやりたいこと(容量削減)は可能でしたので、明示的にFullで指定して容量削減を実行します。

上手く容量削減ができない場合には、
-------------------------------------------------------
> Mount-VHD %VHDファイル名% -NoDriveLetter -Readonly
> Optimize-VHD -Path %VHDファイル名% -Mode Full
> Dismount-VHD %VHDファイル名%
-------------------------------------------------------
という具合にマウントさせるといいのかも(今回はしませんでしたが)

さて、結果はというと、

f:id:treedown:20180313173753p:plain
半分、まではいかないまでも、3割・4割削減までは行けました。