VMware Workstation: come ridurre la dimensione massima di .vmdk


27

Ho un file su disco da 150 GB (.vmdk, non pre-allocato) in cui è memorizzata la mia macchina virtuale.

Il file è attualmente di 20 GB, ma sta crescendo ogni giorno, anche se non sto memorizzando nulla di nuovo nel file system guest.

Ho cercato per ore un modo per ridurre la dimensione massima di questo disco , in modo che non raggiungesse mai i 150 GB (mi piacerebbe impostare il limite a 30 GB e vedere cosa succede quando la VM raggiunge questa dimensione) .

Cosa ho provato:

  • La conversione dell'immagine del disco con VMware Converter → non funziona, lo strumento consente solo di creare una copia completa o un "clone collegato".
  • Creazione di una nuova macchina virtuale vuota della dimensione desiderata per copiare i dati da 20 GB sul nuovo .vmdk → Non riesco a trovare un modo per eseguire la copia o addirittura collegare il nuovo disco alla mia VM esistente (in modo che esegua la copia utilizzando il sistema operativo guest).
  • Cerca nel file .vmx per verificare se la dimensione massima non è stata impostata in testo normale (non lo è).

Anche se questo compito sembra tecnicamente abbastanza semplice (non ci sono problemi di restringimento, ma solo un semplice cambio di limite di dimensione), sono davvero senza idee qui ...

C'è una soluzione?


1
Poiché le partizioni sul disco virtuale sono molto probabilmente create per riempire lo spazio pubblicizzato, è effettivamente coinvolto il "restringimento difficile".
Daniel B,

Risposte:


25

La normale procedura per ridurre le dimensioni di un disco .vmdk è di:

  1. Deframmenta il disco tramite il guest, scegliendo una modalità di deframmentazione che consolida lo spazio vuoto alla fine del disco. Per un guest Windows, è necessario svuotare il Cestino e disattivare l'ibernazione e il paging, restituendoli al termine della deframmentazione.

  2. Azzera tutto lo spazio inutilizzato sul disco.
    Per l'uso di Windows SDelete : sdelete -c.
    Per Linux: dd if=/dev/zero of=/mytempfile && rm -f /mytempfile.

  3. Riduci il disco (che potrebbe richiedere parecchio tempo per il completamento).
    Workstation VMware: menu VM / Gestisci / Pulisci dischi.
    Oppure utilizzare: vmware-vdiskmanager.exe -k [VMDK PATH].
    per ESX: vmkfstools --punchzero [VMDK PATH].

La conversione del disco da coltivabile a preallocato potrebbe impedirne la crescita. Questo può essere fatto usando vmware-vdiskmanager con il -tparametro i cui valori sono:

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

Il seguente comando converte .vmdk da coltivabile a preallocato:

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

Se si desidera modificare le dimensioni del disco, questo dovrebbe essere fatto mentre il disco è ancora in formato coltivabile (esempi qui ).

Per ulteriori informazioni, consultare la Guida dell'utente di Virtual Disk Manager .


2
Tuttavia, ciò non riduce le dimensioni dell'unità pubblicizzate internamente.
Daniel B,

@DanielB: No, non riduce la dimensione massima, ma solo la dimensione fisica. Ridurre le dimensioni massime può essere pericoloso, poiché alcuni sistemi operativi non possono avviarsi senza spazio libero sul disco di sistema.
harrymc,

3
Questa è una tecnica utile che ho usato per ridurre lo spazio occupato dal VMDK. Tuttavia, questo non risolve completamente il mio problema, come se volessi mantenere sempre il VMDK, diciamo 30 GB, dovrò ripetere periodicamente l'operazione (che in effetti richiede molto tempo).
Sébastien,

Se il disco può sempre essere ridotto alla dimensione desiderata, il che significa che la procedura sopra funziona sempre per ridurla, è possibile limitare la dimensione in futuro convertendo il disco in dimensione fissa.
harrymc,

1
@harrymc La conversione del disco in dimensioni fisse soddisferebbe le mie esigenze. Non ho trovato un modo per farlo con VMWare Workstation o Converter.
Sébastien,

