Два случая:
1. При создании изображения HDD с помощью dd и копии это nfs канавки к другому серверу:
mount -o ro,remount /
dd if=/dev/sda bs=64K | gzip -c > /share/test.img.gz
затем после gunzip я получаю 20 ГБ (для напр.) файл, заполненный w/zeroes в конце:
du -h /md/share/test.img
21G /md/share/test.img
2. Если я создаю пустое изображение с помощью dd:
dd if=/dev/zero of=/md/share/test2.img bs=1024k seek=20480 count=0
Я добрался:
du -h /md/share/test2.img
0 /md/share/test2.img
ls -lah /md/share/test2.img
-rw-r--r-- 1 root root 20G Aug 2 14:46 /md/share/test2.img
После монтирования этого гостю я могу использовать все 20G всегда, я хочу, и размер IMG всегда равен, это - фактическое содержание, ни с кем "обнуляет" еду моего пространства массива.
Вопрос: как я могу уменьшить размер образа диска для случая 1?
Ответ: если dd поддерживает conv=sparse
атрибут, это должно использоваться в дополнение к tar --sparse
. В противном случае обновление coreutils
и попробуйте его снова. Еще пакет установки libguestfs-tools
и выполненный virt-sparcify /md/share/test.img /md/share/test_sparse.img
Как сказал @sam_pan_mariusz, изображение уменьшенного размера вы создаете свое «пустое» изображение как «разреженный» файл. Чтобы создать разреженный файл из существующего блочного устройства, добавьте параметр conv = sparse
в команду dd if = / dev / sda [...]
, которую вы использовали для сделать исходное изображение. Вам нужно будет поместить файл образа в tar --sparse
, потому что простое сжатие образа файла приведет к записи разреженных фрагментов, что сделает их неразреженными.
Эта функция называется разреженными файлами . GNU tar --sparse
обрабатывает их хорошо, за исключением одного только gzip.
Также не повредит использовать zerofree
в конечном образе.