Come modificare VDI dimensione fissa con comando modifyhd in Windows?


65

Sto cercando di capire come modificare la dimensione di un file VDI. Sono nuovo di VirtualBox e ho molto da imparare. Ma penso di aver capito le basi. Ho già installato Windows 7 come mio primo ospite. L'host è anche Windows 7. Non ero sicuro di quanto spazio su disco allocare, quindi ho optato per una dimensione VDI di 40 GB e una dimensione fissa per prestazioni più elevate. Ma ho cambiato idea ora e voglio aggiungere altri 10 GB. Ho fatto clic intorno al programma e ho letto i contenuti del menu Guida, ma non mi aiuta. Spiega i controller del disco, SAS, SATA, SCSI, yada, yada, ma non quello che sto cercando.

Ho cercato nel world wide web risposte, il forum VirtualBox dice che dovresti usare Gparted se vuoi il metodo più semplice (alcuni mod hanno postato un appiccicoso). Alcuni utenti discutono dell'uso dd comando. Ma questa è tutta roba di Linux. Inoltre, ci sono un sacco di domande qui su SU che riguardano l'aumento e la diminuzione delle dimensioni dei file VDI, ma si tratta di usare Linux come host e Windows come guest.

Ho trovato questo bello blog post su come farlo con il modifyhd comando di VBoxManage. Questo ragazzo lo sta facendo anche su Linux come sistema operativo host. Ha anche voluto la stessa dimensione (50 GB) per il suo file VDI come ho fatto per il mio, che coincidenza. Quindi ho pensato di provarlo comunque, o farlo o romperlo. Cosa può andare storto? ... eh? Beh, questa è la brutta sorpresa che ho avuto.

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" --resize 51200
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage.exe: error: Resize hard disk operation for this format is not impleme
nted yet!

C:\Program Files\Oracle\VirtualBox>

a

Di 'cosa ora?! ... non è possibile ridimensionare i dischi rigidi virtuali del formato VDI? Non dici? Non supporta il tuo formato? Ora che ne dici ...

Non c'è davvero un modo semplice per modificare la dimensione di un file VDI, preferibilmente con pochi clic all'interno di VirtualBox? Qualcosa in corso?


4
Ho rimosso il rant sulla qualità di VirtualBox, che non aggiunge nulla di utile alla domanda.
sleske

1
Per riferimento futuro, modifyhd è ora conosciuto come modifymedium ma rimane compatibile con le versioni precedenti - vedi virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi
djule5

Risposte:


116

Sommario:

  • VBoxManage.exe modifyhd --resize può aumentare (ma non diminuire) la dimensione logica dell'immagine del disco (la dimensione vista dal SO guest).
  • VBoxManage.exe modifyhd inputfile.vdi --compact può diminuire il dimensione dell'immagine del disco fisico (la dimensione del file immagine sul disco vista dal sistema operativo host). Questo tuttavia non modifica la dimensione del disco logico. Si noti che questo funziona solo se lo spazio libero è stato azzerato prima nel SO guest.
  • modifyhd funziona solo con la variante di formato dinamico ("immagine allocata dinamicamente").
  • modifyhd funziona solo con i formati di immagine VDI e VHD.
  • Se si utilizzano istantanee, sarà necessario clonare l'ultima istantanea VDI dalla sottocartella "Istantanee".

Per dettagli vedi sezione 8.23. VBoxManage modifyhd nel manuale.


Il motivo per cui la riduzione della dimensione del disco logico di un VDI non è ancora stata implementata è per prevenire il danneggiamento dei dati che potrebbe verificarsi e si otterrebbero VM non avviabili come risultato di esso. Pertanto, quando il --resize viene utilizzata l'opzione, la nuova dimensione del disco deve essere maggiore della dimensione corrente. Non è consentito essere inferiore o uguale alla dimensione corrente. In altre parole, un disco da 40 GB può essere ridimensionato a 41 GB o superiore, non può essere ridimensionato a 40 GB (solo stupido) o 39 GB o meno.

