Dal disco al mount point: quattro parole da non confondere

Un disco è il contenitore fisico dei dati; prima di essere usato va partizionato. Una partizione è un sottoinsieme logico del disco, e la tabella delle partizioni ne registra settore iniziale, settore finale e tipo. Dentro ogni partizione vive un filesystem, che descrive come file e metadati sono davvero scritti. Una partizione non può estendersi su più dischi: quel limite lo supera solo LVM, di cui parliamo alla fine.

Un filesystem non è raggiungibile finché non lo si monta, cioè finché non lo si aggancia a una directory dell’albero, il mount point. Se la partizione con i dati personali contiene le directory john e carol e la monti su /home, i contenuti compaiono in /home/john e /home/carol. Tre dettagli che l’esame ama:

  • il mount point deve già esistere: non puoi montare su /mnt/userdata se quella directory non c’è;
  • se la directory conteneva già dei file, dopo il mount quei file non spariscono ma diventano invisibili, coperti dal filesystem montato, e riappaiono allo smontaggio;
  • /mnt è il posto in cui montare a mano qualcosa in via temporanea; /media è quello dei supporti rimovibili, che i desktop moderni montano da soli sotto /media/UTENTE/ETICHETTA.

Che cosa conviene separare, e perché

Non esiste un layout giusto in assoluto: si disegna sull’uso previsto della macchina. Le motivazioni sono quattro.

  • /boot — tenerla a parte garantisce l’avvio anche se il filesystem di root si corrompe, e permette di formattare / con un filesystem, una cifratura o una compressione che il bootloader non saprebbe leggere.
  • /home — separarla rende la reinstallazione indolore: si riformatta / senza toccare i dati degli utenti. La dimensione dipende da quanti utenti ci sono e da cosa fanno.
  • /var — è la directory dei dati variabili, quelli che il sistema riscrive di continuo: log in /var/log, temporanei in /var/tmp, cache in /var/cache, i dati di Apache in /var/www/html e di MySQL in /var/lib/mysql. Un processo impazzito che riempie /var quando sta dentro / può portare a kernel panic e corruzione del filesystem; su una partizione separata, al peggio si riempie quella.
  • prestazioni/ su un SSD veloce e /home o /var su dischi meccanici capienti, magari fisicamente diversi.

L’installer Debian propone per impostazione predefinita «tutti i file in una sola partizione»; quelli della famiglia Red Hat propongono un layout su LVM. Sono scelte dell’installer, non regole di Linux: l’esame è distribution-neutral e chiede il criterio.

/boot e la ESP: vincoli che vengono dall’hardware

La partizione di boot contiene i file usati dal bootloader — su Linux di solito GRUB 2, sui sistemi più vecchi GRUB Legacy — e i suoi file stanno in /boot/grub. Non è obbligatoria: GRUB sa montare / e leggere una semplice directory /boot.

Quando c’è, la partizione di boot è quasi sempre la prima del disco. Il motivo è storico: il BIOS del PC IBM indirizzava i dischi in cilindri, testine e settori (CHS) — al massimo 1024 cilindri, 256 testine e 63 settori, cioè circa 528 MB — e oltre quel confine non arrivava, salvo usare un indirizzamento diverso come LBA. Da qui la regola da ricordare: la partizione di boot deve terminare prima del cilindro 1024. Poiché contiene solo kernel, initrd e file del bootloader, oggi bastano circa 300 MB.

Sulle macchine UEFI entra in scena la EFI System Partition (ESP): contiene boot loader e immagini del kernel dei sistemi installati, è formattata FAT, su disco GPT ha il GUID C12A7328-F81F-11D2-BA4B-00A0C93EC93B e su disco MBR l’ID di partizione 0xEF. Su Linux si monta sotto /boot/efi. Questa è una di quelle da sapere a memoria, non da riconoscere: /boot/efi e 0xEF sono risposte plausibili in una domanda a completamento.

Lo swap: dimensionarlo e non trattarlo come le altre

Lo swap space serve a spostare pagine di memoria dalla RAM al disco quando serve. La partizione va marcata con il tipo giusto e preparata con mkswap, e soprattutto non si monta: non ha un mount point e non puoi curiosarci dentro con cd. Un sistema può avere più aree di swap, e Linux accetta anche file di swap, la via rapida per aggiungere spazio senza ripartizionare.

Sulla dimensione non esiste un dogma: la vecchia regola «il doppio della RAM» vale ormai solo sulle macchine con poca memoria; la documentazione di Red Hat Enterprise Linux 7 suggerisce il doppio della RAM sotto i 2 GB, una quantità pari alla RAM fra 2 e 8 GB e almeno 4 GB oltre gli 8 GB, con valori più alti se serve l’ibernazione.

LVM, quel tanto che l’obiettivo chiede

Col partizionamento classico decidi tutto prima. LVM aggiunge un livello di astrazione: i Physical Volume (una partizione, un disco, un array RAID) si raggruppano in un Volume Group, che si comporta come un unico dispositivo con la capacità sommata; il VG si suddivide in Logical Volume, che funzionano come partizioni ma sono molto più flessibili.

L’unità minima è l’extent: fisico sul PV, logico sull’LV, da 4 MB per impostazione predefinita. La dimensione di un LV è quindi la dimensione degli extent moltiplicata per il loro numero, e ingrandirlo significa aggiungere extent presi dal VG. Una volta creato, l’LV appare come un normale block device in /dev/NOMEVG/NOMELV, si formatta con i soliti mkfs.ext4 e si monta con mount o via /etc/fstab.