Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 1315 minIntermédiaire

Disques, partitions, fstab et LVM

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • identifier les disques, partitions et systèmes de fichiers d'un serveur ;
  • partitionner, formater et monter un disque de façon permanente ;
  • écrire et tester une ligne de /etc/fstab ;
  • créer des volumes LVM et agrandir un volume à chaud.

3 exercices corrigés1 schéma

Gérer les disques d'un serveur Linux, c'est les partitionner, y créer des systèmes de fichiers, les monter dans l'arborescence de façon permanente avec /etc/fstab, et surveiller l'espace libre. LVM (Logical Volume Manager) ajoute une couche souple entre les disques et les systèmes de fichiers : on agrandit un volume, ou on ajoute un disque, sans réinstaller ni arrêter le serveur. Ce chapitre suit srv-web et srv-journaux de l'ajout d'un disque jusqu'à l'agrandissement d'un volume.

Disques et partitions

Linux nomme les disques d'après leur type d'interface :

NomDisquePartitions
/dev/sda, /dev/sdbSATA, SAS, USB, et disques SCSI des VM (contrôleur VirtIO SCSI de Proxmox)/dev/sda1, /dev/sda2
/dev/vdaDisque VirtIO en mode bloc (autre choix dans Proxmox, fréquent chez les hébergeurs)/dev/vda1
/dev/nvme0n1SSD NVMe/dev/nvme0n1p1

