VMware Workstation: So reduzieren Sie die maximale Größe von .vmdk

27

Ich habe eine 150-GB-Festplattendatei (.vmdk, nicht vorab zugewiesen), auf der meine virtuelle Maschine gespeichert ist.

Die Datei hat derzeit eine Größe von 20 GB, wächst jedoch täglich, obwohl ich im Gastdateisystem nichts Neues speichere.

Ich habe stundenlang nach einer Möglichkeit gesucht , die maximale Größe dieses Datenträgers zu reduzieren , damit er niemals 150 GB erreicht. (Ich möchte das Limit auf 30 GB setzen und sehen, was passiert, wenn die VM diese Größe erreicht.) .

Was ich ausprobiert habe:

  • Konvertieren des Disk-Images mit VMware Converter → dies funktioniert nicht, das Tool ermöglicht nur das Erstellen einer vollständigen Kopie oder eines verknüpften Klons.
  • Erstellen einer neuen leeren virtuellen Maschine mit der gewünschten Größe, um die 20-GB-Daten auf die neue VM zu kopieren das Gastbetriebssystem).
  • Überprüfen Sie in der .vmx-Datei, ob die maximale Größe nicht im Nur-Text-Format festgelegt wurde (dies ist nicht der Fall).

Obwohl diese Aufgabe technisch recht einfach zu sein scheint (es ist kein kompliziertes Verkleinern erforderlich, nur eine einfache Änderung der Größenbeschränkung), habe ich hier wirklich keine Ideen ...

Gibt es überhaupt eine Lösung?

Sébastien
quelle
1
Da die Partitionen auf der virtuellen Festplatte höchstwahrscheinlich so erstellt werden, dass sie den angekündigten Speicherplatz ausfüllen, ist das „trickreiche Verkleinern“ tatsächlich erforderlich.
Daniel B

Antworten:

25

Das übliche Verfahren zum Verringern der Größe einer .vmdk-Festplatte lautet:

  1. Defragmentieren Sie die Festplatte über den Gast, indem Sie einen Defragmentierungsmodus auswählen, der den leeren Speicherplatz am Ende der Festplatte konsolidiert. Bei einem Windows-Gast sollten Sie den Papierkorb leeren, den Ruhezustand und das Paging deaktivieren und nach Abschluss der Defragmentierung zurückgeben.

  2. Setzen Sie den gesamten nicht verwendeten Speicherplatz auf der Festplatte auf Null.
    Für Windows - Anwendung sdelete : sdelete -c.
    Für Linux:dd if=/dev/zero of=/mytempfile && rm -f /mytempfile .

  3. Verkleinern Sie den Datenträger (die Fertigstellung kann einige Zeit in Anspruch nehmen).
    VMware Workstation: Menü VM / Verwalten / Bereinigen von Festplatten.
    Oder benutzen vmware-vdiskmanager.exe -k [VMDK PATH].
    für ESX: vmkfstools --punchzero [VMDK PATH].

Das Konvertieren der Festplatte von "anbaubar" in "vorab zugewiesen" könnte das Wachstum stoppen. Dies kann mit dem -tParameter vmware-vdiskmanager durchgeführt werden, dessen Werte wie folgt lauten:

0 : single growable virtual disk
1 : growable virtual disk split in 2Gb files
2 : single preallocated virtual disk
3 : preallocated virtual disk split in 2Gb files

Der folgende Befehl konvertiert die .vmdk-Datei von "anbaubar" in "vorab zugewiesen":

vmware-vdiskmanager -r current_disk_name.vmdk -t 3 new_disk_name.vmdk

Wenn Sie die Größe der Festplatte ändern möchten, sollten Sie dies tun, während sich die Festplatte noch im erweiterbaren Format befindet (Beispiele hier ).

Weitere Informationen finden Sie im Virtual Disk Manager-Benutzerhandbuch .

