5 - Gestion des disques
Partitionnement, systèmes de fichiers, montage persistant, swap, LVM et Stratis sous RHEL 9 — le module le plus pratique de l'EX200, où LVM est central.
A. Block devices & nommage
lsblk liste les block devices (lit en réalité la table kernel /proc/partitions).
lsblk # liste tous les block devices + points de montage
fdisk -l /dev/sda # détail du partitionnement de sda
Repères de lecture :
sda→ disque, avec partitionssda1,sda2sr0→ disque optique (CD/DVD)nvme0n1→ disque NVMeloop0→ device loop (on y monte des fichiers ISO)
Conventions de nommage selon le driver :
| Device | Usage |
|---|---|
/dev/sdX |
SCSI & SATA (commun) |
/dev/vdX |
machines virtuelles KVM |
/dev/nvmeXnY |
disques NVMe |
Numérotation des partitions :
- Sur
sd/vd, numéros séquentiels :/dev/sda2= 2ᵉ partition du 1ᵉʳ disque,/dev/sdb1= 1ʳᵉ partition du 2ᵉ disque. - Sur NVMe, le nom inclut le device :
/dev/nvme0n1p1= 1ʳᵉ partition du 1ᵉʳ disque,/dev/nvme0n3p2= 2ᵉ partition du 3ᵉ disque.
Options de stockage Linux :
- Partitions : allouent du stockage dédié selon le type de données.
- LVM (Logical Volumes) : ajoutent de la flexibilité (resize, snapshot).
- Stratis : volume manager nouvelle génération, thin provisioning par défaut, implémenté en user space.
B. MBR vs GPT