Un disque se découpe en partitions, décrites par une table : GPT, le format actuel (jusqu'à 128 partitions, disques de plus de 2 Tio, obligatoire pour démarrer en UEFI), ou MBR, l'ancien format des machines en BIOS. Chaque partition reçoit ensuite un système de fichiers :

SystèmeOù on le trouvePoints forts
ext4Choix par défaut de Debian et d'UbuntuÉprouvé, se répare bien, s'agrandit à chaud et se réduit à froid
XFSChoix par défaut de RHELTrès gros fichiers et volumes ; s'agrandit, ne se réduit pas
BtrfsopenSUSE, FedoraInstantanés, compression, sommes de contrôle
ZFSProxmox VE, TrueNASGestion des disques, RAID, instantanés et intégrité en un seul outil
swapPartition ou fichier d'échangeMémoire de secours quand la RAM est pleine
vfatPartition système EFI (/boot/efi)Lisible par le micrologiciel UEFI

Voir les disques.

console
clambert@srv-web:~$ lsblk
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                       8:0    0   20G  0 disk
├─sda1                    8:1    0  976M  0 part /boot/efi
├─sda2                    8:2    0  977M  0 part /boot
└─sda3                    8:3    0   18G  0 part
  ├─srv--web--vg-root   254:0    0  5,6G  0 lvm  /
  ├─srv--web--vg-swap_1 254:1    0    2G  0 lvm  [SWAP]
  └─srv--web--vg-home   254:2    0 10,4G  0 lvm  /home
sdb                       8:16   0   50G  0 disk
sr0                      11:0    1 1024M  0 rom

C'est le résultat du schéma « disque entier avec LVM, /home séparé » de l'installeur (les tailles exactes dépendent de la taille du disque et de la version de l'installeur) : une partition EFI, une partition /boot hors LVM, et une grande partition sda3 qui contient le groupe de volumes srv-web-vg, découpé en trois volumes logiques. Dans les noms du device mapper, les tirets d'origine sont doublés (srv--web--vg-root pour le volume root du groupe srv-web-vg). Le disque sdb, ajouté ensuite dans Proxmox (Hardware > Add > Hard Disk), est vierge.

CommandeCe qu'elle montre
lsblk -fLes systèmes de fichiers, leurs étiquettes et leurs UUID
sudo blkidLes UUID et types de chaque partition
sudo fdisk -l /dev/sdbLa table de partitions d'un disque
df -hL'espace utilisé et libre de chaque système de fichiers monté
df -iLes inodes utilisés : un disque peut être « plein » de petits fichiers avec de l'espace libre
du -sh /var/logLa place occupée par un dossier
sudo du -xh --max-depth=1 / | sort -hLes plus gros dossiers de la racine, sans traverser vers d'autres disques
findmntTous les montages, en arbre

Partitionner et formater un disque

On prépare sdb pour les fichiers du site de suivi. parted fait le travail en une commande, fdisk en mode interactif (g pour une table GPT, n pour une partition, w pour écrire) :

bash
sudo parted /dev/sdb --script mklabel gpt mkpart donnees ext4 0% 100%
sudo mkfs.ext4 -L donnees /dev/sdb1
lsblk -f /dev/sdb

mklabel gpt crée la table, mkpart donnees ext4 0% 100% une partition nommée donnees sur tout le disque (le type ext4 n'est qu'une indication ; c'est mkfs.ext4 qui crée le système de fichiers), et -L donnees donne une étiquette au système de fichiers.

Monter un système de fichiers

Monter, c'est rattacher un système de fichiers à un dossier de l'arborescence :

bash
sudo mkdir -p /srv/www
sudo mount /dev/sdb1 /srv/www
findmnt /srv/www
sudo umount /srv/www        # démonter (aucun fichier ne doit y être ouvert)

Un montage fait à la main disparaît au redémarrage. Pour le rendre permanent, on l'écrit dans /etc/fstab, une ligne par système de fichiers, en désignant la partition par son UUID (donné par blkid) : les noms sdb, sdc peuvent s'échanger quand on ajoute un disque, l'UUID ne change pas.

text
# /etc/fstab
# <système de fichiers>                   <point de montage> <type> <options>                 <dump> <ordre de vérification>
/dev/mapper/srv--web--vg-root             /                  ext4   errors=remount-ro         0      1
UUID=6b1f0a2c-9d3e-4c7b-8a51-2f4e7d9c0b13 /boot              ext4   defaults                  0      2
UUID=4C2E-91A7                            /boot/efi          vfat   umask=0077                0      1
/dev/mapper/srv--web--vg-home             /home              ext4   defaults                  0      2
/dev/mapper/srv--web--vg-swap_1           none               swap   sw                        0      0
UUID=0f3c8e51-7a2b-4d96-b1c4-5e8a2d7f9b60 /srv/www           ext4   defaults,nofail,nodev,nosuid 0   2
ChampSens
1Ce qu'on monte : UUID=…, LABEL=donnees, ou un volume LVM /dev/mapper/… (stable lui aussi)
2Où : le point de montage (none pour le swap)
3Le type de système de fichiers
4Les options : defaults, nofail (le démarrage continue si le disque manque), noexec, nosuid, nodev (pas d'exécutable, pas de setuid, pas de périphérique), ro (lecture seule)
5Sauvegarde par dump : toujours 0 aujourd'hui
6Ordre de vérification au démarrage : 1 pour /, 2 pour les autres, 0 pour ne pas vérifier

Après une modification, teste avant de redémarrer :

bash
sudo findmnt --verify           # vérifie la syntaxe et l'existence des sources
sudo systemctl daemon-reload    # systemd régénère les unités .mount à partir de fstab
sudo mount -a                   # monte tout ce qui ne l'est pas encore : une erreur s'affiche ici

Le swap. swapon --show et free -h montrent l'espace d'échange. Pour en ajouter sans partition, un fichier suffit :

bash
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

LVM : volumes physiques, groupes et volumes logiques

Avec des partitions classiques, agrandir / quand il est plein oblige à déplacer les partitions suivantes, voire à réinstaller. LVM insère une couche entre les disques et les systèmes de fichiers :

  • un volume physique (PV, physical volume) est un disque ou une partition donnée à LVM (/dev/sda3, /dev/sdb) ;
  • un groupe de volumes (VG, volume group) réunit un ou plusieurs PV en une seule réserve d'espace (srv-web-vg) ;
  • un volume logique (LV, logical volume) est découpé dans le groupe et reçoit un système de fichiers (root, home), comme une partition, mais redimensionnable et pouvant s'étendre sur plusieurs disques.
Volumes logiques (LV) : un système de fichiers chacunroot/swap_1[SWAP]home/homelogs/var/logespace libredu groupelvextend -rGroupe de volumes (VG)srv-web-vgune réserve de 48 GioroothomelogslibreVolumes physiques (PV)/dev/sda3partition du disque sda : 18 Gio/dev/sdcdisque ajouté : 30 GioOrdre : pvcreate, puis vgcreate (ou vgextend), puis lvcreate
Disques et partitions deviennent des PV, réunis dans un VG, où l'on découpe des LV redimensionnables
NiveauCréerAfficherAgrandir
Volume physiquepvcreate /dev/sdcpvs, pvdisplaypvresize /dev/sda3 (après agrandissement de la partition)
Groupe de volumesvgcreate vg_donnees /dev/sdcvgs, vgdisplayvgextend srv-web-vg /dev/sdc
Volume logiquelvcreate -n logs -L 8G srv-web-vglvs, lvdisplaylvextend -r -L +5G srv-web-vg/root
console
clambert@srv-web:~$ sudo vgs
  VG         #PV #LV #SN Attr   VSize   VFree
  srv-web-vg   1   3   0 wz--n- <18,07g      0
clambert@srv-web:~$ sudo lvs
  LV     VG         Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home   srv-web-vg -wi-ao----  10,45g
  root   srv-web-vg -wi-ao----   5,62g
  swap_1 srv-web-vg -wi-ao----   2,00g

La colonne VFree est la plus importante : ici, l'installeur a donné tout l'espace aux volumes, il ne reste rien dans le groupe.

Agrandir un volume logique

/var/log de srv-web se remplit. On ajoute un disque de 30 Gio (sdc) dans Proxmox, on le donne au groupe, et on crée un volume dédié aux journaux :

bash
sudo pvcreate /dev/sdc
sudo vgextend srv-web-vg /dev/sdc
sudo lvcreate -n logs -L 10G srv-web-vg
sudo mkfs.ext4 -L logs /dev/srv-web-vg/logs

Puis on déplace le contenu de /var/log sur le nouveau volume, depuis une fenêtre de maintenance (les services écrivent dans /var/log en permanence) : monter le volume ailleurs, copier avec cp -a, ajouter la ligne /dev/mapper/srv--web--vg-logs /var/log ext4 defaults,nodev,nosuid,noexec 0 2 à /etc/fstab, redémarrer, vérifier.

Pour agrandir un volume existant, une seule commande suffit tant que le groupe a de l'espace libre :

bash
sudo lvextend -r -L +5G srv-web-vg/root       # ajoute 5 Gio à / et agrandit son système de fichiers
sudo lvextend -r -l +100%FREE srv-web-vg/home  # donne tout l'espace libre restant à /home
df -h / /home

L'option -r (--resizefs) agrandit le système de fichiers dans la foulée, à chaud, sans démonter : ext4 et XFS s'agrandissent pendant que le serveur travaille. Sans -r, le volume est plus grand mais df n'affiche rien de plus, tant qu'on n'a pas lancé resize2fs (ext4) ou xfs_growfs (XFS).

Agrandir le disque virtuel lui-même. Si l'hyperviseur permet d'agrandir le disque (sda de 20 à 40 Gio, dans Proxmox Hardware > Hard Disk > Disk Action > Resize), il faut ensuite agrandir la partition qui porte le PV, puis le PV, puis le LV :

bash
sudo apt install cloud-guest-utils     # fournit growpart
sudo growpart /dev/sda 3               # agrandit la partition 3 jusqu'à la fin du disque
sudo pvresize /dev/sda3                # le PV prend la nouvelle taille
sudo lvextend -r -l +100%FREE srv-web-vg/root

Les instantanés LVM. sudo lvcreate -s -n root-avant-maj -L 2G srv-web-vg/root fige l'état de / avant une opération risquée ; sudo lvconvert --merge srv-web-vg/root-avant-maj revient en arrière au redémarrage suivant, sudo lvremove le supprime si tout s'est bien passé. Un instantané s'appuie sur le volume d'origine et grossit à chaque modification : ce n'est pas une sauvegarde, et il doit être supprimé vite. Sur une VM, l'instantané de l'hyperviseur rend le même service plus simplement.

Exercices

Exercice 1 sur 3 Lire lsblk Réussi À revoir

Sur srv-journaux, lsblk affiche :

text
NAME                         SIZE TYPE MOUNTPOINTS
sda                           20G disk
├─sda1                       976M part /boot/efi
├─sda2                       977M part /boot
└─sda3                        18G part
  ├─srv--journaux--vg-root    17G lvm  /
  └─srv--journaux--vg-swap_1   1G lvm  [SWAP]
sdb                          100G disk
sdc                          100G disk
  1. Comment s'appelle le groupe de volumes, et combien de volumes logiques contient-il ?
  2. Quels disques ne sont pas encore utilisés ?
  3. Où seront écrits les journaux reçus des autres machines, si l'on ne change rien ?
Voir la réponseMasquer la réponse de l'exercice 1
  1. srv-journaux-vg (tirets doublés dans les noms du device mapper) ; deux volumes logiques, root et swap_1.
  2. sdb et sdc, de 100 Gio chacun : aucune partition, aucun point de montage.
  3. Sur /, puisque /srv n'a pas de volume à lui : les journaux reçus rempliraient le système de fichiers racine, ce qui finit par bloquer tout le serveur. Il faut leur donner un volume dédié, sur les deux disques libres (chapitre 14).

Tu avais trouvé ?

Exercice 2 sur 3 Ajouter un disque de données Réussi À revoir

Écris la suite de commandes pour : créer une table GPT et une partition sur tout /dev/sdb ; la formater en ext4 avec l'étiquette archives ; la monter de façon permanente sur /srv/archives, sans bloquer le démarrage si le disque est absent, sans exécution possible de programmes ; vérifier.

Voir la réponseMasquer la réponse de l'exercice 2
bash
lsblk                                                    # vérifier que sdb est bien le disque vierge
sudo parted /dev/sdb --script mklabel gpt mkpart archives ext4 0% 100%
sudo mkfs.ext4 -L archives /dev/sdb1
sudo blkid /dev/sdb1                                     # relever l'UUID
sudo mkdir -p /srv/archives

Ligne ajoutée à /etc/fstab (avec l'UUID relevé) :

text
UUID=<uuid-de-sdb1>  /srv/archives  ext4  defaults,nofail,noexec,nodev,nosuid  0  2

Puis sudo findmnt --verify, sudo systemctl daemon-reload, sudo mount -a, et df -h /srv/archives doit afficher le nouveau système de fichiers. On peut aussi écrire LABEL=archives à la place de l'UUID.

Tu avais trouvé ?

Exercice 3 sur 3 Un volume plein Réussi À revoir

df -h / affiche /dev/mapper/srv--web--vg-root 5,5G 5,5G 0 100% /, et sudo vgs affiche VFree 12,00g.

  1. Peut-on agrandir / sans arrêter le serveur ?
  2. Écris la commande qui ajoute 4 Gio à /.
  3. Que se passe-t-il si l'on oublie l'option -r ?
Voir la réponseMasquer la réponse de l'exercice 3
  1. Oui : le groupe a 12 Gio libres, et ext4 s'agrandit à chaud.
  2. sudo lvextend -r -L +4G srv-web-vg/root, puis df -h / pour vérifier.
  3. Le volume logique passe à 9,5 Gio environ, mais le système de fichiers garde son ancienne taille : df affiche toujours 100 %. Il faut alors lancer sudo resize2fs /dev/srv-web-vg/root.

Agrandir ne règle pas la cause : cherche ce qui a rempli / (sudo du -xh --max-depth=1 / | sort -h), souvent des journaux ou des sauvegardes oubliées.

Tu avais trouvé ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : RAID logiciel avec mdadm et quotas disqueRevoir le sommaire du cours