Le vecchie versioni di VirtualBox creavano file VDI come formati "fissi" diversi. La nuova impostazione predefinita ora crea varianti di formato "dinamiche" quando vengono creati nuovi file VDI (immagine disco virtuale). (Sto indovinando questo è il caso dall'introduzione della variante di formato dinamico, qualunque sia la versione introdotta in.)

Quindi, quale messaggio di errore "l'operazione per questo formato non è ancora implementata" significa che il tuo file VDI utilizza la variante di formato "fisso". Per ovviare a questo problema dovrai clonare il tuo file VDI usando il clonehd comando. Per visualizzare quale variante di formato è presente nel tuo file VDI al momento, puoi utilizzare il comando showhdinfo comando.

Esempio di lavoro

Mostra le informazioni VDI sul disco corrente.

Comando di input: vboxmanage.exe showhdinfo path\inputfile.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi"
UUID:           132e9af1-0428-49f4-bc45-4d84680e17f5
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\VirtualBox VMs\sg2_win7_x64_lab\sg2_win7_x64_lab.
vdi
Storage format: VDI
Format variant: fixed default
Capacity:       40960 MBytes
Size on disk:   40962 MBytes
In use by VMs:  sg2_win7_x64_lab (UUID: dcd106b3-7ed6-4f19-ad94-820ab4dc10d3)

C:\Program Files\Oracle\VirtualBox>

Vedi dove si dice "predefinito fisso"? Ecco perché sputa l'errore sopra quando provi a ridimensionarlo.

Clona il vecchio file VDI in un nuovo file VDI.

Comando di input: vboxmanage.exe clonehd path\inputfile.vdi path\outputfile.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonehd "%userprofile%\virtual
box vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" "%userprofile%\virtualbox vms\sg2
_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 34dafa68-3093-4946-926a-8237ea263
e5c

C:\Program Files\Oracle\VirtualBox>

Ecco! Il vecchio file è stato ora clonato in un nuovo file. Poiché l'impostazione predefinita nelle nuove versioni di VirtualBox è di utilizzare la variante di formato "dinamico", non è necessario definirla esplicitamente. Sebbene, se si sta lavorando con una versione precedente di VirtualBox, si potrebbe voler impostare l'opzione su "dinamico" (se del tutto disponibile) per garantire una maggiore compatibilità e / o flessibilità con le versioni future di VirtualBox.

Mostra informazioni VDI sul disco clonato.

Comando di input: vboxmanage.exe showhdinfo path\inputfile_clone.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID:           34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity:       40960 MBytes
Size on disk:   7806 MBytes

C:\Program Files\Oracle\VirtualBox>

Guarda come ora dice "default dinamico"? Che carino!

(Nella nota a margine! La ragione per cui dice 7806 MB come dimensione fisica qui è perché avevo usato il --compact opzione sul file VDI originale nel tentativo di applicare la conversione alla variante di formato dinamico. Solo qualcosa che ho letto sul forum di VirtualBox, presumibilmente avrebbe funzionato con le versioni precedenti, quindi ho pensato che potrei anche provarlo. Non ha funzionato.)

Ridimensionamento del disco clonato.

Comando di input: vboxmanage.exe modifyhd path\inputfile.vdi --resize 51200

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi" --resize 51200
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

C:\Program Files\Oracle\VirtualBox>

Successo! Niente più cazzate in formato. Ricorda semplicemente di ridimensionare il nuovo disco clonato e non quello originale. Tieni presente che la dimensione è espressa in MB. Credo che tu possa usare per es. 51200 così come 50G (o eventualmente "GB"). C'è anche l'opzione --resizebyte che può essere usato per esprimere la dimensione in byte.

Mostra le informazioni VDI sul disco clone ridimensionato.

Comando di input: vboxmanage.exe showhdinfo path\inputfile_clone.vdi

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID:           34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity:       51200 MBytes
Size on disk:   7806 MBytes

C:\Program Files\Oracle\VirtualBox>

Questo è tutto! Da qui ciò che devi fare è aggiungere questa unità clonata come nuovo VDI per la VM. Lo fai all'interno di VirtualBox. Non entrerò in quello. Se sei stato in grado di leggere e capire fino a questo punto, probabilmente non hai bisogno di ulteriori indicazioni. Puoi cancellare il vecchio file "fisso" o lasciarlo come backup. Assicurati di testare il nuovo file VDI prima di eliminare il file sorgente originale.

Nota! Non vedrai immediatamente la nuova dimensione del disco clonato. È necessario avviare la VM con esso e quindi è necessario utilizzare lo strumento di gestione delle partizioni per espandere la partizione in modo da riempire il disco virtuale (o creare più partizioni). Per Windows, basta eseguire diskmgmt.msc e sarete in grado di espandere la partizione lì.

Screenshots

a b c d e f g

Riferimento



Buon occhio! Ho corretto il parametro modifyhd. Grazie per aver portato questo alla mia attenzione.
Samir

2
Una risposta davvero ben scritta! IMHO questo dovrebbe ottenere molti voti.
Johan Karlsson

+1: Sono le persone come te e la conoscenza che condividi liberamente, che rende l'ecosistema di StackExchange una risorsa così fantastica!
Homunculus Reticulli

Usando VirtualBox, puoi fare la stessa cosa youtube.com/...
Nizzy

10

Ecco un processo abbastanza semplice che ha funzionato per ridimensionare un disco di dimensioni fisse di VirtualBox (v. 4.3.16) su un disco dinamico da 60 GB sul mio Mac (OS X 10.9.4) con Linux (Ubuntu 14.04) eseguito come SO guest:

In Terminale su Mac, CD nella directory con il file VDI e digitare quanto segue:

VBoxManage showhdinfo mydisk.vdi  
VBoxManage clonehd mydisk.vdi mydiskClone.vdi  
VBoxManage modifyhd mydiskClone.vdi --resize 61440  
VBoxManage showhdinfo mydiskClone.vdi

Nella sezione di archiviazione dell'applicazione VirtualBox, aggiungi mydiskClone.vdi come secondo HD, quindi avvia normalmente la VM.

Nella shell del sistema operativo guest, digitare:

sudo fdisk /dev/sdb
- delete all partitions
- create new partition on full disk

Riavviare l'ospite. Quando ritorna, vai di nuovo sulla shell e scrivi:

sudo resize2fs /dev/sdb1

Arresta il SO guest.

Nella sezione di archiviazione delle applicazioni di VirtualBox, impostare mydiskClone.vdi come disco di avvio. Quindi avviare il sistema operativo guest e verificare la nuova dimensione del disco utilizzando le proprietà di "Computer" nel browser dei file.


Questa risposta non ha senso. Per prima cosa create una partizione grande su / dev / sdb, quindi ridimensionatela, ma non create prima un filesystem. Hai forse dimenticato la fase di copiare sulla partizione originale?
sleske

5

La clonazione è in realtà una soluzione migliore e c'è un modo più semplice per farlo.

Dal menu File, selezionare Virtual Media Manager, quindi fare clic su Copia. La sorgente sarà il tuo disco rigido vdi di dimensione fissa originale e la tua destinazione sarà qualcosa di nuovo a tua scelta (include l'opzione di una nuova).


Questa è parte della risposta di sammyg.
Efren

4

OK, quindi l'ho fatto accadere senza clonazione .

Avevo un file VDI da 100 GB (formato fisso) con Ubuntu. Funzionando bene. Volevo liberare spazio nell'host riducendo la VM.

passi:

  1. Pulire

Eliminato i file indesiderati. 45 GB gratuiti. Ho bisogno solo di 30 GB per essere liberato.

  1. Risolvi il sistema operativo guest

Ho solo una partizione, quindi non posso fare nulla dall'interno di guest Ubuntu. Montato Ubuntu Live nella VM e avviato da esso.

Usato gparted per ridurre la partizione a 70 GB. Creata una nuova partizione nello spazio inutilizzato in ext4.

  1. Pulisci lo spazio libero

Lo spazio libero in una nuova partizione (30 GB).

Seguito questa guida: Riduci il disco rigido virtuale su Ubuntu come ospite e sistema operativo host utilizzando zerofree

La mia nuova partizione era /dev/sda3.

$ sudo apt-get install zerofree
$ sudo init 1

...

# mkdir /tmp3
# mount -o ro -t ext4 /dev/sda3 /tmp3
# zerofree -v /dev/sda3
  1. Compatta il VDI

    VBoxManage modifyhd "ubuntu.vdi" compatto

Ci è voluto un po ', ma ha funzionato!


Sei sicuro che funzionasse? Secondo il manuale VirtualBox, --compact funziona solo per immagini allocate dinamicamente, non per quelle a dimensione fissa.
sleske

@sleske Se segui tutti i passaggi, funziona. Ma, se inizi a utilizzare lo spazio su disco per le dimensioni del file, il file inizia a crescere.
ATOzTOA

@ ATOzTOA: Se il file immagine del disco cresce, non è un'immagine "a formato fisso", ma un'immagine "allocata dinamicamente", che è ciò che hai scritto nella risposta.
sleske

@sleske Un'immagine di dimensioni fisse crescerà fino a raggiungere la dimensione massima specificata.
ATOzTOA

2
No, questo è un immagine allocata dinamicamente . Per citare il manuale: "Se crei un'immagine di dimensioni fisse, verrà creato un file di immagine sul tuo sistema host che ha all'incirca le stesse dimensioni della capacità del disco virtuale." virtualbox.org/manual/ch05.html#vdidetails
sleske

2

Un po 'tardi per la festa qui, ma aggiungerò i miei 2 centesimi. Innanzitutto dirò che questo è un processo complicato che guiderà la maggior parte degli utenti occasionali che cercano di capire. Perché Oracle non ha incluso questo nella GUI VBox è un mistero.

Passaggio 1: utilizzare la riga di comando di Windows (VBoxmanage) per aumentare le dimensioni dell'unità. Un suggerimento qui è quello di utilizzare l'ID dell'unità vdi invece di cercare continuamente di entrare nel percorso del file e ottenere messaggi di errore.

Passaggio 2: è quindi necessario espandere la partizione primaria per utilizzare il nuovo spazio. Scarica il gparted iso e crea una nuova macchina virtuale in VBox utilizzandola come fonte IDE. Quindi utilizzare l'unità VDI esistente come disco sata. Non creare un'unità virtuale per questa macchina. Avvia la nuova macchina e avrai il gparted Gui in esecuzione. Questo potrebbe richiedere un paio di riavvii per essere risolto.

Una volta eseguito gparted, vedrai le partizioni del tuo disco vdi che desideri ridimensionare. IMPORTANTE: è necessario eliminare la partizione estesa e lo spazio file di scambio per poter aumentare la dimensione della partizione primaria, quindi non allocare tutto il nuovo spazio per il PP. Una volta fatto questo, dovrai designare lo spazio rimanente per la nuova partizione estesa e creare un nuovo spazio per i file di swap al suo interno. Ho trovato che questo è molto più facile quindi andare in giro con la linea di comando.

Non un pezzo di torta ma è fattibile ... mi ci è voluta circa mezza giornata di ricerche sul web per capirlo. In esecuzione win8.1 / Ubuntu su VBox

Willie


2

Ecco come ho ridimensionato / ingrandito / espanso un'immagine VDI fissa (il mio processo per ridurle è in un'altra risposta):

  1. Utilizzare VirtualBox per creare un nuovo disco della dimensione desiderata (dimensione DOVERE essere almeno lo stesso dell'originale). A tale scopo, aprendo le impostazioni di VirtualBox per la VM guest, accedere a Storage, fare clic sul controller HDD (ad esempio "SATA"), quindi fare clic su "+" per aggiungere un disco rigido. Quindi configurare il nuovo disco come desiderato.
  2. Scarica la ISO condivisa in gparted e configura la VM guest per avviarla (di nuovo, Impostazioni di archiviazione).
  3. Esegui il backup della memoria attuale della VM guest.
  4. Avvia la VM guest (dovrebbe avviarsi nell'ambiente live gparted). Dall'interno dell'ambiente gparted:
    1. Usa l'applicazione gparted per verificare che il tuo disco esistente sia "/ dev / sda" e che il tuo nuovo disco (più grande) sia "/ dev / sdb" (in alto a destra).
    2. Chiudi l'applicazione gparted.
    3. Apri un terminale con privilegi di root (fai clic con il pulsante destro del mouse sul desktop - & gt; Terminali - & gt; con i privilegi di root).
    4. Digita il seguente comando: dd if=/dev/sda of=/dev/sdb status=progress bs=128M e aspetta che si completi. Questo copierà il disco originale sul nuovo disco byte per byte, incluso MBR ecc. (Nota: questo potrebbe richiedere del tempo a seconda delle dimensioni del disco originale, della velocità del disco sull'host, ecc.). (Nota: se la tua VM guest ha & gt; 1 GB di RAM allocata, puoi cambiare il parametro "bs" come "bs = 256M" che potrebbe velocizzare la copia un po ').
    5. Riapri l'applicazione gparted
    6. Seleziona la nuova (più grande) unità (dovrebbe essere / dev / sdb) dall'elenco a discesa in alto a destra.
    7. Espandi le partizioni come desiderato. Per espandere una partizione che non è alla fine, potrebbe essere necessario spostare le partizioni che sono dopo quella (s) che si desidera espandere. A seconda delle specifiche del tuo schema di partizionamento potresti aver bisogno di farlo in più passaggi, come far crescere l'ultima partizione fino alla fine e poi ridurla spostando tutto alla fine. Nel mio caso, la mia partizione finale era il linux-swap, quindi l'ho semplicemente cancellato, espanso la mia partizione primaria come desiderato, e poi ricreato la partizione di swap alla fine (facendo attenzione a replicare il suo schema di partizionamento originale).
    8. Applica i cambiamenti.
    9. A questo punto dovresti avere un nuovo disco a dimensione fissa con tutto il contenuto originale e più spazio dell'originale. È possibile montare il nuovo disco nell'env live gparted e verificare.
    10. Arresta la VM guest (gparted live) e rimuovi l'ISO dall'unità VM.
  5. Vai alle Impostazioni VBox per la VM guest, passa a Storage e rimuovi il disco originale dall'elenco (fai clic con il tasto destro e seleziona "Remove Attachment"). Questo dovrebbe lasciare il tuo disco appena creato per la VM. Nota: questo passaggio consiste semplicemente nella rimozione del disco dalla configurazione della macchina virtuale guest: il disco della VM guest originale (ad esempio quello piccolo) è ancora disponibile sulla macchina host.
  6. Avvia la VM e divertiti!
  7. (Dopo aver confermato che tutto funziona come previsto, è possibile eliminare il disco VM originale).

Mentre quanto sopra ha funzionato benissimo per me più volte, sembra che siano necessari alcuni passi in più se si usa LVM. (NOTA: se viene utilizzato LVM, è sufficiente aggiungere un nuovo disco della dimensione desiderata e quindi aggiungere tale disco al gruppo di volumi.) Con CentOS 6.6 in cui viene utilizzato LVM, ho dovuto aumentare lo spazio all'interno di LVM. Quindi, dopo aver avviato il nuovo disco creato sopra, ho fatto qualcosa in questo senso (varie parti di questo variano in base ai nomi della tua configurazione):

  1. Ottieni informazioni sulla configurazione LVM:

    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  31.51g    0 
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 31.51g    0 
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 28.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
    
  2. Estendi il volume fisico (PV) (il gruppo di volumi (VG) rifletterà automaticamente lo stesso aumento):

    # pvresize /dev/sda2
      Physical volume "/dev/sda2" changed
      1 physical volume(s) resized / 0 physical volume(s) not resized
    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  39.51g 8.00g
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 39.51g 8.00g
    
  3. Estendi volume logico (LV):

    # lvextend /dev/vg_rhel6bm1/lv_root /dev/sda2
      Size of logical volume vg_rhel6bm1/lv_root changed from 28.31 GiB (7247 extents) to 36.31 GiB (9295 extents).
      Logical volume lv_root successfully resized
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 36.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
    
  4. Estendi il file system:

    Prima:

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             28G   24G  3.1G  89% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot
    

    Comando:

    # resize2fs /dev/mapper/vg_rhel6bm1-lv_root
      resize2fs 1.41.12 (17-May-2010)
      Filesystem at /dev/mapper/vg_rhel6bm1-lv_root is mounted on /; on-line resizing required
      old desc_blocks = 2, new_desc_blocks = 3
      Performing an on-line resize of /dev/mapper/vg_rhel6bm1-lv_root to 9518080 (4k) blocks.
      The filesystem on /dev/mapper/vg_rhel6bm1-lv_root is now 9518080 blocks long.
    

    Dopo:

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             36G   24G   11G  69% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot
    

Bella risposta! Benvenuti nel sito!
djsmiley2k

1

Ecco come ho ridimensionato / ridotto / ridotto un'immagine fissa VDI (il mio processo di espansione è in un'altra risposta in questo stesso argomento):

Innanzitutto un breve background sul perché avevo bisogno di questo (poiché ci sono molti scenari per ridurre un VDI, alcuni dei quali potrebbero non essere fattibili con questo approccio): anni fa ho creato un VDI fisso per un guest di Windows Server e lo ridimensionavo a 600 GB. Non ricordo perché ho scelto questa taglia, ma ad oggi ho consumato solo 100 GB in quell'ospite e voglio recuperare la maggior parte dello spazio rimanente. Quindi nel mio caso, voglio conservare tutti i dati nell'ospite e voglio semplicemente liberare spazio inutilizzato nell'ospite.

(I seguenti passaggi provengono principalmente dalla mia memoria di averlo fatto nelle ultime 2 ore, quindi scusami se mi manca qualcosa qui.)

  1. Determina quanto grande vuoi che sia la nuova dimensione. Ovviamente probabilmente vorrai lasciare all'ospite uno spazio extra oltre a quello che consuma attualmente. La dimensione deve essere almeno uguale a quella dei dati nel disco sorgente / originale, arrotondato al GB più vicino.
  2. Utilizzare VirtualBox per creare un nuovo disco a dimensione fissa con le dimensioni definite nel passaggio precedente. A tale scopo, aprendo le impostazioni di VirtualBox per la VM guest, accedere a Storage, fare clic sul controller HDD (ad esempio "SATA"), quindi fare clic su "+" per aggiungere un disco rigido. Quindi configurare il nuovo disco come desiderato.
  3. Scarica il gparted live ISO e configurare la VM guest per l'avvio da esso (di nuovo, Impostazioni di archiviazione).
  4. Esegui il backup della memoria attuale della VM guest.
  5. Avvia la VM guest (dovrebbe avviarsi nell'ambiente live gparted). Dall'interno dell'ambiente gparted:

    1. Utilizzare l'applicazione gparted per determinare quale disco è "originale" e quale è "nuovo". L'originale avrà almeno una partizione, mentre quella nuova sarà completamente vuota. (Di solito l '"originale" è il primo disco a cui è assegnato / dev / sda, e il "nuovo" disco è il secondo disco a cui è assegnato / dev / sdb.)
    2. Utilizzare l'applicazione gparted per ridurre le partizioni originali / di origine alle dimensioni desiderate. Ricorda fare clic sul pulsante "Applica" dopo aver eseguito tutte le operazioni. (Questo potrebbe richiedere un po 'di tempo a seconda delle dimensioni della partizione e della velocità del disco.)
    3. Usa l'applicazione gparted per creare una tabella delle partizioni sul nuovo disco (Dispositivo - & gt; Crea tabella delle partizioni ..., lascia il tipo come MSDOS).
    4. Utilizzare l'applicazione gparted per creare partizioni identiche sul nuovo disco. (Per assicurarmi che fossero uguali, ho raccolto le informazioni dettagliate per ogni partizione sul disco originale usando l'opzione di menu Partition- & gt; Informazioni ... e ho salvato uno screenshot di esso da utilizzare quando ho creato la stessa partizione (s) sul disco nuovo / di destinazione). Assicurati di:
      • Creare ciascuna partizione di destinazione delle stesse dimensioni dell'originale (appena regolato).
      • Imposta eventuali flag sulle partizioni corrispondenti (potrebbe essere necessario eseguire una volta creata la partizione).
      • Imposta qualsiasi etichetta sulle partizioni in modo che corrispondano.
      • (NOTA: l'UUID verrà impostato automaticamente quando i dati vengono copiati.)
    5. Fare clic sul pulsante "Applica" per confermare tutte le modifiche.
    6. Annota quale disco è "originale" e che è "nuovo" e annota i numeri delle partizioni corrispondenti (es. / Dev / sda1 - & gt; / dev / sdb1, / dev / sda2 - & gt; / dev / sdb2, ...)
    7. Chiudi l'applicazione gparted.
    8. Apri un terminale con privilegi di root (fai clic con il pulsante destro del mouse sul desktop - & gt; Terminali - & gt; con i privilegi di root).
    9. Supponendo che il tuo disco "originale" sia / dev / sda e "nuovo" sia / dev / sdb (in caso contrario, regola il seguente comando in modo appropriato), quindi copieremo ciascuna partizione, una alla volta. Per ogni partizione annotata dal passaggio precedente, immettere il seguente comando nel terminale:

      # dd if=/dev/sda1 of=/dev/sdb1 status=progress bs=128M
      

      e aspetta che si completi. Questo copierà la partizione 1 dal disco originale alla partizione 1 sul nuovo disco byte per byte.
      Ripeti il ​​comando per ogni partizione rimanente:

      # dd if=/dev/sda2 of=/dev/sdb2 status=progress bs=128M
      # dd if=/dev/sda3 of=/dev/sdb3 status=progress bs=128M
      # ...
      

      Gli appunti:

      • Questo può richiedere del tempo a seconda delle dimensioni delle partizioni, della velocità del disco sull'host, ecc.).
      • Se la tua VM guest ha & gt; Assegnato 1 GB di RAM, è possibile modificare il parametro 'bs' per essere "bs = 256M" che potrebbe velocizzare la copia un po '.
    10. A questo punto dovresti avere un nuovo disco a dimensione fissa con tutto il contenuto originale e un file VDI più piccolo dell'originale. Puoi montare il nuovo disco nell'env live gparted e verificare che i dati siano tutti lì.
    11. Arresta la VM guest (gparted live) e rimuovi la ISO gparted dall'unità VM.
  6. Vai alle Impostazioni VBox per la VM guest, passa a Storage e rimuovi il disco originale dall'elenco (fai clic con il tasto destro e seleziona "Remove Attachment"). Questo dovrebbe lasciare il tuo disco appena creato per la VM. Nota: questo passaggio consiste semplicemente nella rimozione del disco dalla configurazione della macchina virtuale guest: il disco VM della guest originale (ad esempio VDI di grandi dimensioni) è ancora disponibile sulla macchina host.
  7. L'ultimo passo che ho dovuto fare per il mio ospite di Windows è stato quello di impostare / correggere l'MBR e / o il BCD. (Non so se questo è richiesto per un guest Linux come non l'ho ancora fatto.) Se ho semplicemente avviato dal mio nuovo VDI ho ottenuto una schermata di errore di Windows Boot Mgr con questo contenuto (purtroppo non l'ho fatto t prendere uno screenshot prima di risolvere il problema):

    windows failed to start
    status 0xc000000e
    information A required device isn't connected or can't be accessed.
    
  8. Ottieni una ISO di installazione o riparazione di Windows (idealmente quella che corrisponde alla versione del tuo sistema operativo) e configura la VM guest per avviarla (ancora, Impostazioni di archiviazione).

  9. Avvia la VM guest e scegli di avviare dal CD / DVD.

    1. Poiché ogni versione dell'installazione / riparazione di Windows è diversa, non posso dare passaggi precisi qui per tutti. Ma l'idea è di scegliere l'opzione "Ripara" e trovare la strada per un prompt dei comandi. Nel mio caso di Windows Server 2012 ho dovuto: (a) scegliere la mia lingua / locale; (b) Scegli "Ripara il tuo computer" nell'angolo in basso a sinistra; (c) Scegliere "Risoluzione dei problemi"; (d) Scegli "Prompt dei comandi".
    2. Una volta che sei al prompt dei comandi, esegui i seguenti comandi (grazie a http://loverofcode.blogspot.com/2013/11/fixed-0xc000000e-boot-error.html per le informazioni!):

      > bootrec /fixmbr
      > bootrec /fixboot
      > bootrec /rebuildBcd
      

      Questo ultimo comando dovrebbe individuare l'installazione di Windows e richiedere di aggiungerlo al BCD. Rispondi 'Y'.

    3. Chiudere il prompt dei comandi e quindi disattivare la VM guest.
  10. Vai alle Impostazioni VBox per la VM guest, vai a Storage e rimuovi la ISO di installazione / riparazione di Windows dall'unità CD / DVD.
  11. Avvia la VM e divertiti!
  12. (Dopo aver confermato che tutto funziona come previsto, è possibile eliminare il disco VM originale).

0

Fornisco una risposta estesa a qualsiasi sistema operativo ospitato in esecuzione su qualsiasi sistema operativo host. Questa risposta presuppone che si desideri aumentare la dimensione (estendere).

Nota: Come sottolineato da djule5 (vedi il commento subito dopo la domanda), modifyhd è ora conosciuto come modifymedium (ma rimane compatibile con le versioni precedenti). Qui io uso modifymedium.

1. Chiudere la VM in esecuzione

Sì, questa risposta è per un file VDI già utilizzato da una VM VirtualBox.

2. Aprire un terminale sull'host per ridimensionare l'immagine del disco

La riga di comando VBoxManage non vuole ridimensionare un'immagine del disco usando il nome file VDI.

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage modifymedium my_disk_image.vdi --resizebyte 16260316160                                                                      VBoxManage: error: Cannot register the hard disk '/home/user/vm/my_disk_image.vdi' {181540c7-b791-4b2f-8e01-5feaff04a6eb} because a hard disk '/home/user/vm/my_disk_image.vdi' with UUID {181540c7-b791-4b2f-8e01-5feaff04a6eb} already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox, callee nsISupports
VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 179 of file VBoxManageDisk.cpp

Quindi identifica l'UUID della tua immagine del disco.

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage list hdds
UUID:           181540c7-b791-4b2f-8e01-5feaff04a6eb
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /home/user/vm/my_disk_image.vdi
Storage format: VDI
Capacity:       10240 MBytes
Encryption:     disabled

Estendere le dimensioni dell'immagine del disco.

$ vboxmanage modifymedium 181540c7-b791-4b2f-8e01-5feaff04a6eb --resizebyte 16260316160
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

3. Utilizzare uno strumento di partizionamento per estendere la partizione logica

Esegui la tua macchina virtuale ospitata. Quindi utilizzare a strumento di partizionamento .

Alcuni strumenti per GNU / Linux ospitati:

Se il sistema ospitato utilizza Windows:

4. Controllare lo spazio libero della partizione

La dimensione del tuo file VDI (sul tuo sistema host) potrebbe non essere cambiata perché la tua macchina virtuale non ha ancora utilizzato lo spazio aggiuntivo. Divertiti.


-1

Ciò funzionerebbe per me e dovrebbe specificare la quantità totale della capacità del disco rigido. Non lo spazio ciò di cui abbiamo bisogno per aumentare ...

C: \ Programmi \ Oracle \ VirtualBox & gt; VBoxManage.exe modifyhd "D: \ Virtual Machine \ VirtualBox VMs \ Windows 7 (FileZilla Server) \ Windows 7 (FileZilla Server) .vdi" --resize 15360

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.