Я хочу воссоздать динамически размещенное изображение qcow2, чтобы уменьшить его. Достаточно ли, чтобы все ненужные файлы были удалены, или мне также нужно заполнить пространство, ранее занимаемое этими файлами, нулями? Другими словами, поддерживает ли qemu-img файловую систему?
Да, вам нужно обнулить файловую систему, если вы хотите восстановить пространство, используемое удаленными файлами. И нет, qemu-img не поддерживает fs.
Я забыл сделать это для одного образа виртуальной машины, который я создал сегодня (минимальный образ Debian Sid для моего облака openstack на работе), и в итоге он оказался почти 900 МБ, даже с «-c» для сжатия qcow2.
Я воссоздал его после запуска «dd if = / dev / zero of = / root / zero; rm -f / root / zero; shutdown -h now», и размер изображения уменьшился примерно до 335 МБ. Это намного меньше (бесполезных) данных, которые нужно копировать всякий раз, когда я запускаю новый экземпляр.
было много удаленных файлов, потому что виртуальная машина начиналась как debian squeeze и была обновлена до sid.
Смотрите также: virt-sparsify
, утилита, которая может обнулять файловые системы внутри образов дисков (с поддержкой различных форматов):
Я использую zerofree ( apt-get install zerofree
) для этой задачи:
Zerofree находит нераспределенные блоки с ненулевым содержимым в файловой системе ext2, ext3 или ext4 и заполняет их нулями
после этого вы можете уменьшить изображение:
kvm-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
Лично я считаю, что лучше клонировать диск с помощью Clonezilla или Symantec Ghost. Это намного быстрее, чем заполнять диск нулями. Также это позволяет еще больше избежать увеличения изображения.
Я делал это с гостями Ghost and Win бесчисленное количество раз. На самом деле это быстрее, если «использованное пространство» меньше обнуляемого. Также вы можете использовать qemu-nbd
для монтирования образов и запуска Clonezilla с хоста, избегая хлопот, связанных с Clonezilla-within-guest. В любом случае это всегда намного быстрее, чем sdelete
/dd
по моему опыту. (Кроме того, у меня часто заканчивается свободное место на хосте для операции полного обнуления гостевого диска, поэтому заполнение доступного места на гостевом диске для меня редко бывает возможным.)