Come ridurre la dimensione / capacità virtuale di un file vdi Virtualbox


8

Voglio trasformare una macchina fisica che esegue MS Windows 7 in una macchina virtuale VirtualBox. Questo è facile, l'ho già fatto prima, ma questa volta avevo bisogno che la dimensione / capacità virtuale del disco fosse fissa e più piccola.

Deve essere corretto perché installerò la crittografia del disco PGP su di esso per motivi di conformità. Questo espanderà un disco dinamico alla sua dimensione massima.

A parte questo caso speciale, ci sono altri motivi per volere che i dischi siano più piccoli e fissi. È la mia esperienza Se, ad esempio, esegui un server di build Jenkins su un disco a espansione dinamica, potresti vedere il disco espandersi rapidamente alla sua dimensione massima mentre nello spazio su disco del SO guest l'utilizzo è stabile e c'è molto spazio libero.

Usando Disk2vhd ho creato un file vhdx. Questo file l'ho convertito in formato vdi.

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

Presumibilmente con vdi è possibile ridurre la dimensione / capacità virtuale con comandi simili a

vboxmanage modifyhd MSWIN7.vdi --resize 160000

Ho scoperto che questo non funziona. Anche se provi le varianti otterrai costantemente messaggi di errore come:

Stato avanzamento: VBOX_E_NOT_SUPPORTED VBoxManage: errore: l'operazione di ridimensionamento del disco rigido per questo formato non è ancora implementata!

Di seguito è riportato il layout del disco del mio disco VDI. Ho aggiunto questo a una macchina virtuale Ubuntu per guardarlo usando Gparted e CloneZilla. La capacità è di circa 300 GB. 145 GB non allocati. Usato è di circa 153 GB.

Voglio ridurre la capacità a circa 160 GB. Questo dovrebbe essere sufficiente per adattarsi /dev/sdb1e /dev/sdb2.

A proposito, ho provato CloneZilla ma non mi sembra nemmeno di ridurre la capacità su un disco più piccolo. Ho provato varie impostazioni in CloneZilla ma senza successo.

Come posso ridurre la dimensione / capacità virtuale?

inserisci qui la descrizione dell'immagine

Risposte:


15
  1. Deallocate lo spazio alla fine del disco nel SO guest , dove space> = size (source-disk) - size (new-disk). In genere riducendo l'ultima partizione .
  2. Disattiva la macchina virtuale.
  3. Crea un nuovo disco Virtual Box con le dimensioni desiderate.
  4. Sposta il contenuto dal vecchio disco al nuovo disco:

    vboxmanage clonehd "source-disk.vmdk" "new-disk.vmdk" --existing
    
  5. Attiva la macchina virtuale.

  6. Potrebbe essere necessario ridimensionare la partizione nel SO guest per riempire il resto del disco a seconda dello spazio assegnato al passaggio 1.

2
Questo è il modo veramente corretto per convertire un vdi dinamico che crea utilizzare una partizione molto grande in un nuovo vdi (forse un formato di dimensioni fisse per motivi di prestazioni). Non so perché nessuno risponda a questa risposta e preferisca il modo dd ...
zw963,

Cosa intendi con "deallocare lo spazio alla fine del disco"? Ti riferisci alla riduzione del file vdi sull'host, a partire da questa domanda: superuser.com/questions/529149/…
mikezter

nel SO guest, ho chiarito il post
Andre Figueiredo,

Perfetto! Grazie mille!
Yamakuzure,

1
L'utilizzo vboxmanage clonehd "source-disk.vdi" "new-disk.vdi" --existingdistrugge la tabella delle partizioni sull'immagine di destinazione.
Mogens TrasherDK

3

Alla fine sono riuscito a risolvere questo enigma in un modo semplice e inaspettato usando l'utility della riga di comando preinstallata, ddvedi Clonazione disco . Come mostrato di seguito ora ho il mio disco da 160 GB nel mio SO guest memorizzato in un file vdi VirtualBox fisso da 160 GB.

inserisci qui la descrizione dell'immagine

L'ho risolto seguendo i seguenti passi:

  1. Ridimensiona il disco usando Gestione disco in MS Windows a una dimensione uguale o migliore un po 'più piccola della dimensione del VDI.
  2. Aggiungi sorgente vdi MSWIN7.vdicon MS Windows 7 a una macchina virtuale Ubuntu come secondo disco.
  3. Crea un nuovo VDI fisso da 160 GB e aggiungilo anche alla VM di Ubuntu. Ora ci sono tre dischi: /dev/sda1con Ubuntu VM in esecuzione, /dev/sdb2con il sorgente MSWIN7.vdie /dev/sdc1con il nuovo vdi.
  4. Crea il partizionamento corretto su /dev/sdc. CloneZilla ha fatto questo per me. Non ha copiato i dati ma ha creato il partizionamento desiderato. Ovviamente puoi farlo manualmente.
  5. Copia sdbin sdccon un ddcomando simile a sudo dd if=/dev/sdb of=/dev/sdc. Il comando termina con un messaggio di errore rimasto senza spazio, previsto. Questo l'ho ignorato perché questo è solo uno spazio non allocato che non è riuscito a copiare.

Penso che sia possibile eseguire il comando per ogni partizione. Forse è meglio e non mostrerà un messaggio di errore. sudo dd if=/dev/sdb1 of=/dev/sdc1e 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

