Virtualbox, unione di snapshot e disco di base


9

Ho una macchina virtuale con circa 30 istantanee nei rami. Il percorso di sviluppo corrente è di 22 istantanee più il disco di base. La quantità di file sembra avere un impatto ora su IO e sul laptop dev che sto usando (non so se si tratta di problemi di prestazioni del disco host con la dimensione totale di 140 GB su molti frammenti, o semplicemente il fatto che sia colpire settori distribuiti su molti file).

Vorrei unire l'attuale ramo di sviluppo degli snapshot con il disco di base, ma non sono sicuro che il comando seguente produca il risultato corretto. Non riesco ad avviare questo disco dopo il completamento della procedura (5-6 ore).

vboxmanage clonehd "C:\VPC-Storage\.VirtualBox\Machines\CRM\Snapshots\{245b27ac-e658-470a-b978-8e62137c33b1}.vhd" "E:\crm-20100624.vhd" --format VHD --type normal

Qualcuno potrebbe confermare se questo è l'approccio corretto o no?


Per aggiungere alcune informazioni, l'errore che sto ottenendo non è un errore di VirtualBox, ma un errore di avvio da Windows. Vuole avviare la riparazione all'avvio, ma poiché non conosco l'errore, non conosco la correzione. L'avvio di Windows comporta normalmente una lunga attesa e una schermata blu. È previsto o ho usato il metodo sbagliato durante la clonazione del disco?
Henrik,

Ho usato VBoxManage (su host Windows, guest Ubuntu) come hai suggerito nella tua domanda e ha unito correttamente le istantanee nell'immagine del disco di output singolo
Chaulky

1
Sì, questo è un approccio corretto. È meglio specificare solo l'UUID di origine anziché il nome del suo file, quindi sei sicuro che VBox sarà in grado di risolvere gli allegati.
Rustyx,

Risposte:


7

Quello che vuoi fare è dalla finestra di dialogo delle istantanee, seleziona l'istantanea principale che desideri unire tutte le istantanee in seguito a un singolo VDI.

Dalla tua descrizione sembra che questa sia la radice dell'albero.

Fare clic con il tasto destro e selezionare "Elimina istantanea".

Questo farà quello che vuoi --- unirà tutte le modifiche da tutte le istantanee secondarie in un singolo VDI.

Inoltre, la clonazione dell'immagine del disco che si trova nell'ultima istantanea, unirà anche il disco di differenziazione con il suo genitore (e il suo genitore, e così via, fino ad arrivare ad un tipo di disco rigido "normale").

Sospetto che "l'eliminazione di un'istantanea" esegua il comando clonehd.

Controlla le impostazioni della tua VM (in particolare IO APIC abilitato / disabilitato) e assicurati che corrispondano.


Immagino che questo sia attualmente l'unico modo per farlo, tuttavia è un modo manuale, che richiede molto tempo e multi-clic nella GUI per farlo.
Henrik,

3

Se si desidera mantenere solo una singola istantanea, impostarla come corrente e quindi esportare la VM e reimportarla. Gli apparecchi esportati non conservano la cronologia delle loro istantanee.

Oppure potresti usare questo script vboxmerge.py per gestire l'unione per te. Dato il numero di istantanee che hai, mi aspetto che il ciclo di esportazione / importazione sia più veloce.


2

Ecco una tecnica (testata su VirtualBox 4.3.4) che utilizza il comando 'Clone' per unire e compattare tutte le istantanee in una nuova macchina virtuale contenente un singolo file VDI:

  1. Rinominare la VM in modo da poter riutilizzare il nome corrente per la VM clonata (è possibile modificare il nome della VM dalla scheda "Base" delle impostazioni "Generali").

  2. Fare clic con il tasto destro del mouse sulla VM ed eseguire il comando "Clona ...":

    • Impostare il nome sul nome originale della VM.
    • Accetta i valori predefiniti rimanenti, ad es. Tipo di clone: ​​"Clone completo"; Istantanee: "Stato macchina corrente".
  3. Elimina la vecchia VM (fai clic con il pulsante destro del mouse sulla VM ed esegui il comando "Rimuovi ...").


0

Se il tuo host è Windows o puoi accedere ai file VHD da una finestra, c'è un trucco per unire tutte le modifiche in padre, nonno, ecc.

Sta usando lo strumento DiskPart e i due comandi:

select vdisk file="whatever your file is, with full path"

merge vdisk depth=#

Dove # è il numero di livelli gerarchici che si desidera spostare, 1 per genitore diretto, 2 per nonno, ecc.

Lo fa sul posto, molto meno tempo rispetto alla clonazione, ecc.

Ricorda, dopo aver unito tutti i VHD intermedi possono essere eliminati (non li elimina per te) e non dimenticare di collegare in VirtualBox quel genitore in cui ti sei unito.

Esempio:

Disk3.vhd è figlio di Disk2.vhd, Disk2.vhd è figlio di Disk1.vhd

Se vuoi su Disk1.vhd tutte le modifiche di Disk3.vhd basta usare depth=2e selezionare Disk3.vhd. Se vuoi su Disk1.vhd tutte le modifiche di Disk2.vhd usa semplicemente depth=1selezionare Disk3.vhd.

Ricorda inoltre che non sono necessarie brutte istantanee di VirtualBox, puoi usare DiskPart comando create vdisk per creare un disco di differenziazione da uno esistente (che può anche essere un disco di differenziazione, ecc.), Puoi anche creare un albero enorme.

Per tutto il resto: il poster utilizza VHD (non VDI), quindi è possibile utilizzare strumenti nativi come DiskPart e Disk Managment per accedere a quei dischi dal Guest (sull'Host, se Host è Windows).

Per te, il poster: Ricordati di avere sempre un backup completo prima di Unire, il clone di VirtualBox non funziona in posizione, crea un nuovo file (copia in scrittura), ma l'unione DiskPart funziona in posizione (modifica il file, non creare uno nuovo).

Spero che possa dare un altro approccio diverso dal momento che VHD / VHDX è in uso (non valido per VMDK, VDI, ecc., Solo per Windows Host).

Nota: Windows 7 e Up, XP e Vista possono montare VHD con uno strumento M $ esterno ma DiskPart non ha supporto VHD su XP & Vista ... tutto questo funziona anche con le edizioni Windows HOME (7 e Up), non è necessario un Edizione SERVER.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.