6

Il file è attualmente di 20 GB, ma sta crescendo ogni giorno, anche se non sto memorizzando nulla di nuovo nel file system guest.

Perché il sistema operativo e i suoi programmi applicativi utilizzano temporaneamente molto spazio su disco per file temporanei, file di paging, file di ibernazione e file di configurazione. Una volta eliminati in base alla politica del sistema operativo, i nuovi settori su disco vengono utilizzati alla successiva. La VM alloca l'archiviazione per il disco virtuale dal disco reale ogni volta che viene utilizzato un nuovo settore nel disco virtuale. Poiché il settore sul disco virtuale non viene sempre riutilizzato dal sistema operativo guest, la VM ritiene che sia un utilizzo del disco e offra spazio dal disco reale e ciò comporterà una crescita dell'immagine del disco virtuale.

È meno probabile che il titolo della tua domanda venga risolto in quanto l'utilizzo di tale strumento senza ispezione dell'immagine può portare a un disastro totale. Ma puoi impedire la crescita dell'immagine oltre i 30 GB. Ci sono molti modi per raggiungere l'obiettivo.

A. Utilizzare solo 30 GB partizionati e lasciare lo spazio libero rimanente. Se hai già partizionato più spazio, devi ridurlo / eliminarlo, creare una nuova partizione, quindi scaricarla con zeri e perforarla come descritto da @harrymc. Poiché lo spazio nell'area non partizionata non viene mai utilizzato, il disco virtuale non crescerà mai oltre i 30 GB.

B. Creare un'istantanea e ripristinarla dopo l'uso. Dopo aver creato l'istantanea VM, archiviare i dati in un nuovo file di immagine. Se ripristini su di esso, senza salvare o creare nuove istantanee, tutti i dati modificati vengono eliminati e quindi lo spazio viene liberato.

C. Creare un nuovo disco virtuale di massimo 30 GB, aggiungerlo come nuovo disco nella macchina virtuale corrente, spostare tutti i dati sul nuovo disco virtuale utilizzando uno strumento di backup. È possibile utilizzare un Linux live per la clonazione.

L'opzione consigliata è A


2

Perché non semplicemente impostare la dimensione del disco in questione su 30 GB da 150 GB.

Dovrai impostare la somma di tutte le partizioni su un valore inferiore a 30 GB. Dovrai ridurre le dimensioni delle partizioni mentre procedi. C'è MOLTA documentazione su questo sito su come ridurre le partizioni, quindi non lo ripeterò ANCORA.

Perché hai creato una partizione sottile da 150 GB se non disponevi dello spazio per supportarla alla massima dimensione? Sembra che questo stia solo chiedendo problemi.


5
Non ho creato personalmente la VM, ecco perché.
Sébastien,

Come posso ridurre il disco stesso? Ho le partizioni all'interno del disco ridursi, ma vdiskmanager.exe -k [VMDK PATH]come suggerito in un'altra risposta non riduce il disco.
Aaron Franke,

Il problema che non è chiaramente documentato è come ridimensionare un dispositivo vmdk (ovviamente dopo aver ridimensionato la partizione). Anche @mdpc penso che la tua risposta non sia costruttiva. In molte occasioni è necessario ridimensionare i dati su una VM esistente , quindi non ha senso puntare il dito sulla creazione corretta della VM.
basos

2

Esiste un modo rotatorio di utilizzare VMWare Converter per creare una nuova VM e dimensioni VMDK inferiori, quindi convertire il VMDK originale nel VMDK più piccolo appena creato.

Riduci VMDK

Passaggi dettagliati qui .

Notare che qualsiasi modifica alle dimensioni del VMDK richiederà anche un aggiornamento corrispondente alla tabella delle partizioni .


Questa è una VM VMWare Workstation e queste opzioni di copia avanzate non sono offerte da Converter per questo tipo di VM. Semplicemente non mi permette di cambiare la dimensione del disco.
Sébastien,

2

Funziona solo con VMDK sparsi (NON pre-allocato) Prima di restringere è necessaria una deframmentazione per garantire che lo spazio utilizzato sia contiguo

