Ich habe eine VirtualBox-VM, die eine sehr große Festplatte (größer als der Host) konfiguriert hat. Aus Versehen hat ein Programm auf der VM viele Protokolldateien generiert, und die Größe der VDI-Datei wächst so lange, bis auf dem Host kein Speicherplatz mehr verfügbar ist.
Jetzt habe ich die Protokolldateien gelöscht, aber die VDI-Dateigröße wird nach der Verwendung nicht kleiner VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact
Gibt es eine Möglichkeit, die VDI-Dateigröße wirklich zu komprimieren? Vielen Dank!
quelle
dd ...; rm /bigfile
Dies minimiert die Zeit mit einer vollen Festplatte, falls Sie nicht auf dendd
Abschluss warten .Ich arbeite auf einem Windows 7-Host mit Windows-Gästen. Hier ist eine Batchdatei, die ich geschrieben habe, um alle VDIs in einer Ordnerstruktur zu komprimieren
Ich habe die Links in den Kommentaren hinterlassen, damit Sie (irgendwie) sagen können, wie es funktioniert.
bearbeiten
Nach all dem habe ich das CloneVDI-Tool ausprobiert und es hat in viel kürzerer Zeit und mit einem Klick gute Arbeit geleistet.
quelle
Debian-Gast auf Windows-Host mit discard / TRIM.
Dies ist an sich keine direkte Antwort, da ich das Problem und nicht die Frage anspreche. Anstatt das Image regelmäßig zu komprimieren, werden bei dieser Lösung nicht verwendete Blöcke im VM-Image des Hosts mithilfe von Discard automatisch entfernt.
Diese Lösung erfordert ein Gastdateisystem, das kontinuierliches TRIM unterstützt. Das Arch Linux-Wiki enthält eine Liste von Dateisystemen, die TRIM-Operationen unterstützen .
FDE und Cryptoroot werden speziell nicht behandelt, da es Sicherheitsbedenken gibt und keine der anderen Lösungen für diese Frage eine Komprimierung ermöglichen würde. Das Arch Linux-Wiki enthält Informationen zu TRIM- und dm-crypt-Geräten .
Theoretisch funktioniert dies für alle Linux-Gäste auf VBox-Hosts, die VDI-Speicher verwenden.
Host-Konfiguration
Mit VBox verlassen und keine VMs ausgeführt wird , fügen beide auf Ihre Festplatten Ablage Unterstützung durch das Setzen
discard
undnonrotational
für jede Platte in der Konfigurationsdatei für die VM. Zu diesem Zeitpunktdiscard
befindet sich dasnonrotational
Kontrollkästchen nicht in der GUI, sondern wird als "Solid-State-Laufwerk" angezeigt. (ref: vbox foren, support verwerfen )Starten Sie die VM und vergewissern Sie sich, dass die TRIM-Unterstützung aktiviert ist:
Gastkonfiguration
Wenn LVM verwendet wird, ändern Sie die Discard-Einstellung in
/etc/lvm/lvm.conf
. (ref: debian wiki, lvm.conf beispiel )discard
Fügen Sie in fstab die Option zu den Dateisystemen hinzu, die Sie automatisch verwerfen möchten (Ref: Debian-Wiki, Beispiel fstab ).Stellen Sie die Dateisysteme erneut bereit, damit sie ihre neuen Optionen abrufen können.
Freie Blöcke jetzt manuell mit zuschneiden
fstrim
.fstrim
Verwendet das gemountete Dateisystem und nicht das Blockgerät, das es sichert. Anstatt fortlaufend zu verwerfenfstab
, könnte dies auf einem wöchentlichen Cron erfolgen. (Der wöchentliche Cron wird für physische SSDs empfohlen, die möglicherweise eine fragwürdige Unterstützung für TRIM bieten . Dies ist hier jedoch nicht relevant, da zugrunde liegende SSDs vom Host-Betriebssystem verarbeitet werden. Siehe: ssd trim warning ).Zu diesem Zeitpunkt sollten die Größe der Dateisysteme in der VM und die Größe der VM-Images einen ähnlichen Wert haben.
Getestet mit:
quelle
Gehen Sie für MacOS Guest wie folgt vor:
Freien Speicherplatz im Gastsystem aufheben:
(Ersetzen Sie / Volumes / Macintosh HD durch Ihren Laufwerksnamen)
Fahren Sie die Gast-VM herunter
Führen Sie diesen Befehl aus, um die Größe des VDI-Festplattenabbilds zu verringern
ODER
quelle
Ich verwende dies für mein VDI-Image, das in das virtuelle Debian in Windows VirtualBox eingebunden ist. Es ist keine generelle Lösung, aber es sollte Ihnen zumindest einen Überblick darüber geben, was ich tue.
Befehle in Debian:
Befehle in Windows:
Ich hoffe es hilft :)
quelle
Ich möchte die TRIM-Unterstützung im Betriebssystem nicht aktivieren, da bei jedem Löschen der Daten die Daten in der VDI-Datei komprimiert werden und das Gastsystem unbrauchbar wird, wenn sich die VDI-Datei auf einer klassischen Rotationsdisk befindet. Für mich ist es besser, die Verdichtung von Hand durchzuführen, z. B. einmal im Monat.
Während der normalen Komprimierung wird der Inhalt der VDI-Datei in eine neue Datei kopiert. Dies erfordert einen (manchmal großen) freien Speicherplatz auf der Host-CD.
Ich habe Lösung ähnlich von Andrew Domaszek gezeigt. Es funktioniert sehr gut, auch mit NTFS (Windows 10).
Um dies zu tun:
Ändern Sie VDI-basierte Discs so, dass sie mit TRIM-Unterstützung als SSD angezeigt werden:
Maschine starten
mount /dev/sda2 /mnt
dd if=/dev/zero of=/mnt/bigfile
rm /mnt/bigfile
fstrim -v /mnt
quelle
Ein sehr nützlicher Trick, um die akzeptierte Antwort zu ergänzen, besteht darin, dass Sie durch die Verwendung eines komprimierten Dateisystems auf dem Host (z. B. durch Auswahl der Option zum Komprimieren des Ordners virtueller Laufwerke in NTFS-Eigenschaften auf einem Server) davonkommen können, ohne den Gastspeicher zu komprimieren Windows-Host). Dies hat in der Tat den Vorteil, dass viel mehr Speicherplatz gespart wird, da Betriebssysteme dazu neigen, viele sich wiederholende Text- oder Binärdateien zu speichern (z. B. kann ein 30-GB-Gastlaufwerk mit 15 GB auf dem Hostlaufwerk auf 4 GB zurückgesetzt werden).
Vorsichtsmaßnahmen umfassen, dass der Laufwerkzugriff auf die reale Hardware zunehmen kann und die CPU-Auslastung leicht zunimmt.
quelle
WICHTIGER HINWEIS FÜR LEGACY (~ 1997-2007) BETRIEBSSYSTEME
Im Allgemeinen sind die Techniken in den zuvor gegebenen Antworten gültig; Es gibt jedoch einen sehr wichtigen Sonderfall.
Einige Jahre lang - vielleicht zwischen 1997 und 2007 - waren 32-Bit-Betriebssysteme noch die Norm, aber Festplatten mit mehr als 2 GB wurden bereits verwendet. Wenn Sie versuchen, den gesamten freien Speicherplatz zu belegen, indem Sie eine Datei mit Nullen schreiben (dies sollte immer als root erfolgen, um den privilegierten freien Speicherplatz von root einzuschließen, den sonst niemand berühren kann), wird möglicherweise Folgendes angezeigt:
Datei zu groß
anstatt was Sie erwarten:
Kein Speicherplatz auf Gerät.
In diesem Fall liegt höchstwahrscheinlich eine Dateigrößenbeschränkung von 2 GB vor. Dies war zu der Zeit üblich, da viele zurückgegebene Dateioperationen zu vorzeichenbehafteten 32-Bit-Ganzzahlen führten, sodass negative Werte Fehlercodes melden konnten. Dies bedeutete effektiv, dass die Offset-Ergebnisse ohne besondere Maßnahmen auf 2 ^ 31 Bytes begrenzt wurden.
Die Problemumgehung ist unkompliziert: Erstellen Sie so lange separate Nullstellungsdateien mit unterschiedlichen Namen, bis auf der Festplatte tatsächlich kein Speicherplatz mehr verfügbar ist.
Wenn Sie ein Kursleiter sind, der diese Situation für eine Klasse demonstrieren möchte, ist ein 4-GB-Disk-Image mit einer alten Kopie von Red Hat Linux 7.0 ausreichend.
quelle