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:

  1. Prima abbiamo cancellato la partizione attuale con il comando d;
  2. 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;
  3. Successivamente abbiamo dato il comando t per definire il tipo di partizione, e 83 come tipo (che corrisponde al nostro tipo originario, cioè ext4);
  4. Il comando a ha impostato la partizione appena creata come partizione di boot;
  5. 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 .