Preparare un disco in Linux sono due operazioni distinte: prima si scrive una tabella delle partizioni, poi dentro ogni partizione si crea un filesystem. Chi arriva da Windows tende a fonderle in un unico «formatta».

MBR o GPT: lo schema decide lo strumento

La tabella delle partizioni vive nei primi settori del disco. MBR (Master Boot Record) eredita da MS-DOS: sta nel primo settore insieme al boot loader, non indirizza dischi oltre i 2 TB e ammette al massimo quattro partizioni primarie. Per superare quel limite si crea una partizione estesa che fa da contenitore a partizioni logiche; per Linux primarie e logiche si usano allo stesso modo. GPT (GUID Partition Table) è lo schema delle macchine UEFI: nessun limite pratico di dimensione, 128 voci nella tabella standard, un GUID di disco e una copia di riserva della tabella in coda.

Regola pratica: oltre 2 TB o più di quattro partizioni, la risposta è GPT. Lo schema decide l’utility: fdisk per MBR, gdisk per GPT, parted per entrambi.

fdisk e gdisk: si lavora in memoria, poi si scrive

Si lanciano da root sul disco intero, mai su una partizione: fdisk /dev/sdb, non /dev/sdb1. Il prompt è interattivo e le lettere sono quasi le stesse.

# fdisk /dev/sdb
Command (m for help): p     stampa la tabella
Command (m for help): n     crea una partizione
Command (m for help): d     cancella una partizione
Command (m for help): t     cambia il tipo (l elenca i codici)
Command (m for help): F     mostra lo spazio non allocato
Command (m for help): w     scrive su disco ed esce
Command (m for help): q     esce senza salvare

fdisk e gdisk tengono tutto in memoria fino a w. Finché non premi quella lettera puoi sbagliare senza danni, e q annulla. gdisk aggiunge s per rinumerare le partizioni dopo una cancellazione e un menu di recupero sotto r, che sfrutta la copia di backup della tabella GPT e sa convertire MBR in GPT.

Trappola frequente: creando una partizione la dimensione massima non è la somma dello spazio libero, ma il più grande blocco contiguo. Cancellata la partizione 2 in mezzo a tre, non puoi scavalcare la 3 per usare lo spazio in coda.

parted: potente, ma scrive subito

parted lavora su MBR e GPT e non aspetta nessuna conferma: ogni comando tocca il disco all’istante. E se lo lanci senza indicare il device, prende il disco primario.

# parted /dev/sdb
(parted) mklabel gpt              nuova tabella (msdos per MBR)
(parted) mkpart primary ext4 1m 100m
(parted) print free               partizioni e spazio libero
(parted) rm 2                     cancella la seconda
(parted) rescue 90m 210m          cerca e recupera una partizione
(parted) resizepart 3 350m

Due cose che l’esame ama: in mkpart l’ultimo valore è il punto dove la partizione finisce, contato dall’inizio del disco, non la dimensione; e il tipo indicato a parted è solo un’etichetta, il filesystem va creato a parte. Per ingrandire si allarga prima la partizione e poi il filesystem con resize2fs; per rimpicciolire l’ordine è rovesciato. Invertirlo significa perdere dati.

mkfs e i suoi cloni

mkfs è una famiglia. mkfs.ext2, mkfs.ext3 e mkfs.ext4 sono link allo stesso binario, mke2fs, che cambia default in base al nome con cui viene invocato: queste due righe sono equivalenti.

# mkfs.ext4 /dev/sdb1
# mke2fs -t ext4 /dev/sdb1

Di mke2fs ricorda -b (dimensione blocco), -c (bad block, due volte per il test lento), -L (etichetta, max 16 caratteri), -U (fissa la UUID) e -n, che simula soltanto. Per XFS c’è mkfs.xfs (pacchetto xfsprogs, non sempre installato) con -L fino a 12 caratteri, -f per forzare e -N come prova a vuoto. Per le chiavette mkfs.fat, alias mkfs.vfat: -F 32 sceglie FAT32 e l’etichetta si mette con -n, non con -L. Stessa lettera per mkfs.exfat. Questa asimmetria fra -L e -n è esattamente il dettaglio che ti chiedono di digitare.

Btrfs merita due righe. mkfs.btrfs accetta più device in un colpo solo e distribuisce dati e metadati con -d e -m (single, raid0, raid1, raid10). Dentro un filesystem Btrfs vivono i subvolumi, creati con btrfs subvolume create: non sono partizioni, condividono lo spazio libero del volume padre e si montano singolarmente. Uno snapshot è un subvolume pre-riempito col contenuto di un altro: btrfs subvolume snapshot, con -r per la sola lettura. La compressione è trasparente e si attiva al montaggio con l’opzione compress: zlib, lzo o zstd. Nota di distribuzione: ext4 è il default su Debian e Ubuntu, XFS su Red Hat e derivate, Btrfs su SUSE.

Swap: mkswap e swapon

Una partizione di swap va marcata e poi inizializzata. Il tipo è 82 in fdisk, 8200 in gdisk, linux-swap in parted. Poi:

# mkswap /dev/sda2
# swapon /dev/sda2
# swapoff /dev/sda2

Funziona anche un file al posto di una partizione, creato con dd.

# dd if=/dev/zero of=/swapfile bs=1M count=1024
# chmod 0600 /swapfile
# mkswap /swapfile
# swapon /swapfile

Due errori classici: swapon che risponde read swap header failed vuol dire che hai saltato mkswap; e uno swap attivato a mano sparisce al riavvio finché non lo scrivi in /etc/fstab. I permessi vanno a 0600 con proprietario root, altrimenti mkswap protesta.