So verringern Sie die virtuelle Größe / Kapazität einer Virtualbox vdi-Datei

8

Ich möchte eine physische Maschine unter MS Windows 7 in eine virtuelle VirtualBox-Maschine verwandeln. Dies ist einfach, ich habe dies bereits getan, aber dieses Mal musste die virtuelle Größe / Kapazität der Festplatte eine feste und kleinere Größe haben.

Es muss behoben werden, da ich aus Compliance-Gründen die PGP-Festplattenverschlüsselung darauf installieren werde. Dadurch wird eine dynamische Festplatte auf ihre maximale Größe erweitert.

Abgesehen von diesem Sonderfall gibt es noch andere Gründe dafür, dass Festplatten kleiner und fester werden sollen. Ist meine Erfahrung. Wenn Sie beispielsweise einen Jenkins-Buildserver auf einer sich dynamisch erweiternden Festplatte ausführen, wird die Festplatte möglicherweise schnell auf ihre maximale Größe erweitert, während die Speicherplatznutzung im Gastbetriebssystem stabil ist und viel freier Speicherplatz vorhanden ist.

Mit Disk2vhd habe ich eine vhdx-Datei erstellt. Diese Datei habe ich in das vdi-Format konvertiert.

vboxmanage clonehd --format VDI MSWIN7.VHDX MSWIN7.vdi

Angeblich könnten Sie mit vdi die virtuelle Größe / Kapazität mit ähnlichen Befehlen verringern

vboxmanage modifyhd MSWIN7.vdi --resize 160000

Ich habe festgestellt, dass dies nicht funktioniert. Selbst wenn Sie Varianten ausprobieren, erhalten Sie regelmäßig Fehlermeldungen wie:

Fortschrittsstatus: VBOX_E_NOT_SUPPORTED VBoxManage: Fehler: Die Größe des Festplattenbetriebs für dieses Format ist noch nicht implementiert!

Unten ist das Festplattenlayout meiner vdi-Festplatte. Ich habe dies einer Ubuntu-VM hinzugefügt, um es mit Gparted und CloneZilla zu betrachten. Die Kapazität beträgt ca. 300 GB. Nicht zugewiesene 145 GB. Verwendet wird ca. 153GB.

Ich möchte die Kapazität auf ca. 160 GB reduzieren. Dies sollte ausreichen, um zu passen /dev/sdb1und /dev/sdb2.

Übrigens habe ich CloneZilla ausprobiert, aber es scheint auch nicht zu mögen, die Kapazität auf eine kleinere Festplatte zu verkleinern. Ich habe verschiedene Einstellungen in CloneZilla ausprobiert, aber keinen Erfolg.

Wie kann ich die virtuelle Größe / Kapazität verringern?

Geben Sie hier die Bildbeschreibung ein

weiß es
quelle

Antworten:

15
  1. Ausplanen Raum am Ende der Platte in Gastbetriebssystem , in den Raum> = Größe (Quelle-Disk) - Größe (neu-Disk). In der Regel durch Verkleinern der letzten Partition .
  2. Schalten Sie die virtuelle Maschine aus.
  3. Erstellen Sie eine neue Virtual Box-Festplatte mit der gewünschten Größe.
  4. Verschieben Sie Inhalte von der alten Festplatte auf die neue Festplatte:

    vboxmanage clonehd "source-disk.vmdk" "new-disk.vmdk" --existing
    
  5. Schalten Sie die virtuelle Maschine ein.

  6. Je nach dem in Schritt 1 freigegebenen Speicherplatz müssen Sie möglicherweise die Größe der Partition im Gastbetriebssystem ändern , um den Rest der Festplatte zu füllen.
Andre Figueiredo
quelle
2
Dies ist der wirklich richtige Weg, um eine dynamische vdi, die eine sehr große Partition verwendet, in eine neue vdi zu konvertieren (möglicherweise aus Leistungsgründen ein Format mit fester Größe). Ich weiß nicht, warum niemand diese Antwort und bevorzuge den dd Weg ...
zw963
Was meinst du mit "Speicherplatz am Ende der Festplatte freigeben"? Beziehen Sie sich die vdi - Datei auf dem Host, als dieser Frage zu schrumpfen: superuser.com/questions/529149/...
mikezter
im Gastbetriebssystem habe ich den Beitrag geklärt
Andre Figueiredo
Perfekt! Vielen Dank!
Yamakuzure
Mit vboxmanage clonehd "source-disk.vdi" "new-disk.vdi" --existingwird die Partitionstabelle im Zielabbild zerstört.
Mogens TrasherDK
3

Am Ende gelang es mir, dieses Rätsel auf unerwartet einfache Weise mit dem vorinstallierten Befehlszeilenprogramm zu lösen ( ddsiehe Klonen von Datenträgern) . Wie unten gezeigt, habe ich jetzt mein 160-GB-Laufwerk in meinem Gastbetriebssystem in einer festen 160-GB-VirtualBox-vdi-Datei gespeichert.

Geben Sie hier die Bildbeschreibung ein

Ich habe es mit folgenden Schritten gelöst:

  1. Ändern der Größe der Platte mit der Datenträgerverwaltung in MS Windows auf eine Größe gleich oder besser ein wenig kleiner als die Größe des VDI.
  2. Fügen Sie MSWIN7.vdieiner Ubuntu-VM als zweite Festplatte Quell-vdi mit MS Windows 7 hinzu.
  3. Erstellen Sie einen neuen festen vdi mit 160 GB und fügen Sie diesen auch der Ubuntu-VM hinzu. Jetzt gibt es drei Festplatten: /dev/sda1mit der laufenden Ubuntu-VM, /dev/sdb2mit der Quelle MSWIN7.vdiund /dev/sdc1mit der neuen vdi.
  4. Erstellen Sie die richtige Partitionierung auf /dev/sdc. CloneZilla hat das für mich getan. Es wurden keine Daten kopiert, aber die gewünschte Partitionierung erstellt. Natürlich können Sie dies manuell tun.
  5. Kopieren sdbnach sdcmit ddBefehl ähnlich wie sudo dd if=/dev/sdb of=/dev/sdc. Der Befehl endet mit einer erwarteten Fehlermeldung, dass kein Leerzeichen mehr vorhanden ist. Dies habe ich ignoriert, da dies nur nicht zugewiesener Speicherplatz ist, den nicht kopiert werden konnte.