Harrymc
quelle
2
Dies verringert jedoch nicht die intern beworbene Laufwerksgröße.
Daniel B
@DanielB: Nein, es reduziert nicht die maximale Größe, sondern nur die physische Größe. Das Verringern der maximalen Größe kann gefährlich sein, da einige Betriebssysteme nicht ohne freien Speicherplatz auf der Systemfestplatte starten können.
Harrymc
3
Dies ist eine nützliche Technik, die ich verwendet habe, um den vom VMDK belegten Speicherplatz zu reduzieren. Dies löst jedoch mein Problem nicht vollständig. Wenn ich das VMDK immer unter 30 GB halten möchte, muss ich den Vorgang regelmäßig wiederholen (was in der Tat sehr lange dauert).
Sébastien
Wenn der Datenträger immer auf die gewünschte Größe verkleinert werden kann, was bedeutet, dass die oben beschriebene Vorgehensweise immer zum Reduzieren der Größe verwendet wird, können Sie die Größe in Zukunft einschränken, indem Sie den Datenträger in eine feste Größe konvertieren.
Harrymc
1
@harrymc Das Konvertieren der Festplatte in eine feste Größe würde meinen Anforderungen entsprechen. Ich habe gerade keine Möglichkeit gefunden, dies mit VMWare Workstation oder Converter zu tun.
Sébastien
6

Die Datei hat derzeit 20 GB, wächst aber täglich, obwohl ich im Gastdateisystem nichts Neues speichere.

Da das Betriebssystem und seine Anwendungsprogramme vorübergehend viel Speicherplatz für temporäre Dateien, Auslagerungsdateien, Ruhezustandsdateien und Konfigurationsdateien verwenden. Sobald sie abhängig von der Richtlinie des Betriebssystems gelöscht werden, werden beim nächsten Mal neue Sektoren auf der Festplatte verwendet. Die VM weist der virtuellen Festplatte Speicherplatz von der realen Festplatte zu, wenn ein neuer Sektor auf der virtuellen Festplatte verwendet wird. Da der Sektor auf der virtuellen Festplatte vom Gastbetriebssystem immer nicht wiederverwendet wird, ist die VM der Ansicht, dass sie eine Festplattennutzung aufweist und Speicherplatz auf der realen Festplatte zur Verfügung stellt. Dies führt zu einem wachsenden Image der virtuellen Festplatte.

Es ist weniger wahrscheinlich, dass Ihr Fragentitel gelöst wird, da die Verwendung eines solchen Tools ohne Überprüfung des Bilds zu einer totalen Katastrophe führen kann. Sie können jedoch verhindern, dass das Image größer als 30 GB wird. Es gibt viele Wege, um das Ziel zu erreichen.

A. Verwenden Sie nur partitionierte 30 GB und belassen Sie den verbleibenden freien Speicherplatz. Wenn Sie bereits mehr Speicherplatz partitioniert haben, müssen Sie ihn verkleinern / löschen, eine neue Partition erstellen und dann mit Nullen sichern und wie von @harrymc beschrieben lochen. Da der Speicherplatz in einem nicht partitionierten Bereich niemals verwendet wird, wird die virtuelle Festplatte niemals größer als 30 GB.

B. Erstellen Sie einen Snapshot und stellen Sie ihn nach der Verwendung wieder her. Nach dem Erstellen von Snapshot-VMs werden die Daten in einer neuen Image-Datei gespeichert. Wenn Sie darauf zurückschreiben, ohne neue Schnappschüsse zu speichern oder zu erstellen, werden alle geänderten Daten gelöscht und somit Speicherplatz freigegeben.

C. Erstellen Sie ein neues virtuelles Laufwerk mit maximal 30 GB, fügen Sie es als neues Laufwerk zu Ihrer aktuellen virtuellen Maschine hinzu, und verschieben Sie alle Daten mithilfe eines Sicherungstools auf das neue virtuelle Laufwerk. Sie können ein Live-Linux für das Klonen verwenden.

Empfohlene Option ist A

Totti
quelle
2

Stellen Sie die Größe der betroffenen Festplatte einfach von 150 GB auf 30 GB ein.

Sie müssen die Summe aller Partitionen auf weniger als 30 GB festlegen. Sie müssen die Größe der Partitionen nach und nach verkleinern. Es gibt eine Menge Dokumentation auf dieser Seite darüber, wie man Partitionen verkleinert, so dass ich dies hier nicht noch einmal wiederholen werde.