Deframmentazione in Windows

In una macchina virtuale Windows, devi prima eseguire una deframmentazione del disco da Windows. La deframmentazione in Windows assicura che tutti gli spazi utilizzati siano contigui. È quindi possibile ridurre le dimensioni del disco virtuale.

Riduzione del disco virtuale

Per ridurre il disco virtuale:

Apri il pannello di controllo / la casella degli strumenti di VMware Tools:

In Windows:

Fare doppio clic sull'icona Strumenti VMware nella barra delle applicazioni oppure fare clic su Start> Pannello di controllo> Strumenti VMware.

In Linux:

Apri il terminale ed esegui questo comando:

vmware-toolbox

Nota: in Workstation 9.x (Windows) e versioni successive, la riduzione viene eseguita automaticamente durante la pulizia del disco. Pertanto, questa opzione viene rimossa dal pannello degli strumenti di VMware. Vai a VM> Gestisci> Pulisci dischi. Questo non è disponibile nella versione Linux di VMware Workstation 9.xe successive.

Fai clic sulla scheda Riduci. Seleziona l'unità che desideri ridurre. Fai clic su Prepara per ridurre, quindi segui le istruzioni visualizzate. Attenzione: non spegnere la macchina virtuale o la macchina host mentre il disco si sta restringendo. Inoltre, non tentare di annullare il processo. L'interruzione di questo processo può causare danni irreparabili al disco virtuale e potrebbe non essere possibile riavviare la macchina virtuale.

Dalla Knowledge Base VMWare


Leggere prima le risposte esistenti evita risposte duplicate.
harrymc,

1
Scusa, comunque l'ho ripubblicato con la procedura completa e la fonte. Questo potrebbe aiutarlo di più
Jalal Mostafa,

Non risponde neanche all'operazione. OP vuole ridurre il limite massimo, non le dimensioni correnti.
Ryuu,

2

La risposta di @harrym è piuttosto buona, ma in realtà non risponde alla domanda. L'OP vuole ridurre la dimensione massima . Il problema è che l'hypervisor non sa quanto della dimensione presentata (ovvero la dimensione massima) sia effettivamente utilizzata dal sistema operativo. La compattazione (vmware-vdiskmakager -k) si applica a un vmdk coltivabile. Non fa nulla su quello preallocato.

Quindi i passaggi per ridurre il disco sono:

  1. Ridimensiona la partizione su disco tramite il sistema operativo o tramite un CD live adatto
  2. Ridimensiona il dispositivo vmdk, scegliendo attentamente il limite per non tagliare lo spazio di partizione utilizzabile. Puoi sempre lasciare un po 'più di spazio nell'immagine di quanto sia effettivamente necessario.

Il primo passaggio prevede una procedura dall'interno della VM e varia a seconda del sistema operativo guest. Il secondo passo potrebbe essere supportato dai comandi vmware ma non ho trovato un modo profondo per farlo. Quindi l'approccio hacky.

Ecco una soluzione non così rapida (a causa del trasferimento di dati di grandi dimensioni) e sporca che ha funzionato. Dovremo avere uno spazio disponibile pari alla dimensione massima del dispositivo .

