VirtualBoxから動的に成長するVDIディスクを縮小するにはどうすればよいですか?


35

Virtual BoxのさまざまなUbuntuインストールから動的に成長する仮想ディスク(VDI)は、実際に着実に「成長」しています。

仮想マシンのファイルを削除しても、VDIファイルがホストのハードディスクスペースから取ったスペースは解放されません。

これらのファイルを圧縮して未使用のハードディスク領域をホストに戻すにはどうすればよいですか?

回答:


34

動的に成長するVirtual Box仮想ハードドライブファイルは、このファイルのセットアップで定義した最大サイズまで、仮想マシンの要求に応じて成長できます。ただし、ゲストOSで削除したファイルのスペースは解放されません。

ディスクが大きくなりすぎた場合は、未使用のスペースがゼロで埋められていて、ドライブがVDI形式である限り、再度圧縮できます。

ext2からext 4のファイルシステムの場合、これはコマンドラインユーティリティzerofree *を使用してUbuntuゲストから実行できます。zerofreeをインストールする

zerofree /dev/sdxX

これには、ドライブが使用されておらず、マウント解除されている必要があります。したがって、この目的のために作成した別のVMに一時的にバインドするか、このVMでUbuntuライブ環境を起動する必要があります。

問題/dev/sdxXのext2、ext3、またはext4形式のパーティションに置き換えます。

複数のパーティションで、zerofreeパーティションごとに繰り返す必要があります。ゼロで埋めることにより、仮想ファイルが一時的に最大サイズまで大きくなることに注意してください。

すべての未使用ドライブ領域がゼロで満たされると、ドライブを次のように縮小します

VBoxManage modifyhd <name>.vdi --compact

これにより、VDIファイルのファイルサイズが大幅に減少します。

* Windowsゲストでは、ユーティリティで未使用のスペースを置き換えることができますsdelete


これはゲスト内の暗号化されたファイルシステムでも機能しますか?
smichak

はい。を使用しているecryptfs場合、暗号化されたファイルはディスクユーティリティでは通常のファイルのように見え、これは機能します。フルディスク暗号化を使用している場合、いずれにしてもextフォーマットのパーティションとして認識されません:)
chronospoon

dm-cryptブロックデバイスでext4パーティションを使用しています。この方法を試しましたが、圧縮後に.vdiファイルが小さく表示されません。ゼロブロックは、dm-cryptの下のブロックデバイスにゼロ以外のブロックとして保存されると思います。
smichak

2
@smichak:それが暗号化のポイントです。すべてのドライブを暗号化して、ファイルの境界が見えないようにします。
タックカット

3
あなたが別のマシンにあなたのVDIを添付しない場合は、リカバリモードで起動し、読み取り専用ディスクをマウントすることができmount -n -o remount,ro -t ext4 /dev/sda1、その後zerofree -v /dev/sda1
ハミドナザリ

1

空きディスク容量をゼロにするためのいくつかの代替方法を次に示します(これは最も時間がかかる部分です)。その後、VBoxManage modifyhd <disk> --compact実際のディスクファイルを圧縮するために実行する必要があります。


このコマンドは、アンマウント中にディスクをゼロにすることができます。

apt-get install zerofree
zerofree -v /dev/sdxN


次に、ddに定期的に出力を出力させる方法の例を示します。

dd if=/dev/zero of=temp-file-on-disk bs=20M

# run this to get the process ID of the dd command
pgrep -l '^dd$'
# then put the process ID on the command line to "kill -USR1"
# this will tell dd to print the current status (in another terminal)
kill -USR1 $(pgrep -l '^dd$' | awk '{print $1}')


以下は、dd定期的に出力を自動的に印刷するようなプログラムです。

apt-get install dcfldd
dcfldd if=/dev/zero of=temp-file-on-disk bs=20M

1
zerofreeマウントされたファイルシステムで使用されているのを見たことがありますが、読み取り専用でマウントされたときです。ルートFSの場合でも:sudo mount -o remount,ro /-しかし、GUIセッションではルートはビジーになるため、失敗します。ただし、ランレベル1(telinit 1)では可能です。そのため、ライブCDから起動する必要はありません。
トマスガンドール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.