| Schéma | Boot | Table partitions | Max partitions | Taille max |
|---|---|---|---|---|
| MBR (Master Boot Record) | 512 bytes | 64 bytes | 4 primaires | 2 TiB |
| GPT (GUID Partition Table) | — | espace étendu | 128 | très grande |
🚨 Avec MBR, au-delà de 4 partitions il faut une partition extended contenant des partitions logiques. Sous Linux, l'unique utilité concrète d'une extended est souvent d'héberger des LVM. 💡 GPT existe principalement pour contourner les limites du MBR.
C. Créer des partitions
Plusieurs outils :
fdisk: supporte MBR & GPT. Sur un disque neuf,gcrée une table GPT.gdisk: orienté GPT (crée des partitions GPT par défaut).parted: pensé pour simplifier le partitionnement (scriptable).
Le type de partition est un identifiant low-level signalant à l'OS / filesystem / boot manager l'usage prévu (Linux fonctionne quand même si le type est imparfait, mais c'est une mauvaise pratique). Types courants : linux, swap, uefi, lvm.
Séquence fdisk (création d'une partition) :
lsblk # repérer le disque à partitionner
fdisk /dev/sda # ouvrir fdisk sur sda
# n -> nouvelle partition
# p -> primary (ou 'e' pour extended)
# 3 -> numéro de partition (défaut = suivante)
# <Entrée> -> premier secteur (défaut)
# +1G -> dernier secteur : taille de 1 Gio
# p -> print (vérifier la table) [optionnel]
# w -> write (écrire et quitter)
lsblk # vérifier l'apparition de sda3
Commandes internes utiles : p (print table), m (menu d'aide).
💡 Pour une extended (MBR) : on tape e, puis <Entrée> sur la taille pour prendre tout l'espace restant. On recrée ensuite des partitions logiques à l'intérieur.
La première partition logique porte toujours le numéro 5 (sda5).
D. Créer des systèmes de fichiers
| Filesystem | Notes |
|---|---|
| XFS | défaut RHEL, rapide & scalable, journalisé. Taille augmentable mais pas réductible |
| EXT4 | compatible ext2/ext3, journalisé. Taille augmentable ET réductible |
| vfat | support multi-OS (devices partagés Windows/Linux) |
| Btrfs | avancé mais non supporté sur RHEL |
mkfs.xfs /dev/sda1 # créer un FS XFS (défaut RHEL)
mkfs.ext4 /dev/sda1 # créer un FS ext4
mkfs.vfat /dev/sda1 # créer un FS vfat
mkfs.<Tab><Tab> # lister les variantes mkfs disponibles
🚨 mkfs seul (sans suffixe) crée un ext2 (sans journal) — toujours préciser mkfs.xfs / mkfs.ext4.
E. Monter un filesystem (manuel)
mount /dev/vdb1 /mnt # monte vdb1 sur /mnt
umount /mnt # démonte (on cible le point de montage, pas le disque)
lsof /mnt # quels fichiers ouverts empêchent le umount
mount # tous les FS montés (bruité par les mounts kernel)
findmnt # vue arborescente claire des montages
🚨 On ne peut pas monter un device sans filesystem, ni une partition extended seule.
F. Montage persistant via /etc/fstab
Syntaxe d'une ligne /etc/fstab :
<device> <mountpoint> <type> <options> <dump> <pass>
/dev/sdaX /mnt ext4 defaults 0 0
<type>peut valoirauto(détection automatique).<dump>(sauvegarde, généralement0),<pass>(ordre de fsck au boot,0= pas de check).
findmnt --verify # valider la syntaxe de /etc/fstab
systemctl daemon-reload # recharger après édition de fstab
mount -a # monter tout ce qui est dans fstab et non encore monté
🚨 Piège critique EX200 : une erreur dans /etc/fstab empêche le boot. Toujours tester avec mount -a après édition. Si le boot échoue, passer en mode dépannage via GRUB (éditer la ligne de boot, retirer rhgb quiet pour voir les messages).
💡 Ne jamais oublier la colonne defaults (options) ni les deux derniers 0 0.
G. Labels & UUID (montage robuste)
En datacenter, les noms de block devices peuvent changer d'un boot à l'autre. Pour un montage stable :
- UUID : généré automatiquement pour chaque device portant un filesystem.
- Label : nom arbitraire posé sur le filesystem (option
-L).
Les noms uniques persistants sont exposés sous /dev/disk/*.
blkid # tous les devices + UUID, LABEL, TYPE
tune2fs -L monlabel /dev/sdX1 # poser un label sur ext2/3/4
xfs_admin -L monlabel /dev/sdX1 # poser un label sur XFS
mkfs.xfs -L monlabel /dev/sdX1 # label à la création
Dans /etc/fstab, on remplace alors le device par :
UUID=xxxxxxxx-xxxx /mnt ext4 defaults 0 0
LABEL=monlabel /mnt ext4 defaults 0 0
🚨 Si on démonte une partition logique renommée automatiquement (sda5 / sda6 → si sda5 part, sda6 devient sda5), l'entrée fstab pointant sur l'ancien nom casse le boot. Solution : monter par UUID (meilleure pratique) ou par label.
💡 Récupérer l'UUID et l'ajouter à fstab :
blkid | grep sdaX | awk '{print $2}' >> /etc/fstab
🚨 Clone XFS : un clone garde le même UUID → conflit. Régénérer :
xfs_admin -U generate /dev/sdb1 # nouvel UUID pour un FS XFS
H. Supprimer une partition
umount /mnt # démonter d'abord
fdisk /dev/sdX # d -> delete, w -> write
I. Systemd mounts
Les lignes de /etc/fstab sont en réalité converties en units systemd .mount.
ls /run/systemd/generator/ # units .mount générés automatiquement
systemctl cat tmp.mount # voir une unit .mount d'exemple
💡 On peut écrire directement un fichier .mount (au lieu de fstab) pour exprimer des dépendances de montage plus fines.
J. Swap
Le swap est de la RAM émulée sur disque ; tout système Linux doit en disposer un minimum. Il se crée sur n'importe quel block device, type de partition linux-swap.
mkfs.<...> # pas ici : pour le swap on utilise mkswap
mkswap /dev/sda7 # initialise la zone de swap
swapon /dev/sda7 # active le swap
Séquence complète :
fdisk /dev/sda
# n -> nouvelle partition (ex. sda7)
# <Entrée> <Entrée> -> secteurs par défaut
# +2G -> taille 2 Gio
# t -> changer le type
# L -> lister les types disponibles
# swap -> sélectionner linux-swap
# (réordonner les partitions si besoin : x puis f, puis r pour revenir)
# w -> write
free -m # vérifier mémoire et swap
mkswap /dev/sda7
swapon /dev/sda7
swapoff /dev/sda7 # désactiver le swap
Ligne /etc/fstab pour rendre le swap persistant :
/dev/sda7 none swap defaults 0 0
💡 Préférer UUID=... au device direct dans fstab (même logique qu'en section G).
K. LVM — concepts
On agrège des volumes physiques (PV) en un volume group (VG), depuis lequel on taille des logical volumes (LV).

Chaîne : PV (pvcreate) → VG (vgcreate) → LV (lvcreate) → filesystem → montage.
Les noms LVM (/dev/vg/lv) ne changent pas : pas besoin d'UUID/label dans fstab pour un LV.
L. LVM — création de A à Z
# 1. Partition de type LVM (gdisk : code 8e00 ; fdisk : t -> lvm)
gdisk /dev/sdb
# n -> nouvelle partition, <Entrée> x2, +2G
# t -> type -> 8e00 (Linux LVM)
# p -> vérifier, w -> write, Y -> confirmer
# 2. Créer le volume physique
pvcreate /dev/sdb1
# 3. Créer le volume group (option -s = taille des extents)
vgcreate -s 8M vgdata /dev/sdb1
vgs # lister les VG
vgdisplay # détails (dont taille des extents)
# 4. Créer le logical volume
lvcreate -L 1G -n lvdata vgdata # par taille
# ou : lvcreate -l 255 -n lvdata vgdata (par nombre d'extents)
lvs # lister les LV
# 5. Filesystem + montage
mkfs.xfs /dev/vgdata/lvdata
# /etc/fstab : /dev/vgdata/lvdata /lvdata xfs defaults 0 0
mount -a
💡 Extents = blocs élémentaires d'allocation LVM. -s 8M à la création du VG fixe leur taille ; tous les LV du VG l'héritent.
M. Device Mapper — noms
Le kernel expose les LVM via device mapper :
- Noms non persistants :
/dev/dm-0,/dev/dm-1... - Noms persistants (liens symboliques) :
/dev/mapper/vgdata-lvdata - Lien symbolique « friendly » :
/dev/vgdata/lvdata
ls -l /dev/mapper/vgdata-lvdata /dev/vgdata/lvdata # ce sont des symlinks
mount # vérifie le chemin réel utilisé
N. Étendre un LVM (resize)
vgs # le VG a-t-il de l'espace libre ?
vgextend vgdata /dev/sdb2 # ajouter un PV au VG
lvextend -r -L +1G /dev/vgdata/lvdata # +1G au LV ET au filesystem (-r)
🚨 L'option -r de lvextend redimensionne aussi le filesystem. Si on l'oublie :
resize2fs /dev/vgdata/lvdata # ext4 uniquement
xfs_growfs /lvdata # XFS (cible le point de montage)
Shrinking (réduction) possible uniquement sur ext4, jamais sur XFS.
Exemple concret (2 PV, extension par %FREE) :
vgcreate vgfiles /dev/sde1 # vgcreate fait le pvcreate implicitement
lvcreate -l 255 -n lvfiles vgfiles
mkfs.ext4 /dev/vgfiles/lvfiles
mount /dev/vgfiles/lvfiles /mnt
df -h
vgextend vgfiles /dev/sde2 # ajouter un 2ᵉ PV
lvextend -r -l +50%FREE /dev/vgfiles/lvfiles
df -h # nouvelle taille visible
O. Réduire un Volume Group (retirer un PV)
Un PV ne peut être retiré que si les PV restants ont assez d'espace libre pour accueillir les extents déplacés (impossible si tout est utilisé).
pvmove -v /dev/sdf2 /dev/sdf1 # déplacer les extents de sdf2 vers sdf1
pvs # sdf2 maintenant inutilisé
vgreduce vgdemo /dev/sdf2 # retirer sdf2 du VG
Démo complète :
# 2 partitions LVM de 2G créées sous fdisk (type lvm)
vgcreate vgdemo /dev/sdf1
lvcreate -L 1G -n lvdemo vgdemo # ne PAS tout consommer (sinon reduce impossible)
vgextend vgdemo /dev/sdf2 # ajouter sdf2
pvs # extents dispo sur sdf2
lvextend -L +500M /dev/vgdemo/lvdemo /dev/sdf2 # +500M pris sur sdf2
mkfs.ext4 /dev/vgdemo/lvdemo
mount /dev/vgdemo/lvdemo /mnt
df -h
dd if=/dev/zero of=/mnt/bigfile bs=1M count=1100 # remplir pour répartir sur les 2 PV
pvmove -v /dev/sdf2 /dev/sdf1 # vider sdf2
pvs # sdf2 libre
vgreduce vgdemo /dev/sdf2 # retirer sdf2
P. Stack de stockage (vue d'ensemble)

- Block device layer : permet à RHEL d'exploiter différents stockages via les drivers kernel adaptés.
- Multipath : redondance des chemins d'accès.
- Partition : découpe un block device en unités.
- RAID : redondance au niveau des volumes.
- LVM : volumes dynamiques sur un ou plusieurs block devices.
- Les volumes peuvent servir à divers usages : filesystem, base de données, OSD Ceph, etc.
Q. Stratis

- Utilise toujours XFS comme filesystem et est thin provisioned par nature.
- Les volumes sont alloués depuis un pool Stratis (taille minimale par volume : 1 Gio environ ; l'outil n'affiche que l'espace réellement restant).
- Packages requis :
stratisd(daemon) &stratis-cli(commandestratis).
stratis pool list # lister les pools
stratis pool create ... # créer pool & filesystem
🚨 Les volumes Stratis se montent par UUID, avec l'option fstab x-systemd.requires=stratisd.service (sinon le montage tente de se faire avant le démarrage du daemon → boot cassé).
Démo :
dnf install stratis-cli stratisd -y
systemctl enable --now stratisd
stratis pool create mypool /dev/sdb
stratis pool list
stratis pool add-data mypool /dev/sdc # agrandir le pool avec un 2ᵉ disque
stratis blockdev list # quels disques dans quel pool
stratis fs create mypool myfs # FS -> /dev/stratis/mypool/myfs
mkdir /myfs
lsblk --output=UUID /dev/stratis/mypool/myfs >> /etc/fstab # récupérer l'UUID
# /etc/fstab :
# UUID=XXX /myfs xfs x-systemd.requires=stratisd.service 0 0
mount -a
stratis pool list
R. Snapshots Stratis
Montés par device name (pas par UUID), ils donnent accès à des données supprimées du FS d'origine.
dd if=/dev/zero of=/myfs/bigfile bs=1M count=2000 # fichier 2 Go dans le pool
stratis fs snapshot mypool myfs myfs-snap # snapshot de myfs
stratis fs list # le snapshot apparaît
rm /myfs/bigfile # suppression dans l'original
mkdir /myfs-snap
mount /dev/stratis/mypool/myfs-snap /myfs-snap
ls -l /myfs-snap # bigfile toujours présent !
umount /myfs-snap
stratis fs destroy mypool myfs-snap # détruire le snapshot
S. Compléments EX200
⚠️ Non couvert par les notes : VDO. Sous RHEL 9, VDO (déduplication/compression) n'est plus un objectif RHCSA distinct et s'intègre désormais à LVM (
lvcreate --type vdo -L <taille> -V <taille_virtuelle> -n <lv> <vg>). À connaître seulement de nom.
💡 ACL & attributs de FS (objectif « file system attributes » de l'EX200, partiellement couvert) :
getfacl fichier # voir les ACL
setfacl -m u:alice:rw fichier # ACL pour un utilisateur
setfacl -m d:u:alice:rw repertoire # ACL par défaut (héritage)
💡 NFS côté client (objectif « mount network file systems ») :
mount -t nfs serveur:/export /mnt
# /etc/fstab : serveur:/export /mnt nfs defaults,_netdev 0 0
Couverture objectifs storage EX200 : configure local storage using partitions and logical volumes ✅ · create and configure file systems (XFS/ext4/vfat, mount, fstab, UUID/label) ✅ · swap ✅ · LVM (create/extend/reduce) ✅ · Stratis ✅. ACL/NFS référencés ci-dessus ; VDO signalé comme hors objectif RHCSA 9.
Sources : Red Hat EX200 — RHCSA exam · RHCSA certification