2

Credo che questa soluzione sia estremamente pericolosa! Si basa sul fatto che tutti i file si trovano nei primi 153 GB della partizione originale da 300 GB. Il comando dd non copia i file. Copia semplicemente TUTTI i blocchi in sequenza. Quindi, se sei stato abbastanza sfortunato da avere file importanti DOPO il cutoff da 160 GB, dd non saprà copiarli.

La soluzione tipica che ho visto in molti, molti post è quella di accendere la VM di Windows e utilizzare una combinazione di strumenti di deframmentazione e strumenti di amministrazione per consolidare tutti i file nella parte anteriore del disco - la difficoltà è che molti strumenti di deframmentazione non si muovono inamovibili File di sistema di Windows (ho dovuto disattivare Ripristino configurazione di sistema per eliminare un pezzo di disco immobile da 7 GB), che si trovano da qualche parte nel mezzo dello spazio che si sta tentando di consolidare.

Una volta che hai i file consolidati nella parte anteriore del disco (MyDefrag è uno strumento freeware che fornisce una visualizzazione di dove sono i file sul disco), è necessario ridurre le dimensioni della partizione di Windows. Ho usato lo strumento diskpart con l'opzione di restringimento.

A questo punto, puoi usare dd per copiare la partizione ora più piccola in un nuovo vdi.

Ho anche usato vboxmanage modifymedium win10.vdi --compact sul mio host Linux, ma prima ho dovuto eseguire sdelete.exe all'interno del sistema Windows per azzerare prima tutto lo spazio inutilizzato (sdelete -zc :). L'utilizzo di vboxmanage per compattare il file vdi esistente consente di eseguire tutte le operazioni sul posto (ma di disporre sempre di un backup).


Quello che ho dimenticato di menzionare è che ho ridimensionato prima la partizione in MS Windows alla giusta dimensione. Ciò garantisce che i file siano nella parte da 153 GB. MS Windows sposta i file / dati. Si noti che a volte MS Windows non verrà ridimensionato perché i file non possono essere spostati.
onknows

2

Nel mio caso avevo una VM Windows con 50 GB di VDI per ridursi a 20 GB.

Ho provato la soluzione Andre Figueiredo ma ho avuto un problema con la clonazione vdi.

Quando applico la soluzione Andre Figueiredo e allego il compattato vdialla VM, durante l'avvio, Virtualbox si interrompe con errore I / O.

Forse questo è legato al mio btrfsfilesystem (ho sentito che btrfscausa problemi con Vritualbox vdi).

La mia soluzione:

Ho provato una soluzione diversa per ridurre il disco VM ( vdi), chiamato OVdi , ( OVdi ha dimensioni del disco di 50 GB, partizione ntfs singola con 40 GB di spazio libero).

Seguiamo questi passaggi (questo è il mio caso, è possibile adattare / inventare diversi nomi VDI ):

  • arrestare la VM (spegnimento)

  • crea un nuovo disco ( vdi) con il nome DVdi della dimensione desiderata (20 GB il mio caso ..)

  • collegare DVdi alla VM

  • avviare la macchina virtuale e installare l'utilità EaseUS Backup Free

  • Esegui EasyUS e utilizza la funzione Clone EasyUS (clona OVdi MBR e la partizione ntfs di OVdi riducendo il nuovo disco DVdi )

  • Spegnere la VM

  • Staccare OVdi dalla VM

  • Controlla se DVdi è il primo dispositivo di avvio per la VM

  • riavviare la VM

  • Divertiti

Non dimenticare di eliminare il volume OVdi .

Seguendo questi passaggi ho ridotto con successo la dimensione del disco VM da 50 GB a 20 GB


0

Come altri hanno già detto, la risposta di Andre Figueiredo è basata sulla fortuna in quanto non vi è alcuna garanzia che la "prima X GB" di spazio sia il tuo spazio, a meno che non si esegua la deframmentazione, nel qual caso è ancora rischioso.

La risposta di Paul Hursky è molto più sicura. Elencherò alcuni passaggi extra che ho fatto (nota che questo è per Windows, il mio era XP ma dovrebbe funzionare anche per altri):

1) Ottieni l'edizione gratuita di "MiniTool Partition Wizard Free 12" in questo link

2) Installalo nel SO guest e ridimensiona il tuo disco, lascia un po 'di respiro solo per sicurezza (non tirarlo indietro fino in fondo ..). Dal momento che molto probabilmente stai ridimensionando il disco rigido del sistema operativo corrente, ti darà la possibilità di riavviare ed eseguire l'azione, fare questo.

3) Ora utilizzando lo stesso programma di partizione MiniTool, selezionare lo spazio ora non allocato (sotto *:) -> Clic destro -> Cancella partizione -> Riempi settori con zero (Veloce).

4) Ora arrestare in modo sicuro il SO guest. Vai alla cartella VirtualBox in cui esiste VBoxManage.exe, apri cmd in questo percorso ed esegui questo:

vboxmanage modifymedium C:\PATH_TO_YOUR_VDI\CHANGE_ME.vdi --compact

5) E ora dovrebbe funzionare tutto magicamente. Alla successiva apertura del sistema operativo guest, verrà eseguito il check check, LET IT RUN, troverà "file orfani" che assomigliano a file di sistema.

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.