У меня есть виртуальная машина, которая изначально имела 5 снимков: 1,2,3,4,5.
я использовалqemu-imgудалить снимки 1, 2, 3. Снимки 4 и 5 все еще нужны и не были удалены.
Как освободить пространство, используемое снимками 1,2,3, и сохранить снимки 4 и 5?
Я потратил много времени на поиск решения, и найденные мной решения укладываются в одну из двух схем:
Используйте qemu-img convert(Удалены необходимые снимки)
qemu-img convert -O qcow2 Linux.qcow2 Linux_s.qcow2
Это уменьшает пространство, используемое Linux.qcow2, но удаляет снимки 4 и 5.
Скопируйте виртуальную машину и используйте virt-sparsify(Не восстанавливает место)
cp Linux.qcow2 TEST.qcow2
sudo virt-sparsify --in-place TEST.qcow2
Он сохраняет два неудалённых снимка, но не восстанавливает пространство, которое изначально занимали снимки 1,2,3.
Как восстановить место в файле qcow2 после удаления снимков, сохранив при этом оставшиеся снимки?
решение1
Файлы qcow2 — это разреженные файлы. В файловых системах, которые поддерживают разреженные файлы, они могут занимать на диске гораздо меньше места, чем размер файла.
Если удалить снимок, размер, указанный в отчете, ls -l
не изменится, но объем свободного места на диске, указанный в отчете, df
изменится.
Почти все файловые системы поддерживают разреженные файлы. FAT и NFSv3, вероятно, единственные распространенные файловые системы, которые этого не делают.
решение2
При удалении снимков 1,2,3 файлы удаляются, но это не указывает на освобожденное пространство, поскольку это не настоящее удаление. Файлы просто помечаются, чтобы удаление было завершено быстро.
Если вы хотите освободить место, занятое удаленными снимками, вы можете преобразовать файл qcow2, но перед этим вам необходимо заполнить файл qcow2 значением 0 с помощью команды dd:
$dd if=/dev/zero of=~/junk
dd: writing to `/home/***/junk': No space left on device
$rm junk
затем конвертируйте файл qcow2
qemu-img convert -O qcow2 Linux.qcow2 Linux_s.qcow2