Quando proviamo a clonare una VPS oppure ad allargare la quota disco, potremmo trovarci nella situazione in cui /dev/vda1 (su alcuni sistemi /dev/sda1 ) non riflette lo stato del disco. In parole povere, /dev/sda1 sarà più piccola della quota disco assegnata (e pagata).
In questo esempio, faremo il resize del disco di una VPS OVH SSD 1 che ha 10Gb di quota disco fino ai 20Gb dell’offerta VPS SSD 2. Utilizzeremo degli strumenti molto popolari come fdisk e df , presenti su tutti i sistemi unix, ed è per questo che senza ulteriori modifiche potrete utilizzarla su altri tipi di VPS o server dedicati.
Prima di espandere /dev/vda1 , in modo da sfruttare tutti i Gb di disco che paghiamo, vi consiglio sempre di fare un backup. È sempre una buona idea, specialmente se qualcosa va storto o se pasticciamo con la tabella delle partizioni. Se potete, eseguite uno snapshot da poter ripristinare se il vostro provider ve lo permette. Nel mio caso, OVH supporta questa opzione.
Verifichiamo lo stato attuale:
# df -Th / Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 9,8G 7,2G 2,1G 78% / # fdisk -l /dev/vda Disco /dev/vda: 21.5 GB, 21474836480 byte 16 testine, 63 settori/tracce, 41610 cilindri Unità = cilindri di 1008 * 512 = 516096 byte Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Identificativo disco: 0x000574cf Dispositivo Boot Start End Blocks Id System /dev/vda1 * 2048 20971519 10484736 83 Linux
Il sistema ci conferma che abbiamo uno spazio disco di 21.5GB e una partizione di 10Gb che inizia dal settore 2048. IMPORTANTE: annotiamoci questo numero perché sarà cruciale in seguito.
Modifichiamo la partizione
Il prossimo passo è usare lo strumento fdisk per cancellare temporaneamente la partizione /dev/vda1 e ricrearla immediatamente con la stessa posizione di partenza e naturalmente dello stesso tipo. Ricordate che tutte le operazioni che faremo non saranno effettive sino a quando non daremo il comando esplicitamente.
# fdisk -u /dev/vda WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c'). Comando (m per richiamare la guida): d Partizione selezionata 1 Comando (m per richiamare la guida): p Disco /dev/vda: 21.5 GB, 21474836480 byte 16 testine, 63 settori/tracce, 41610 cilindri, totale 41943040 settori Unità = settori di 1 * 512 = 512 byte Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Identificativo disco: 0x000574cf Dispositivo Boot Start End Blocks Id System Comando (m per richiamare la guida): n Azione comando e estesa p partizione primaria (1-4) # p Numero della partizione (1-4): 1 Primo settore (63-41943039, default 63): 2048 Last settore, +settori or +size{K,M,G} (2048-41943039, default 41943039): Using default value 41943039 (date invio) Comando (m per richiamare la guida): t Partizione selezionata 1 Codice esadecimale (digitare L per elencare i codici): 83 Comando (m per richiamare la guida): a Numero della partizione (1-4): 1 Comando (m per richiamare la guida): p Disco /dev/vda: 21.5 GB, 21474836480 byte 16 testine, 63 settori/tracce, 41610 cilindri, totale 41943040 settori Unità = settori di 1 * 512 = 512 byte Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Identificativo disco: 0x000574cf Dispositivo Boot Start End Blocks Id System /dev/vda1 2048 41943039 20970496 83 Linux Comando (m per richiamare la guida): w La tabella delle partizioni è stata alterata! Chiamata di ioctl() per rileggere la tabella delle partizioni. WARNING: Re-reading the partition table failed with error 16: Dispositivo o risorsa occupata. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Sincronizzazione dei dischi in corso.
Analizziamo quanto fatto:
- Prima abbiamo cancellato la partizione attuale con il comando d;
- Abbiamo poi creato una nuova partizione con il comando n, l’abbiamo resa primaria con il comando p e gli abbiamo assegnato il numero 1. Il sistema ci ha chiesto da quale settore farla partire, gli abbiamo risposto 2048, come indicato in precedenza. Per quanto riguarda l’ultimo settore date semplicemente invio, dato che l’ultimo settore del disco è il default;
- Successivamente abbiamo dato il comando t per definire il tipo di partizione, e 83 come tipo (che corrisponde al nostro tipo originario, cioè ext4);
- Il comando a ha impostato la partizione appena creata come partizione di boot;
- Infine abbiamo salvato la configurazione con il comando w.
A questo punto, un messaggio ci informa che è impossibile rileggere la mappa partizioni, perché il disco è in uso. Come dargli torto. La configurazione verrà letta al prossimo riavvio. Quindi rebootiamo la VPS:
# reboot && exit The system is going down for reboot NOW!
Ingrandiamo il filesystem
Dopo il riavvio del sistema, ci troveremo in questa situazione:
# df -Th / Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 9,8G 7,2G 2,1G 78% /
..che è quella precedente. Questo perché abbiamo allargato la partizione, ma dobbiamo farlo anche con il filesystem per coprirla tutta e poterla utilizzare per i nostri dati. Facciamolo in modo semplice con resize2fs :
# resize2fs /dev/vda1 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/vda1 is mounted on /; on-line resizing required old desc_blocks = 1, new_desc_blocks = 2 Performing an on-line resize of /dev/vda1 to 5242624 (4k) blocks. The filesystem on /dev/vda1 is now 5242624 blocks long.
Adesso sì che si ragiona:
# df -Th / Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 20G 7,2G 12G 39% /
La nostra partizione usabile è ora di 20Gb ed usa tutto lo spazio disponibile in /dev/vda .