Gestire le partizioni di un disco da riga di comando, con fdisk.
Lo strumento di partizionamento più usato da shell in Linux è certamente fdisk ("disco fisso" o "formato disco").
Tramite fdisk è possibile visualizzare, creare, ridimensionare, eliminare, modificare, copiare e spostare partizioni su un disco rigido utilizzando la propria interfaccia basata su menu basata sul testo.
Attenzione: usa fdisk con molta cautela, un uso improprio può compromettere il disco e quindi il funzionamento del tuo server
Visualizzo tutte le partizioni di un disco
Linux consente solo 4 partizioni primarie, ed un certo numero di partizioni logiche, dividendo ulteriormente una delle partizioni primarie, in base alla dimensione del disco rigido.
Utilizzando fdisk con l'opzione "-l" (significa "list" cioè "elenco") visualizziamo tutte le partizioni del disco presenti sul tuo sistema.
VIene presentato l'elenco dei dispositivi di memorizzazione associati al nostro server (hard disk, chiavette USB,..), ad esempio: /dev/sda (il primo hard disk, normalmente è il disco rigido), /dev/sdb (il secondo hard disk, normalmente un dispositivo esterno USB), ...
Per ogni dispositivo avremo le sue partizioni.
# fdisk -l
Disk /dev/sdb: 2483.8 GB, 2483833405440 bytes
255 heads, 63 sectors/track, 301975 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 1 267350 2147483647+ ee GPT
Disk /dev/sda: 214.7 GB, 214748233728 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00067bf8
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25073 201391104 83 Linux
/dev/sda2 25073 26109 8321920 82 Linux swap / Solaris
In questo esempio, come puoi vedere, abbiamo due dischi
- il disco /dev/sdb con la partizione sdb1
- il disco /dev/sda con le due partizioni sda1 e sda2
Visualizzo le partizioni di uno specifico disco
Utilizziamo fdfisk con l'opzione "-l" seguito dal nome del device. Ad esempio "/dev/sda"
# fdisk -l /dev/sda
Disk /dev/sda: 214.7 GB, 214748233728 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00067bf8
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25073 201391104 83 Linux
/dev/sda2 25073 26109 8321920 82 Linux swap / Solaris
Visualizzo la dimensione di una specifica partizione
Se ci interessa conoscere la dimensione di una precisa partizione di utilizza fdisk seguito dal parametro "-s" e dalla partizione da analizzare, ad esempio /dev/sda2
# fdisk -s /dev/sda2
8321920
I comandi disponibili con fdisk
Per creare o manipolare una partizione, sono previsti vari comandi.
Per conoscere tutti i comandi disponibilii digitiamo fdisk seguito dal device a cui siamo interessati, es /dev/sdb
Apparirà un prompt con la richiesta di inserire un comando
# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help):
Clicca sul tasto "m" per visualizzare l'help dello strumento fdisk con tutti i comandi disponibili
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help):
Ecco visualizzati tutti i comandi disponibil: fdisk resta nuovamente in attesa che tu scelga un comando tra questi.
Visualizzo la lista delle partizioni di un device
Continuando l'esempio precedente, per visualizzare la tabella delle partizioni del disco /dev/sda utilizziamo il comando "p" (digita "p" sulla tastiera). L'output è identico a quello che avremmo ottenuto con "fdisk -l /dev/sdb"
Command (m for help): p
Disk /dev/sdb: 2483.8 GB, 2483833405440 bytes
255 heads, 63 sectors/track, 301975 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 1 267350 2147483647+ ee GPT
Command (m for help):
Nuovamente fdisk resta in attesa del prossimo comando.. e così sarà fino a quando non decidiamo di uscire da fdisk utilizzando "q" (quite).
Cancelliamo una partizione
Entriamo nelle fase più delicate di utilizzo di fdisk: la cancellazione di una partizione.
1: Sempre continuando il nostro esempio precedente, utilizziamo il comando "d" (delete).
2: Poco dopo ci verrà chiesto quale partizione eliminare. Abbiamo una sola partizione: sda1,e è quindi la partizione 1. Avessimo avuto più partizioni avremmo ad esempio: sda2 come partizione 2, sda2 come partizione 3...
3: Se voglio eliminare una partizione, digito il numero della partizione: nel nostro esempio è molto semplice: 1 perchè c'è solo una partizione
4: Infine, per salvare la modifica, digitiamo il comando "w" (write).
Command (m for help): d
Partition number (1-4): 1
Command (m for help): w
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 or after you run partprobe(8) or kpartx(8)
Syncing disks.
In questo esempio, come possiamo leggere, il sistema ci avvisa che la cancellazione non è ancora avvenuta perchè il disco è in uso. Verrà cancellata al riavvio della nostra macchina linux.
Come creare una nuova partizione
Abbiamo cancellato la partizione /dev/sdb1, il nostro disco sdb adesso non ha partizioni e quindi ha spazio libero: possiamo creare una nuova partizione sdb1.
Utilizziamo il comando "n" (new).
1: Ti verrà chiesto se vuoi creare una partizione estesa (digita "e") o primaria (digita "p"). Scegliamo "p"
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
2: Digitare il numero della partizione da creare: nel nostro esempio digita: "1"
Partition number (1-4): 1
3: Ti verrà chiesto di inserire i seguenti due input:
- Il numero del primo cilindro ("First cylinder") della partizione da creare. Come puoi vedere in parentesi sono indicati già il primo e l'ultimo possibile cilindro: digita 1
- il numero dell'ultimo cilindro della partizione da creare. Utilizziamo tutto lo spazio disponibile, quindi nel nostro esempio digita 267350. In alternativa potremmo indicare la dimensione (in Kilobyte o Megabyte o Gigabyte) dello spazio che si vuole creare (ad esempio +2000M)
First cylinder (1-267350, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-267350, default 267350): 267350
Bene, adesso siamo tornati al prompt di fdisk.
4: Scegliamo il tipo di filesystem della partizione.
Esistono svariati tipi di partizioni, elenchiamo le più usate: linux, linux swap, Linux LVM, Linux raid auto, W95 FAT32, NTFS.
Saltando questo step verrà di default assegnato il filesystem "linux". Se invece vogliamo deciderlo noi utilizziamo il comando "t"
Command (m for help): t
Dovremo scegliere il tipo di partizionamento scegliendo tra una lista di possibilità che possiamo consultare utilizzando il tasto "l".
Ad esempio se vogliamo creare un partizionamento W95 FAT32 (compatibile con Microsoft Windows) dobbiamo digitare "b".
Siamo nuovamente al prompt dei comandi
5: Verifichaimo che la nuova partizione sia stata correttamente creata utilizzando il comando "p"
Command (m for help): p
Disk /dev/sdb: 2483.8 GB, 2483833405440 bytes
255 heads, 63 sectors/track, 301975 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 1 267350 2147483647+ ee GPT
Command (m for help):
Se tutto è andato bene, salviamo la nuova tabella delle partizioni con il comando "w"
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Command (m for help):
Abbiamo ultimato il partizionamento. Possiamo anche finalmente uscire da fdisk usando il comando "q" (quite).
Per sicurezza verifichiamo che tutto sia andato a buon fine con l'ormai conosciuto
/sbin/fdisk -l
Errori nel partizionamento
Se hai cancellato una partizione logica e l'hai ricreata di nuovo, potresti notare un problema di "partizione fuori uso" o un messaggio di errore che evidenzia come le voci della tabella delle partizioni non sono nell'ordine corretto.
Nel nostro esempio, dopo la cancellazione di sdb1, la nuova partizione creata si potrebbe erroneamente chiamare sdb2 invece che sdb1.
In questi casi interveniamo con fdisk ed il comando "x" e subito dopo il comando "f" per correggere l'ordine nella tabella delle partizioni. Alla fine come sempre salviamo con "w"
# fdisk /dev/sdb
Command (m for help): x
Expert command (m for help): f
Done.
Expert command (m for help): w
The partition table has been altered!
Come formattare una partizione: mkfs
Dopo aver creato la partizione dobbiamo formattarla.
La formattazione richiede uno strumento differente da fdisk, che quindi abbandoniamo: utilizziamo lo strumento mkfs.
Nel terminale digitiamo mkfs seguito dal tipo di formattazione scelto nel paragrafo precedente preceduto da un punto. Nel nostro esempio avevamo scelto "FAT32" per cui useremo ".vfat". Infine indichiamo la partizione dal formattare.
# mkfs.vfat /dev/sdb1
Tra le possibili tipi di formattazioni ad esempio ricordiamo ext2, ext3, ext4, vfat. Su questo tema si rimanda ad altri articoli.
Assegnamo una etichetta alla nostra partizione
Per comodità di lettura, possiamo assegnare alle partizioni una etichetta di riconoscimento utilizzando il comando e2label.
Per assegnare un'etichetta a una partizione digitate e2label seguito dalla partizione e dalla etichetta.
Ad esempio:
#e2label /dev/sda1 cartellavideo