Warum haben Sie eine 150 GB (dünne Partition) erstellt, wenn Sie nicht über ausreichend Speicherplatz für die Unterstützung bei maximaler Größe verfügten? Scheint so, als würde man nur um Ärger bitten.

mdpc
quelle
5
Ich habe die VM nicht persönlich erstellt, aus diesem Grund.
Sébastien
Wie verkleinere ich die Festplatte selbst? Ich habe die Partitionen auf der Festplatte verkleinert, aber vdiskmanager.exe -k [VMDK PATH]wie in einer anderen Antwort vorgeschlagen, verkleinert das Laufwerk nicht.
Aaron Franke
Das Problem, das nicht eindeutig dokumentiert ist, ist die Größenänderung eines VMDK-Geräts (nach der Größenänderung der Partition natürlich). Auch @mdpc Ich denke, Ihre Antwort ist nicht konstruktiv. Es gibt viele Fälle, in denen Sie die Größe von Daten auf einer vorhandenen VM ändern müssen, sodass Sie nicht mit dem Finger darauf zeigen müssen, dass die VM korrekt erstellt werden soll.
Basos
2

Es gibt eine Möglichkeit, mit VMWare Converter eine neue VM mit kleinerer VMDK-Größe zu erstellen und anschließend die ursprüngliche VMDK in die neu erstellte, kleinere VMDK zu konvertieren.

VMDK verkleinern

Detaillierte Schritte hier .

Beachten Sie, dass Änderungen an der VMDK-Größe auch eine entsprechende Aktualisierung der Partitionstabelle erfordern .

Hanxue
quelle
Dies ist eine VMWare Workstation-VM. Diese erweiterten Kopieroptionen werden von Converter für diesen VM-Typ nicht angeboten. Ich kann die Größe der Festplatte einfach nicht ändern.
Sébastien
2

Dies funktioniert nur bei spärlichem VMDK ( nicht vorab zugewiesen). Vor dem Verkleinern ist eine Defragmentierung erforderlich, um sicherzustellen, dass der verwendete Speicherplatz zusammenhängend ist

Defragmentierung in Windows

In einer virtuellen Windows-Maschine müssen Sie zuerst eine Defragmentierung in Windows ausführen. Durch die Defragmentierung in Windows wird sichergestellt, dass alle verwendeten Leerzeichen zusammenhängend sind. Sie können dann die Größe der virtuellen Festplatte reduzieren.

Verkleinern der virtuellen Festplatte

So verkleinern Sie die virtuelle Festplatte:

Öffnen Sie die Systemsteuerung / Toolbox von VMware Tools:

In Windows:

Doppelklicken Sie auf das VMware Tools-Symbol in der Taskleiste oder klicken Sie auf Start> Systemsteuerung> VMware Tools.

In Linux:

Öffnen Sie das Terminal und führen Sie den folgenden Befehl aus:

VMware-Toolbox

Hinweis: In Workstation 9.x (Windows) und höher wird das Verkleinern beim Bereinigen der Festplatte automatisch durchgeführt. Daher wird diese Option aus dem VMware Tools Panel entfernt. Gehen Sie zu VM> Verwalten> Datenträger bereinigen. Dies ist in der Linux-Version von VMware Workstation 9.x und höher nicht verfügbar.

Klicken Sie auf die Registerkarte Verkleinern. Wählen Sie das Laufwerk aus, das Sie verkleinern möchten. Klicken Sie auf Zum Verkleinern vorbereiten und befolgen Sie die Anweisungen auf dem Bildschirm. Achtung: Fahren Sie weder Ihre virtuelle Maschine noch die Host-Maschine herunter, während die Festplatte verkleinert wird. Versuchen Sie auch nicht, den Vorgang abzubrechen. Wenn Sie diesen Vorgang unterbrechen, kann dies zu irreparablen Schäden an Ihrer virtuellen Festplatte führen und Sie können Ihre virtuelle Maschine möglicherweise nicht erneut starten.

Aus der VMWare Knowledge Base

