Da sempre uno delle funzioni più comode di vmware è la possibilità di estendere secondo necessità la dimensione degli hard disk, senza dover reinstallare niente.
Se con Windows 2003 abbiamo necessità di tool di terze parti, se con Windows 2008 il tutto può essere fatto nativamente all’interno del pannello di controllo, cosa facciamo con un sistema linux come CentOS?
Ipotizziamo di avere un web server CentOS 5.5, con un singolo disco da 13 Gb. Se abbiamo fatto un’installazione classica di CentOS, ci troveremo davanti un partizionamento di questo tipo:
fdisk -l Disk /dev/sda: 12.8 GB, 12884901888 bytes 255 heads, 63 sectors/track, 1566 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 1566 12474472+ 8e Linux LVM
Come sempre, CentOS crea una piccola partizione da 100M per /boot, e il restante spazio viene gestito tramite LVM. Se ipotizziamo di estendere il singolo disco fino a 20 Gb tramite vmware (ricordo a tutti:fatevi prima un backup o una snapshot!!!), ci potremmo ritrovare in seguito questa schermata:
Disk /dev/sda: 21.4 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 1566 12474472+ 8e Linux LVM
Il disco è effettivamente diventato da 21,4 Gb (tralasciamo pignolerie sul valore effettivo), ma se fate caso alla partizione /dev/sda2, il cilindro di fine è sempre il 1566 così come è invariato il numero di blocchi utilizzati. Dobbiamo procedere quindi a ridimensionare la partizione.
Per fare ciò utilizzeremo sempre fdisk, avviato col comando fdisk /dev/sda. In sequenza daremo questi comandi:
d, per cancellare una partizione
2, dato che dobbiamo rifare appunto sda2
n, per ricreare una nuova partizione
p, vogliamo ricrearla primaria come l’originale
2, stiamo ricreando sda2
enter, accettiamo il primo cilindro libero come inizio
enter, accettiamo l’ultimo cilindro come fine (e già qua notiamo che non è più 1566 ma 2610)
Perchè possiamo fare bellamente questa operazione da “macellai”? Perchè la partition table non viene riscritta fintanto che col comando w non la salviamo, e viene in ogni caso riletta al boot dal sistema o in seguito a comandi particolari che vedremo.
Manca ancora una cosa: se adesso dessimo il comando p per visualizzare le partizione, sda2 risulta essere di tipo 83, ovvero linux standard. Dobbiamo farla tornare ad essere di tipo lvm:
t, per cambiare il tipo di partizione
2, vogliamo sempre lavorare su sda2
8e, è il codice esadecimale delle partizioni lvm
Diamo infine w per salvare la nuova tabella delle partizioni. Riceveremo questo errore:
The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks.
Procederemo quindi a riavviare il server, attendendo fiduciosi che riparta (Ovviamente sarà stata nostra precauzione fare un backup preventivo della virtual machine!!!).
Caricata la nuova tabella, verifichiamo le dimensioni del physical volume lvm:
pvdisplay --- Physical volume --- PV Name /dev/sda2 VG Name vg_os PV Size 11.90 GB / not usable 22.10 MB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 380 Free PE 0 Allocated PE 380 PV UUID wfLPaA-dNqL-XnDK-anrh-p7VJ-iJw8-VPePU3
Alcune informazioni che ricaviamo: il disco è visto da 12 gb ancora, e non ci sono slot liberi sul volume fisico per estendere poi il volume group (Free PE = 0). Diamo quindi il comando:
pvresize /dev/sda2
e riproviamo con pvdisplay:
--- Physical volume --- PV Name /dev/sda2 VG Name vg_os PV Size 19.89 GB / not usable 19.30 MB Allocatable yes PE Size (KByte) 32768 Total PE 636 Free PE 256 Allocated PE 380 PV UUID wfLPaA-dNqL-XnDK-anrh-p7VJ-iJw8-VPePU3
Questa volta il volume fisico è di 20 gb e abbiamo 256 Free PE (Physical Extends). Usiamo quindi il comando
lvdisplay
per ottenere il nome corretto del volume logico. In un’installazione classica sarà /dev/VolGroup00/LogVol00. Diamo quindi il comando:
lvextend /dev/VolGroup00/LogVol00 -l +256
dove 256 è appunto il numero di PE liberi a nostra disposizione. Rieseguendo pvdisplay dovremo trovare nuovamente i Free PE uguali a 0.
Ultimo passaggio, estendiamo il filesystem per occupare interamente il logical volume:
resize2fs /dev/VolGroup00/LogVol00
E voila! Una riesecuzione di df -h ci mostrerà lo spazio libero aumentato.
Non e’ meglio aggregare un’altra partizione/spazio livero al VG esistente?
Non e’ meglio aggregare un’altra partizione/spazio libero/nuovo disco al VG esistente?
Beh, sicuramente è più semplice da fare.
Sul meglio non lo so, iniziare ad avere numerosi PV sparsi in giro e poi ricordarseli tutti non sempre diventa facile, anche se nell’operatività giornaliera lvm mi nasconde effettivamente tutto in un unico LV.
Anch’io prima procedevo creando un LVM adesso in ambiente virtualizzato sto ritornando all'”antiche” partizioni linux, perche’ creare un LVM su un disco virtuale mi sembra poco performante.
E’ solamente una senzazione non ho mai fatto prove in tal senso, in ogni caso dal punto di vista dell’operativita’ l’unica attenzione che bisogna avere e’ nel fare le giuste partizioni. Quando ho bisogno di estenderne una, estendo il disco virtuale, smonto la partizione d’interesse e la estendo tramite parted rimonto la partizione ed il gioco e’ fatto
Ciao Edoardo,
grazie per la spiegazione. Tenete presente che la mia conoscenza su linux è data da anni di uso molto settoriale, mi sono nel tempo imparato quello che mi serviva al momento.
Ben vengano quindi ulteriori precisazioni o correzioni. Grazie!
Ciao Edoardo,
anche io ho sempre usato il metodo che Luca ha esposto in questo post. Tuttavia spesso mi trovo a dover “lottare” con partizioni che non sono LVM. Potresti indicarmi più precisamente i passaggi da fare con parted con semplice partizioni ext3? Grazie mille 🙂
Ciao a tutti
in effetti l’argomento non e’ banale, in ogni caso vedo di rispondere in maniera esaustiva e veloce alla richiesta, ora purtroppo sono un po’ incasinato con un ds3400, comunque per usare il parted per sommi capi funziona cosi:
se hai un disco solo con piu partizioni lanci il parted, lanci il comando print e vedi il numero della partizione che interessa ed infine lanci il comando resize.
Esempio concreto:
disco /dev/sda
partizioni: /dev/sda1 /dev/sda3 /dev/sda6
print:
Number Start End Size Type File system Flags
1 32.3kB 77.6GB 77.6GB primary ext4
3 77.6GB 77.7GB 105MB primary ext4 boot
4 77.7GB 160GB 82.4GB extended
resize 4 77.7GB 170GB
in questo caso avrei aumentato la partizione 4 di 10 GB
naturalmente prima di procedere un bel backup e’ sempre cosa gradita
Ciao Edoardo, quindi ricapitolando:
1)aumento lo spazio del vdisk da VI client
2)(a meno che non sia una partizione diversa da /) spengo la VM
3)avvio la VM con una live, monto il disco e faccio resize con parted
3.5) (devo creare prima una partizione sul disco aggiunto?)
4) riavvio e bon…il gioco è fatto?
Grazie mille per il tuo contributo,
buona serata.
Michele
se la partizione non e’ di root (/) non c’e’ bisogno di spegnere la macchina ne di usare una live, basta fermare i servizi che accedono alla partizione, smontarla ed usare parted, spero di essere stato sufficentemente chiaro
ciao
p.s se ha piu’ dischi quando lanci parted devi specificare il disco
grazie per l’ottima guida. L’ho seguita alla lettera e sono riuscito ad espandere di 200 GB la dim. dell’hard disk inizialmente settata a 400 GB. L’unica cosa assurda che vedo è che il vsphere client, sotto la scheda virtual machine mi fa vedere i seguenti valori:
provisioned space: 401 GB (e già qua non va bene visto che sono ora 600)
used space :2,40 KB ?!?!?!?!?!?!?!?!?
Anche Veeam backup, quando seleziono la vm da backupare mi dice che lo spazio occupato è di 2 kB. Il backup effettivo ci impiega poi un paio di ore (come solitamente impiega) ma quei valori sballati mi allarmano.
Qualche suggerimento?
Grazie
Max