Mam VirtualBox VM, który skonfigurował bardzo duży rozmiar dysku twardego (większy niż host). Przez mój błąd program na maszynie wirtualnej wygenerował wiele plików dziennika, a rozmiar pliku VDI rośnie, dopóki nie ma miejsca na hoście.
Teraz usunąłem pliki dziennika, ale rozmiar pliku VDI nie zmniejsza się po użyciu VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact
Czy istnieje sposób, aby naprawdę zmniejszyć rozmiar pliku VDI? Dzięki!
źródło
dd ...; rm /bigfile
, to zminimalizuje czas z pełnym dyskiem w przypadku, gdy nie będziesz czekać nadd
ukończyć.Jeśli uruchomienie polecenia w zaakceptowanej odpowiedzi spowoduje powstanie niepomyślnego komunikatu o błędzie takiego jak ten
Po prostu uruchom polecenie przez identyfikator UUID zamiast nazwy pliku:
źródło
Jestem na komputerze z systemem Windows 7 z gośćmi w systemie Windows. Oto plik wsadowy, który napisałem do Kompaktuj wszystkie VDI w drzewie folderów
Pozostawiłem linki w komentarzach, abyś mógł (w pewnym sensie) powiedzieć, jak to działa.
edytować
Po tym wszystkim spróbowałem Narzędzie CloneVDI i wykonał dobrą robotę w znacznie krótszym czasie i jednym kliknięciem.
źródło
Gość Debiana na hoście Windows przy użyciu odrzucenia / TRIM.
Nie jest to bezpośrednia odpowiedź jako taka, ponieważ zajmuję się problemem, a nie pytaniem. Zamiast okresowego kompaktowania obrazu, to rozwiązanie wykorzystuje odrzucanie, aby automatycznie usuwać nieużywane bloki na obrazie dysku maszyny wirtualnej hosta.
To rozwiązanie wymaga systemu plików gościa obsługującego ciągły TRIM. Wiki z Arch Linux ma lista systemów plików obsługujących operacje TRIM .
FDE i kryptoroot nie są specjalnie omówione, ponieważ istnieją obawy związane z bezpieczeństwem, a żadne inne rozwiązanie tego pytania również nie pozwoliłoby na kompaktowanie. Wiki o Arch Linux ma informacje na ten temat Urządzenia TRIM i dm-crypt .
Teoretycznie będzie to działać dla wszystkich gości Linuksa na hostach VBox korzystających z pamięci VDI.
Konfiguracja hosta
Po zamknięciu VBox i braku uruchomionych maszyn wirtualnych dodaj obsługę dysków do dysków, ustawiając oba
discard
inonrotational
dla każdego dysku w pliku konfiguracyjnym maszyny wirtualnej. W tym czasiediscard
nie ma w GUI, alenonrotational
jest widoczne jako pole wyboru „Dysk SSD”. (ref: fora vbox, odrzuć wsparcie )Uruchom maszynę wirtualną i sprawdź, czy obsługa TRIM jest włączona:
Konfiguracja gościa
Jeśli LVM jest w użyciu, zmień ustawienie odrzucania
/etc/lvm/lvm.conf
. (ref: debian wiki, przykład lvm.conf )W fstab dodaj
discard
opcja dla systemów plików, które chcesz automatycznie odrzucić (ref: debian wiki, przykład fstab )Ponownie zainstaluj systemy plików, aby odebrać nowe opcje.
Ręcznie przycinaj teraz wolne bloki
fstrim
.fstrim
używa zamontowanego systemu plików, a nie urządzenia blokowego, które go wspiera. Zamiast ustawiać ciągłe odrzucaniefstab
, można to zrobić na cronie tygodniowym. (Cotygodniowy cron jest zalecany dla fizycznych dysków SSD, które mogą mieć wątpliwe wsparcie dla TRIM, ale nie ma to znaczenia, ponieważ podstawowe dyski SSD są obsługiwane przez system operacyjny hosta. ssd ostrzeżenie trym ).W tym momencie rozmiar systemów plików w maszynie wirtualnej i rozmiar obrazów maszyn wirtualnych powinny być bardzo zbliżone.
Testowane z:
źródło
Dla MacOS Guest Zrób to:
Zlikwiduj wolne miejsce w systemie gościa:
(zastąp / Volumes / Macintosh HD nazwą napędu)
Zamknij maszynę wirtualną gościa
Uruchom to polecenie, aby zmniejszyć rozmiar obrazu dysku VDI
LUB
źródło
Używam tego do mojego obrazu VDI zamontowanego na wirtualnym Debianie w Windows VirtualBox. To nie jest ogólne rozwiązanie, ale powinno przynajmniej dać ci wgląd w to, co robię.
Polecenia w Debianie:
Polecenia w systemie Windows:
Mam nadzieję, że to pomoże :)
źródło
Nie chcę włączać obsługi TRIM w systemie operacyjnym, ponieważ każde usunięcie danych wymusi kompaktowanie danych w pliku VDI, czyniąc system gościa bezużytecznym, gdy plik VDI jest na klasycznym dysku rotacyjnym. Dla mnie lepiej jest wykonać zagęszczanie ręcznie, np. raz na miesiąc.
Podczas normalnego kompaktowania zawartość pliku VDI jest kopiowana do nowego pliku. Wymaga to (czasem dużego) wolnego miejsca na dysku hosta.
Mam rozwiązanie podobne do wskazanego przez Andrew Domaszka. Działa bardzo dobrze nawet z NTFS (Windows10).
Aby to zrobić:
VBoxManage storageattach "gpared live" --storagectl "SATA" --port 0 --discard on --nonrotational on VBoxManage storageattach "gpared live" --storagectl "SATA" --port 1 --discard on --nonrotational on
mount /dev/sda2 /mnt
dd if=/dev/zero of=/mnt/bigfile
rm /mnt/bigfile
fstrim -v /mnt
źródło
Bardzo zgrabnym sposobem na uzupełnienie akceptowanej odpowiedzi jest to, że możesz uciec bez kompaktowania po wyzerowaniu przestrzeni gościa, używając skompresowanego systemu plików na hoście (np. Wybierając kompresowanie folderu napędów wirtualnych na właściwościach NTFS na Host systemu Windows). Ma to tę zaletę, że pozwala zaoszczędzić dużo więcej miejsca, ponieważ systemy operacyjne często przechowują wiele powtarzających się plików tekstowych lub binarnych (np. Dysk o pojemności 30 GB, który miał 15 GB miejsca zerowanego, może zmienić się na 4 GB na dysku hosta).
Ostrzeżenia obejmują fakt, że dostęp do dysku na rzeczywistym sprzęcie może wzrosnąć, a użycie procesora nieznacznie wzrasta.
źródło