Ich denke, es ist möglich, den Befehl für jede Partition auszuführen. Vielleicht ist es besser und zeigt keine Fehlermeldung an. sudo dd if=/dev/sdb1 of=/dev/sdc1und sudo dd if=/dev/sdb2 of=/dev/sdc2.

vagrant@devops:~$ sudo dd if=/dev/sdb of=/dev/sdc
dd: writing to ‘/dev/sdc’: No space left on device
335544321+0 records in
335544320+0 records out
171798691840 bytes (172 GB) copied, 6360.3 s, 27.0 MB/s
weiß es
quelle
2

In meinem Fall hatte ich eine Windows-VM mit 50 GB vdi, um auf 20 GB zu verkleinern.

Ich habe versucht, Andre Figueiredo Lösung, aber ich hatte ein Problem mit dem geklonten vdi.

Wenn ich die Andre Figueiredo- Lösung anwende vdiund sie beim Booten an die VM anhänge , stoppt Virtualbox mit einem E / A-Fehler.

Möglicherweise hängt dies mit meinem btrfsDateisystem zusammen (ich habe gehört, btrfsdass es Probleme mit Vritualbox gibt vdi).

Meine Lösung:

Ich habe eine andere Lösung ausprobiert, um die VM-Festplatte ( vdi) mit dem Namen OVdi zu verkleinern ( OVdi hat eine Festplattengröße von 50 GB, eine einzelne ntfs-Partition mit 40 GB freiem Speicherplatz).

Folgen wir diesen Schritten (dies ist mein Fall, Sie können verschiedene vdi- Namen anpassen / erfinden ):

  • Stoppen Sie die VM (Ausschalten)

  • Erstellen Sie eine neue Festplatte ( vdi) mit dem Namen DVdi der gewünschten Größe (20 GB in meinem Fall ..)

  • befestigen DVdi an die VM

  • Starten Sie die VM und installieren Sie das Dienstprogramm EaseUS Backup Free

  • Führen Sie EasyUS und verwenden Sie die EasyUS Clone - Funktion (es klont OVdi MBR, und die NTFS - Partition von OVdi durch neue Platte schrumpf DVdi )

  • Schalten Sie die VM aus

  • Detach OVdi von VM

  • Überprüfen Sie, ob DVdi das erste Startgerät für die VM ist

  • Starten Sie die VM neu

  • Habe Spaß

Vergessen Sie nicht, das OVdi- Volume zu löschen .

Nach diesen Schritten habe ich die Größe der VM-Festplatte erfolgreich von 50 GB auf 20 GB reduziert

Fabiano Tarlao
quelle
1

Ich halte diese Lösung für äußerst gefährlich! Es setzt voraus, dass sich alle Dateien in den ersten 153 GB der ursprünglichen 300-GB-Partition befinden. Der Befehl dd kopiert keine Dateien. Es werden einfach ALLE Blöcke nacheinander kopiert. Wenn Sie also das Pech hatten, wichtige Dateien nach dem 160-GB-Cutoff zu haben, kann dd sie nicht kopieren.

Die typische Lösung, die ich in vielen, vielen Beiträgen gesehen habe, besteht darin, die Windows-VM einzuschalten und eine Kombination aus Defragmentierungs- und Verwaltungstools zu verwenden, um alle Dateien auf der Vorderseite der Festplatte zu konsolidieren. Die Schwierigkeit besteht darin, dass sich viele Defragmentierungswerkzeuge nicht unbeweglich bewegen Windows-Systemdateien (ich musste die Systemwiederherstellung deaktivieren, um einen nicht verschiebbaren 7-GB-Festplattenblock zu löschen), die sich irgendwo in der Mitte des Speicherplatzes befinden, den Sie konsolidieren möchten.

Sobald Sie Dateien auf der Vorderseite der Festplatte konsolidiert haben (MyDefrag ist ein Freeware-Tool, mit dem angezeigt wird, wo sich Ihre Dateien auf der Festplatte befinden), müssen Sie die Größe Ihrer Windows-Partition reduzieren. Ich habe das Diskpart-Tool mit der Option zum Verkleinern verwendet.

Zu diesem Zeitpunkt können Sie mit dd die jetzt kleinere Partition auf eine neue vdi kopieren.

Ich habe auch vboxmanage modifymedium win10.vdi --compact auf meinem Linux-Host verwendet, musste aber zuerst sdelete.exe im Windows-System ausführen, um den gesamten nicht verwendeten Speicherplatz auf Null zu setzen (sdelete -zc :). Wenn Sie vboxmanage verwenden, um die vorhandene vdi-Datei zu komprimieren, können Sie alles direkt erledigen (aber immer ein Backup haben).

Paul Hursky
quelle
Was ich vergessen habe zu erwähnen ist, dass ich die Partition in MS Windows zuerst auf die richtige Größe angepasst habe. Dies garantiert, dass sich die Dateien im 153-GB-Teil befinden. MS WIndows verschiebt die Dateien / Daten. Beachten Sie übrigens, dass die Größe von MS Windows manchmal nicht geändert wird, da Dateien nicht verschoben werden können.
Onknows