zwolnij nieużywane miejsce w pliku obrazu qcow2 na kvm / qemu

23

używamy kvm / qemu z obrazami qcow2 dla naszych maszyn wirtualnych.

qcow2 ma tę fajną funkcję, w której plik obrazu alokuje tylko faktycznie potrzebną przestrzeń przez maszynę wirtualną. ale jak zmniejszyć plik obrazu, jeśli przydzielone miejsce na maszynie wirtualnej zmniejsza się?

przykład:

1.) Tworzę nowy obraz w formacie qcow2, rozmiar 100 GB

2.) Używam tego obrazu do instalacji Ubuntu. instalacja wymaga około 10 GB, plik obrazu rośnie do około 10 GB. jak dotąd nic nieoczekiwanego.

3.) Wypełniam obraz około 40 GB dodatkowych danych. plik obrazu rośnie do 50 GB. nic mi nie jest :-)

4.) tutaj robi się dziwnie: usuwam wszystkie 40 GB danych z obrazu, ale rozmiar obrazu nadal zjada 50 GB.

pytanie: jak zwolnić 40 GB danych i zmniejszyć obraz do potrzebnych 10 GB?

z góry dzięki, berni

bmaeser
źródło

Odpowiedzi:

26

Obraz nie zmniejszy się automatycznie, ponieważ podczas usuwania plików tak naprawdę nie usuwasz danych (dlatego przywracanie działa). Qemu ma funkcję zmniejszania obrazów qcow2 z powrotem, ale to, co robi narzędzie, naprawdę deduplikuje zera z dysku, pozostawiając wszystkie inne informacje nietknięte. Pomysł polegałby na:

  1. Nie wypełniaj dysku ( dd if=/dev/zero of=/some/filedopóki nie zabraknie Ci miejsca)
  2. usuń / some / file
  3. zamknij maszynę wirtualną
  4. cd do miejsca, w którym przechowywane są obrazy maszyny wirtualnej i uruchom je qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
  5. zmień ustawienia maszyny wirtualnej, aby użyć nowego pliku deduplicated_image.qcow2, przetestuj maszynę wirtualną i usuń stary obraz

To, afaik, będzie działać tylko z obrazami qcow2, nie testowałem innych formatów.

dyasny
źródło
3
Jeśli masz gościa z systemu Windows, uruchom SDelete -z, aby wyzerować całe wolne miejsce (kroki 1,2 powyżej)
ndemou
17

virt-sparsify może to wszystko zrobić z mniejszym wysiłkiem z Twojej strony: http://libguestfs.org/virt-sparsify.1.html

Eric Blake
źródło
Nie jestem pewien, czy to było w 2011 roku
dyasny
2
@dyasny Jeśli istniejące odpowiedzi na stare pytania z czasem stały się nieaktualne, warto napisać nową odpowiedź. Ta konkretna nowa odpowiedź może jednak nie odpowiadać standardom dla tej witryny.
kasperd
4
@dyasny Jeśli ktoś chce poświęcić wysiłek na napisanie nowej jakości odpowiedzi, za każdym razem, gdy stara jest przestarzała, należy do tego zachęcić. Dokładniejsza dyskusja na temat postępowania z nieaktualnymi odpowiedziami jest bardziej odpowiednia dla meta.
kasperd
1

virt-sparsify fileA fileBzrobi to wszystko, ale tak naprawdę nie zmniejszy rozmiaru obrazu. W tym celu musisz dodać --compress.

cmyster
źródło