Jalal Mostafa
quelle
Das erstmalige Lesen vorhandener Antworten vermeidet doppelte Antworten.
Harrymc
1
Tut mir leid, trotzdem habe ich es mit der vollständigen Prozedur und der Quelle neu gepostet. Dies kann ihm mehr helfen
Jalal Mostafa
Antwortet auch nicht auf den Befehl. OP möchte die maximale Grenze, nicht die aktuelle Größe, verkleinern.
Ryuu
2

Die Antwort von @harrym ist ziemlich gut, aber sie beantwortet die Frage eigentlich nicht. Das OP möchte die maximale Größe reduzieren . Das Problem ist, dass der Hypervisor nicht weiß, wie viel von der angezeigten Größe (auch als maximale Größe bezeichnet) tatsächlich vom Betriebssystem verwendet wird. Die Komprimierung (vmware-vdiskmakager -k) gilt für ein erweiterbares vmdk. Es macht nichts auf vorbelegte.

Die Schritte zum Verkleinern der Festplatte sind:

  1. Ändern Sie die Größe der Partition auf der Festplatte über das Betriebssystem oder über eine geeignete Live-CD
  2. Ändern Sie die Größe des vmdk-Geräts, und wählen Sie die Begrenzung sorgfältig aus, um keinen verwendbaren Partitionsspeicherplatz zu beschneiden. Sie können immer etwas mehr Platz im Bild lassen, als es tatsächlich benötigt wird.

Der erste Schritt umfasst eine Prozedur innerhalb der VM und hängt vom Gastbetriebssystem ab. Der zweite Schritt könnte von den vmware-Befehlen unterstützt werden, aber ich habe keinen tiefgreifenden Weg gefunden, dies zu tun. Also der hackige Ansatz.

Hier ist eine nicht so schnelle (aufgrund des Verschiebens großer Datenmengen) und schmutzige Lösung, die den Trick gemacht hat. Wir benötigen Speicherplatz, der der maximalen Gerätegröße entspricht .

WARNUNG: Denken Sie daran, wichtige Daten vor jeder Operation zu sichern!

  1. Finden Sie eine Möglichkeit, die Größe der Gastpartition zu ändern und am Ende des Geräts nicht zugewiesenen Speicherplatz zu belassen. Zwei Beispiele:

    Vom Gastbetriebssystem: Windows 7

    1. Sie können die Online-Größenänderungsfunktion verwenden. Es ist eine gute Idee, die Festplatte zuerst aus dem Quest-Betriebssystem heraus zu defragmentieren.
    2. Führen Sie diskmgmt.msc aus, wählen Sie die Partition (das Volume) auf der Festplatte aus, deren Größe Sie ändern möchten, und klicken Sie mit der rechten Maustaste auf-> Volume verkleinern. Reduzieren Sie im angezeigten Dialogfeld die Größe gemäß Ihren Anforderungen. Beachten Sie, dass Sie möglicherweise nicht in der Lage sind, den größten Teil Ihres freien Speicherplatzes wiederherzustellen, da die Partition verwendet wird (wenn es sich um die Systemfestplatte handelt oder wenn sie stark fragmentiert ist). Bereitstellung von zusätzlichem freiem Speicherplatz.
    3. Jetzt wollen wir wissen, welche Partitionen den Plattensektor (oder das Byte) beenden. Angenommen, dies ist die einzige Partition auf dem Gerät. Wir nehmen die Größe des Volumes an, die auf meinem Computer angezeigt wird. Wählen Sie Festplatte aus. Klicken Sie mit der rechten Maustaste. Eigenschaften. (zB in meinem Beispiel 107371032576 für 99,9GB). Fügen Sie zur Sicherheit einige hundert Megabyte hinzu (+204800) (z. B. 107371237376). Um sicherzustellen, dass keine fehlenden Elemente hinzugefügt werden müssen, können Sie das Dienstprogramm diskpart cmd line verwenden, um den Versatz der Partition vom Start des Geräts an zu ermitteln. Führen Sie dann diskpart aus: list disk, select disk id , list part, select part id , detail. Beispiel:

    DISKPART> Detailteil

    Partition 1

    Offset in Bytes: 1048576

    Stellen Sie sicher, dass Sie der Festplattengröße mindestens diese Zahl hinzufügen. Jetzt müssen wir die Bytes in Sektoren umwandeln, die durch 512 dividiert und aufgerundet werden (Obergrenze). ZB 209709448. Notieren Sie diese Nummer für Schritt 3.

    Über eine Live-CD: SystemResqueCD

    1. Alternativ können Sie eine Resque-CD verwenden ( SystemResqueCD ist mein Vorschlag), eine bootfähige ISO- Datei herunterladen, sie als virtuelles CD-ROM-Gerät auf Ihrer VM einbinden und von CD booten (indem Sie im VMWare-Startbildschirm die Esc-Taste drücken, müssen Sie es möglicherweise versuchen manchmal wie es sehr kurz erscheint). Wenn Sie die Eingabeaufforderung startx erreichen, gelangen Sie hoffentlich zur grafischen Oberfläche.
    2. Sobald Sie auf dem Desktop des Systemresque sind, starten Sie gparted (z. B. von einem Terminal aus). Suchen Sie die Partition, deren Größe geändert werden soll (diese muss sauber abgehängt werden, wenn Sie Zweifel an einem Scandisk des Gastbetriebssystems haben). Passen Sie die Größe an und planen Sie Ihren Platzbedarf sorgfältig.
    3. Wieder müssen wir den Endversatz in Sektoren (oder Bytes) der Partition finden. Öffnen Sie das Terminal und schreiben Sie das geteilte [ Gerät ], dann die Einheit s, und drucken Sie. Z.B

