Как сжать динамически растущий VDI-диск из VirtualBox?

Мои динамически растущие виртуальные диски (VDI) из различных установок Ubuntu в Virtual Box на самом деле неуклонно растут.

Удаление файлов на виртуальной машине не освобождает пространство, занимаемое моим VDI-файлом на жестком диске хоста.

Как мне сжать эти файлы, чтобы вернуть неиспользуемое пространство на жестком диске обратно хосту?

2 ответа

Решение

Динамически растущий файл виртуального жесткого диска Virtual Box способен расти по требованию виртуальной машины до максимального размера, который мы определили при настройке этого файла. Однако это не освобождает пространство файлов, которые мы удалили в гостевой ОС.

Если диск слишком сильно вырос, мы можем сжать его снова, при условии, что неиспользуемое пространство заполнено нулями, а накопитель имеет формат VDI.

Для файловой системы ext2 - ext 4 это можно сделать из гостевой системы Ubuntu с помощью утилиты командной строки zerofree Установить нулевой *

zerofree /dev/sdxX

Для этого необходимо, чтобы диск не использовался и был демонтирован. Поэтому нам, возможно, придется временно привязать его к другой виртуальной машине, которую мы создали для этой цели, или нам нужно загрузить на нее виртуальную среду Ubuntu.

замещать /dev/sdxX с рассматриваемым разделом ext2, ext3 или ext4.

На более чем одном разделе мы должны повторить zerofree для каждого раздела. Имейте в виду, что при заполнении нулями виртуальный файл будет временно увеличиваться до максимального размера.

Когда все неиспользуемое дисковое пространство заполнено нулями, мы сжимаем диск

VBoxManage modifyhd <name>.vdi --compact

Это значительно уменьшит размер нашего VDI-файла.

* В гостевой системе Windows мы можем заменить неиспользуемое пространство утилитой sdelete ,

Вот несколько альтернативных способов обнуления свободного дискового пространства (которое может быть наиболее трудоемким этапом). После этого вам все равно придется бежать 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
Другие вопросы по тегам