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.