ATTENZIONE: ricordarsi di eseguire il backup dei dati importanti prima di qualsiasi operazione !!

  1. Trova un modo per ridimensionare la partizione guest e lasciare spazio non allocato alla fine del dispositivo. Due esempi:

    Dal sistema operativo guest: windows 7

    1. È possibile utilizzare la funzionalità di ridimensionamento online. È una buona idea deframmentare prima il disco dall'interno del sistema operativo della ricerca.
    2. Esegui diskmgmt.msc, seleziona la partizione (volume) sul disco che vuoi ridimensionare, fai clic destro-> Riduci volume. Nella finestra di dialogo visualizzata, riduci le dimensioni in base alle tue esigenze. Tieni presente che poiché la partizione è in uso (se si tratta del disco di sistema o è fortemente frammentata) potresti non essere in grado di recuperare gran parte dello spazio libero. Provvedere a lasciare ulteriore spazio libero.
    3. Ora vogliamo conoscere le partizioni che terminano il settore del disco (o byte). Supponendo che questa sia l'unica partizione sul dispositivo, prendiamo le dimensioni del volume come visualizzato sul mio computer-> seleziona disco-> clic destro-> proprietà-> Capacità: annota il numero in byte. (ad esempio nel mio esempio 107371032576 per 99,9 GB). Aggiungi alcune centinaia di mega per la sicurezza (+204800) (ad esempio 107371237376). Per essere sicuri di non dover aggiungere nulla mancante, possiamo usare l'utilità della linea cmd diskpart per trovare l'offset della partizione dall'inizio del dispositivo. esegui diskpart quindi: elenca disco, seleziona ID disco , elenca parte, seleziona ID parte , dettaglio. Esempio:

    DISKPART> parte dettagli

    Partizione 1

    Offset in byte: 1048576

    Assicurati di aggiungere almeno questo numero alla dimensione del disco. Ora abbiamo bisogno di convertire i byte in settori che si dividono per 512 e arrotondano per eccesso (soffitto). Ad esempio 209709448. Nota questo numero per il passaggio 3.

    Tramite un cd live: SystemResqueCD

    1. In alternativa puoi usare un cd resque, ( SystemResqueCD è la mia proposta), scaricare ISO di avvio, montarlo come dispositivo cd rom virtuale sulla tua VM, avviare da CD (premendo il tasto Esc nella schermata di avvio di VMWare, potresti dover provare alcune volte come appare molto presto). Quando si raggiunge il prompt dei comandi digitare: startx, si spera che questo porti all'interfaccia grafica.
    2. Una volta sul desktop del sistema, avvia gparted (ad es. Da un terminale). Trova la partizione da ridimensionare (deve essere smontata in modo chiaro, in caso di dubbi esegui uno scandisk dal sistema operativo guest). Fai il ridimensionamento, pianificando attentamente le tue esigenze di spazio.
    3. Ancora una volta dobbiamo trovare l'offset finale nei settori (o byte) della partizione. Aprire il terminale e scrivere parted [ dispositivo ], quindi unità s, stampa. Per esempio

Numero Inizio Fine Dimensione Tipo File system Flag

1 avvio 2048s 113455103s 113453056s ntfs primario

Nota il settore finale e aggiungi 1. Ad esempio 113455104. Nota questo numero per il passaggio 3.

  1. Dato che l'hacking funziona su vmdks preallocato in singolo file (tipo 2) (non ho provato su più tipi di file), convertiamo prima il coltivabile in preallocato. Avremo temporaneamente bisogno di una partizione con spazio fisico come dimensione massima del dispositivo. (ad esempio 150 GB).

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

  2. Ora la parte difficile, per il disco preallocato ci dovrebbero essere 2 vmdks

    disk.vmdk disk-flat.vmdk

    il primo è lungo solo KB e il secondo contiene i dati. Apri il primo (disk.vmdk) mentre la workstation VMWare è spenta , con un editor di testo (Notepad ++ è il mio suggerimento). Trova la linea

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

    Sì, ottieni il punto, il secondo campo è il numero di settori allocati per il dispositivo. Come convalida, moltiplica per 512 e trova la dimensione in byte, quindi dividi per 1073741824 (1024 ** 3) per trovare la dimensione in GB. Dovrebbe essere la dimensione del dispositivo precedente.

    Ora sostituisci quel numero con il numero indicato dal primo passaggio e salva il file. ATTENZIONE : un errore qui e potresti finire col tagliare i dati reali usati sul filesystem. (Ma abbiamo ridimensionato la fs all'inizio del dispositivo e fatto calcoli corretti e sicuri giusto?)

  3. Fino ad ora nessun dato è stato ancora toccato. Fai questo ultimo passo per tagliare effettivamente le estensioni. Useremo la funzionalità di rinomina di vmware-vdiskmanager per ricreare il vmdk con le sue dimensioni ora tagliate.

    vmware-vdiskmanager.exe -n destvmdk sourcevmdk


0

Per un SO guest VMware vmware, eseguire:

sudo vmware-toolbox-cmd disk shrinkonly

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.