Warum wächst VirtualBox-Festplatte ständig, obwohl ich Dateien vom virtuellen Laufwerk lösche?

2152
Ajayvignesh

Ich habe es sowohl im nativen VBox-Format als auch im VMDK-Format gesehen. Obwohl ich Dateien vom virtuellen Laufwerk lösche, sehe ich, dass es ständig wächst. Ich habe eine vage Vorstellung, dass das Nullen von Dateien bei den virtuellen Laufwerken über diesen Link nicht auftritt . Als ich das mit SDelete versuchte (wie im Link erwähnt), wurde die VDi-Festplattengröße nicht reduziert. Ich habe Anwendungen, die bei der Installation die Festplatte jedes Mal auf 10 GB anwachsen lassen. Ich glaube, es sollte einen einfachen Weg geben, um es auf Null zu stellen, als durch den langweiligen Prozess zu gehen, gibt es einen? Gibt es eine Option in VirtualBox, um das virtuelle Laufwerk klein zu halten?

1
Nach dem Nullen der Cluster müssen Sie `vboxmanage --compact` ausführen, um diese null Cluster aus der VDI-Datei zu entfernen phuclv vor 6 Jahren 0
Verwendet Vbox die Zero-Ed-Cluster nach dem Verbrauch an einem beliebigen Punkt wieder? Soll ich das manuell machen? Warum macht VBox das nicht automatisch wie Windows oder Mac auf der Festplatte? Ajayvignesh vor 6 Jahren 0
Spar-Image-Dateien - das sind VirtualBox-Festplatten-Images - beginnen nur mit dem für das System erforderlichen Minimum und wachsen bei Bedarf und je nach Verwendung. Nehmen wir an, ein sauberes VirtualBox-Setup beginnt mit einer 8-GB-Festplatte, es werden jedoch nur 1 GB verwendet. Die Dateigröße beträgt dann 1 GB. Fügen Sie dem 1-GB-System einen 2-GB-Stapel von Dateien hinzu, jetzt sind es 3 GB. Wenn Sie jedoch die 2 GB entfernen, wird die Dateigröße des Festplattenimages immer noch 3 GB betragen. JakeGould vor 6 Jahren 2
weil Festplatten ** fest ** sind. Wenn Sie einen VDI mit fester Größe erstellt haben, müssen Sie das Image nicht verkleinern, es kostet Sie jedoch viel Speicherplatz. Möchten Sie eine 1-TB-Datei für ein leeres 1-TB-Laufwerk? Normalerweise wird die Größe von VDI- und VMDK-Dateien dynamisch geändert, sodass Sie keinen Speicherplatz dafür benötigen, wenn Sie nichts auf der Festplatte speichern. Es speichert nur Nicht-Null-Cluster phuclv vor 6 Jahren 0
Theoretisch ist es möglich, [SSD-TRIM-Befehle zum automatischen Komprimieren der entfernten Blöcke] zu verwenden (https://superuser.com/q/193650/241386), obwohl es scheint, dass keiner der aktuellen Hypervisors das implementiert phuclv vor 6 Jahren 0
Nur um Informationen darüber hinzuzufügen, was ich versucht habe. Ich baute eine VM mit 10 GB dynamischer Festplatte und füllte sie bis auf 10 GB auf. Über 10 GB hinaus wuchs die Festplatte nicht über 10 GB hinaus, und das Löschen und Hinzufügen neuer Dateien auf der Festplatte ist nach Erreichen von 10 GB VDI-Datei weiterhin möglich. Eine weitere Sache, die mir aufgefallen ist, als ich einen Schnappschuss nach 10 GB erreichte, das Löschen und Hinzufügen von Dateien den Schnappschuss auf einige 1,8 GB vergrößerte und maximal 1,8 GB erreichte. Erlaubte mir immer noch das Löschen und Hinzufügen weiterer Dateien im Snapshot. Daher entschied ich mich, es mit dynamischen Laufwerken für meine VMs zu belassen, die nach meiner erwähnten Festplattengröße schließlich nicht mehr wachsen werden. Ajayvignesh vor 6 Jahren 0

3 Antworten auf die Frage

1
Amorris

Beim Erstellen einer neuen virtuellen Maschine werden Sie aufgefordert, eine virtuelle Festplatte zu erstellen. Sie haben zwei Optionen für die Festplatte, fest oder dynamisch zugewiesen. Dies sind die Beschreibungen (aus der virtuellen Box) beider Festplattentypen.

Behoben: Das Erstellen einer Festplatte mit fester Festplatte kann auf manchen Systemen länger dauern, ist jedoch in der Regel schneller

Dynamisch zugewiesen: Eine dynamisch zugewiesene Festplattendatei verwendet nur Speicherplatz auf Ihrer physischen Festplatte (bis zu einer festen Größe), wird jedoch nicht automatisch verkleinert, wenn Speicherplatz auf der Festplatte frei wird

Es ist möglich, dass Sie die Zuweisung dynamisch festlegen, sodass der Datenträger nicht automatisch verkleinert wird, wenn Speicherplatz frei wird.

Danke für diese Info. Ich habe eine neue VM in einer festen VDI-Datei erstellt. Durch das Erstellen von Snapshots und das Arbeiten mit den Snapshots wird jedoch die Snapshotgröße immer weiter vergrößert (was schließlich dazu führt, dass die VM-Größe über meine Festplattengröße hinaus wächst). Ajayvignesh vor 6 Jahren 0
1
Kanchu

Hier ist ein Batch-Skript, das ich zum Komprimieren aller VDI-Dateien verwende:

@echo off for /d %%d in (*.*) do ( cd "%%d" for %%f in (*.vdi) do ( echo Compacting %%f . . . echo Initial size: %%~zf "C:\Program Files\VirtualBox\VBoxManage.exe" modifymedium --compact disk "%%f" echo Post compact size: %%~zf echo. ) cd .. ) 

Speichern Sie es einfach in dem Ordner, der die virtuellen Maschinen enthält, und führen Sie ...

O wow, das ist ordentlich! Ich wusste nicht, dass diese Funktionalität existiert DeathByTensors vor 6 Jahren 0
Sollte ich SDelete vor dem Ausführen dieser Batchdatei ausführen? Nach dem Ausführen dieses Stapels gibt es keinen Unterschied zwischen Anfangsgröße und Nachkompaktgröße. Ajayvignesh vor 6 Jahren 0
@Ajayvignesh Sie müssen sdelete oder andere Tools wie nullfree ausführen, um die freien Blöcke auf Null zu setzen, da Virtualbox / VMware in ** Raw-Blöcken ** arbeitet und keine Ahnung vom zugrunde liegenden Dateisystem hat. Wenn er also einen Block ungleich Null sieht, glaubt er, dass der Block Daten enthält und ihn nicht aus der Datei entfernen kann phuclv vor 6 Jahren 0
0
LMiller7

Das Löschen von Dateien von einem virtuellen Laufwerk reduziert aus Gründen der Leistung nicht die Größe.

Wenn eine Datei gelöscht wird, hinterlässt sie ein Loch, in dem sich die Dateidaten zuvor befunden haben. Wenn neue Dateien erstellt oder Daten auf die Festplatte geschrieben werden, werden diese Löcher gefüllt. Die Datei wird bei Bedarf vergrößert, um mehr Daten aufzunehmen, wird jedoch niemals verkleinert.

Warum?

Das Entfernen von Daten aus einer Datei an einem anderen Ort als dem Ende ist ein zeitaufwändiger Vorgang. Daten müssen verschoben werden, um die Lücken zu füllen. Im Falle eines virtuellen Laufwerks müssen viele interne Verweise auf Datenpositionen aktualisiert werden. Selbst bei einer SSD kann das Löschen selbst einer kleinen Datei Minuten dauern. Dies ist eindeutig nicht akzeptabel.

Sie müssen vboxmanage --compact verwenden, um die Löcher zu entfernen und das virtuelle Laufwerk zu verkleinern.