Anzahl Anfang Ende Größe Typ Dateisystem Flags

1 2048s 113455103s 113453056s primärer ntfs-boot

Notieren Sie den Endsektor und fügen Sie 1 hinzu. Beispiel: 113455104. Notieren Sie diese Nummer für Schritt 3.

  1. Da der Hack auf vmdks mit einer einzelnen vorab zugewiesenen Datei (Typ 2) funktioniert (nicht auf mehreren Dateitypen ausprobiert), konvertieren wir zuerst die erweiterbare Datei in vorab zugewiesene. Wir benötigen vorübergehend eine Partition mit physischem Speicherplatz als maximale Größe des Geräts. (zB 150 GB).

    vmware-vdiskmanager.exe -r sourcevmdk -t 2 destvmdk

  2. Nun der schwierige Teil, für die vorab zugewiesene Festplatte sollten es 2 vmdks sein

    disk.vmdk disk-flat.vmdk

    Ersteres ist nur KB lang, und letzteres enthält die Daten. Öffnen Sie die erste (disk.vmdk), während die VMWare-Arbeitsstation ausgeschaltet ist , mit einem Texteditor (Notepad ++ ist mein Vorschlag). Finde die Linie

    RW 113455104 FLAT "Windows 7_x64-fl-flat.vmdk" 0

    Ja, Sie verstehen, das zweite Feld gibt die Anzahl der für das Gerät zugewiesenen Sektoren an. Als Validierung multiplizieren Sie mit 512 und ermitteln Sie die Größe in Bytes. Dividieren Sie dann durch 1073741824 (1024 ** 3), um die Größe in GB zu ermitteln. Dies sollte die Größe des vorherigen Geräts sein.

    Ersetzen Sie nun diese Nummer durch die notierte Nummer aus Schritt eins und speichern Sie die Datei. WARNUNG : Ein Fehler hier könnte dazu führen, dass die tatsächlich im Dateisystem verwendeten Daten gelöscht werden. (Aber wir haben die fs am Anfang des Geräts geändert und richtige und sichere Berechnungen durchgeführt, oder?)

  3. Bisher wurden noch keine Daten berührt. Führen Sie diesen letzten Schritt aus, um die Verlängerungen tatsächlich zu kürzen. Wir werden die Umbenennungsfunktionalität von vmware-vdiskmanager verwenden, um das VMDK mit seiner jetzt reduzierten Größe neu zu erstellen.

    vmware-vdiskmanager.exe -n destvmdk sourcevmdk

Basos
quelle
0

Führen Sie für ein VMware Linux-Gastbetriebssystem Folgendes aus:

sudo vmware-toolbox-cmd disk shrinkonly

Tom Hale
quelle