Cжатие свободного места в freebsd перед копированием виртуалки virtualbox

Как правильнее сжать образ виртуальной машины FreeBSD?

Описание задачи:
Есть виртуальная машина FreeBSD с именем freevm, которую надо грамотно перенести на другую хост-машину.
Образ диска виртуальной машины (файл freevm.vdi), созданного с типом dynamically allocated storage, занимает 90Gb. При этом размер основного раздела диска FreeBSD — 120Gb, а занято всего 10G (df -H).
Требуется максимально сжать vdi файл перед копированием на другую физическую хост-машину.

Как оказалось, это не такая простая задача, как кажется на первый взгляд.
По сути все сводится к следующим двум простым этапам:

  • подготовка гостевой ОС FreeBSD к сжатию
  • собственно сжатие файла образа виртуалки

Начнем по порядку. Для того, чтобы образ виртуалки существенно уменьшился при сжатии любыми утилитами, надо сначала удалить все ненужные файлы, архивы и деинсталлировать все неиспользуемые программы. Это — очевидно. Затем надо заполнить все свободное пространство жесткого диска виртуалки нулями.

Для этого можно воспользоваться простой командой:

cat /dev/zero > zero.dump;sync;sleep 1;sync;rm -f zero.dump

Суть этой команды состоит в том, чтобы заполнить все свободное место текущего раздела «нулями». Когда, место на разделе будет исчерпано, команда завершится с ошибкой (cat: write error: No space left on device), и файл дампа zero.dump удалится.
Как вариант, можно применить команду dd (dd if=/dev/zero of=zero.dump bs=1m).
После этого можно переходить к собственно сжатию.

Второй этап — сжатие файла — образа жесткого диска freevm.vdi. Для этого: выключаем виртуалку (shutdown -p now), входим на хост машину пользователем vboxuser и даем следующую команду:

vboxmanage modifyhd /data/vm/vmhdd/freevm.vdi —compact

Теперь, в результате мы получим файл vdi по размеру, близкий в реальному объему данных на виртуалке (примерно 11G в нашем случае).

Дальше этот vdi-файл, естественно, можно попробовать сжать любым компрессором (tar, zip, compress и т.п.)
По моему опыту, проще, быстрее и эффективнее сжать zip-ом:

zip -dd -ds 500m freevm.zip freevm.vdi

В данном примере получился файл размером всего 4Gb. Таким образом, наш выигрыш в 22.5 раза. При невысокой скорости канала передачи — это очень упростит жизнь и укорит дело.
Ключ -dd -ds 500m будет отображать одну точку при увеличении объема создаваемого архива на полгига. Удобно следить за прогрессом выполнения.

Ваш отзыв

Вы должны войти, чтобы оставлять комментарии.