P14 - Disques, partitions, fstab et LVM sous Linux

Objectif

Savoir ajouter un disque à une machine Linux : le repérer, le partitionner, le formater, le monter au démarrage avec /etc/fstab, puis utiliser LVM pour pouvoir agrandir un volume sans tout casser.

Source

Fiche rédigée à partir de cours de lidstah et des deux astuces cours de lidstah.

Avant de commencer

Ces commandes effacent des données si on se trompe de disque. Toujours s’entraîner sur une VM avec un disque ajouté exprès (1 Go suffit), et vérifier deux fois le nom du disque avec lsblk.


1. Le chemin complet

flowchart LR
  A["Disque brut<br/>/dev/sdb"] -->|"cfdisk / fdisk"| B["Partition<br/>/dev/sdb1"]
  B -->|"mkfs.ext4"| C["Système de fichiers"]
  C -->|"mount"| D["Dossier<br/>/mnt/volume1"]
  D -->|"/etc/fstab"| E["Monté à chaque démarrage"]

2. Repérer le disque

lsblk            # arbre des disques et partitions (le plus lisible)
sudo dmesg | tail   # messages du noyau : le nouveau disque y apparaît (souvent sdb)
sudo blkid       # identifiants UUID et type de chaque partition
df -h            # espace utilisé sur ce qui est monté
NomSignification
/dev/sda, /dev/sdbDisques SATA/SCSI/USB (a = premier, b = deuxième…)
/dev/sdb1Première partition du disque sdb
/dev/nvme0n1p1Partition 1 d’un SSD NVMe
/dev/vdaDisque virtuel d’une VM KVM/Proxmox

3. Partitionner et formater

sudo cfdisk /dev/sdb       # menu interactif : New → taille → Write → Quit
# (fdisk /dev/sdb fait la même chose en mode questions/réponses)
sudo mkfs.ext4 /dev/sdb1   # formater la partition en ext4
Système de fichiersUsage
ext4Le choix par défaut, fiable
btrfsInstantanés (snapshots), compression ; jamais sur du RAID 5
XFSTrès bon pour les gros fichiers (bases de données)
ZFSRAID intégré, instantanés, intégrité (TrueNAS, Proxmox)
FAT32 / exFAT / NTFSÉchange avec Windows, clés USB
swapMémoire d’échange (mkswap, swapon)

4. Monter

sudo mkdir -p /mnt/volume1
sudo mount /dev/sdb1 /mnt/volume1   # montage temporaire (perdu au redémarrage)
ls /mnt/volume1
sudo umount /mnt/volume1            # démonter (sortir du dossier avant !)

5. Monter au démarrage : /etc/fstab

Une ligne = un montage, avec 6 colonnes :

# <quoi>                                    <où>          <type> <options>          <dump> <fsck>
UUID=2fc007d9-01a1-4d21-bd63-9ece32cd8040   /mnt/volume1  ext4   defaults,noatime   0      2
ColonneExplication
quoiMieux vaut l’UUID (donné par blkid) que /dev/sdb1 : si le disque change de nom, il est quand même retrouvé
oùLe dossier de montage (il doit exister)
typeext4, xfs, btrfs, nfs, swap…
optionsdefaults, noatime (n’écrit pas la date de dernière lecture : moins d’écritures), nofail (ne bloque pas le démarrage si le disque manque)
dumpPresque toujours 0
fsck1 pour /, 2 pour les autres disques locaux, 0 pour les montages réseau (NFS, SMB)
sudo nano /etc/fstab     # ajouter la ligne
sudo mount -a            # TESTER : monte tout fstab, affiche l'erreur s'il y en a une
findmnt --verify         # vérifier la syntaxe de fstab

Toujours tester avec mount -a avant de redémarrer

Une erreur dans fstab peut empêcher la machine de démarrer (mode secours). mount -a montre l’erreur tout de suite, pendant qu’on peut encore corriger.

6. LVM : des volumes qu’on peut agrandir

LVM (Logical Volume Manager) ajoute une couche entre les disques et les systèmes de fichiers.

flowchart BT
  PV1["PV<br/>/dev/sdc"] --> VG["VG « epsivg »<br/>(groupe = réserve d'espace)"]
  PV2["PV<br/>/dev/sdd"] --> VG
  VG --> LV1["LV « lv1 »<br/>/dev/epsivg/lv1"]
  VG --> LV2["LV « lv2 »"]
  LV1 --> FS["ext4 monté sur /mnt/lv1"]
SigleNomRôle
PVPhysical VolumeUn disque ou une partition donné à LVM
VGVolume GroupLa réserve d’espace formée de plusieurs PV
LVLogical VolumeUn « disque virtuel » découpé dans le VG, qu’on formate et monte
sudo apt install lvm2
sudo pvcreate /dev/sdc                  # déclarer le disque comme PV
sudo vgcreate epsivg /dev/sdc           # créer le groupe
sudo lvcreate -L 512M -n lv1 epsivg     # créer un volume de 512 Mo
sudo mkfs.ext4 /dev/epsivg/lv1
sudo mkdir -p /mnt/lv1 && sudo mount /dev/epsivg/lv1 /mnt/lv1
 
# voir l'état
sudo pvs ; sudo vgs ; sudo lvs           # résumés (pvdisplay, vgdisplay, lvdisplay = détaillé)

Agrandir un volume quand il est plein (sans démonter, sans perdre de données) :

sudo pvcreate /dev/sdd                  # nouveau disque
sudo vgextend epsivg /dev/sdd           # on l'ajoute au groupe
sudo lvextend -r -L +512M epsivg/lv1    # on agrandit le LV ; -r agrandit aussi le système de fichiers
# (sans -r : sudo resize2fs /dev/epsivg/lv1 pour ext4, xfs_growfs /mnt/lv1 pour XFS)

Cas réel donné par lidstah

Une base de données sur un LV posé sur un RAID 1 de 1 To arrive à saturation : on ajoute un deuxième RAID 1 au VG, on étend le LV, et c’est reparti pour quelques années, sans coupure.

Astuces avancées du wiki :

  • Étendre un LV avec un fichier image monté en loop device quand on n’a pas de disque libre (dépanne, à ne pas laisser en production) : cours de lidstah.
  • Réduire / à chaud en basculant la racine en RAM (pivot_root sur un tmpfs) : technique d’expert, risquée, cours de lidstah.

Exercices

  1. Sur une VM, ajoute un disque de 1 Go, crée une partition ext4 et fais-la monter automatiquement sur /data au démarrage.
  2. Pourquoi utiliser l’UUID plutôt que /dev/sdb1 dans fstab ?
  3. Ton LV /var/lib/mysql est plein. Quelles commandes, dans l’ordre, après avoir branché un disque /dev/sde ?

Erreurs fréquentes / dépannage

SymptômeCause / solution
umount: target is busyUn terminal est encore dans le dossier : cd ~, ou voir qui l’utilise avec sudo lsof +D /mnt/volume1
Démarrage en mode secoursErreur dans fstab : se connecter, nano /etc/fstab, corriger ou commenter la ligne, mount -a
df ne montre pas la nouvelle taillelvextend sans -r : lancer resize2fs
wrong fs typePartition pas formatée, ou mauvais type indiqué

Voir aussi