Agrandir un filesystem sous Linux : LVM, ext4 et XFS
Un système de fichiers qui approche des 85 % de remplissage pose une question simple : faut-il faire de la place, ou en donner davantage ? Quand le nettoyage ne suffit pas, parce que les données sont légitimes et continuent de croître, il faut agrandir le système de fichiers. Sous Linux, avec LVM, l’opération se fait le plus souvent à chaud, en une seule commande, sans arrêter les applications.
Cet article explique comment un système de fichiers est construit, comment vérifier l’espace disponible à chaque niveau, et comment l’agrandir selon les situations : espace libre dans le groupe de volumes, nouveau disque, disque virtuel agrandi, ou serveur sans LVM.
Les commandes de diagnostic présentées ici sont en lecture seule. Les commandes d’agrandissement modifient les disques : sur un serveur de production, assurez-vous d’avoir une sauvegarde récente et vérifiez chaque nom de volume avant de valider.
Du disque au point de montage
Entre le disque physique et le répertoire dans lequel une application écrit, il y a plusieurs couches. Les connaître permet de savoir à quel niveau manque l’espace.
- Le disque : physique ou virtuel, par exemple
/dev/sdb; - la partition, facultative : une portion du disque, par exemple
/dev/sda2; - le système de fichiers (filesystem) : la structure qui organise les fichiers et répertoires. Sous Linux, les plus courants sont ext4 et XFS, ce dernier étant le choix par défaut des distributions Red Hat ;
- le point de montage : le répertoire par lequel on accède au système de fichiers, par exemple
/var/lib/containers.
Sur la plupart des serveurs, une couche supplémentaire s’intercale entre les disques et les systèmes de fichiers : LVM.
LVM en trois notions
LVM (Logical Volume Manager) regroupe l’espace de un ou plusieurs disques dans une réserve commune, puis le découpe en volumes logiques de taille modifiable. C’est ce qui rend l’agrandissement si simple.
| Niveau | Abréviation | Rôle | Commande de consultation |
|---|---|---|---|
| Volume physique | PV | Un disque ou une partition confié à LVM | pvs |
| Groupe de volumes | VG | La réserve d’espace formée par un ou plusieurs PV | vgs |
| Volume logique | LV | Une portion du VG, qui porte un système de fichiers | lvs |
Un volume logique apparaît sous deux noms équivalents : /dev/datavg/containerslv et /dev/mapper/datavg-containerslv. C’est ce second nom que l’on voit dans le résultat de df.
Étape 1 : établir le diagnostic
Commencez par identifier le système de fichiers concerné, son type et le volume qui le porte :
df -hT /var/lib/containers
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/datavg-containerslv xfs 100G 85G 16G 85% /var/lib/containers
Le nom /dev/mapper/datavg-containerslv indique un volume logique containerslv dans le groupe datavg. Il faut ensuite savoir s’il reste de la place dans ce groupe :
vgs datavg
lvs datavg
VG #PV #LV #SN Attr VSize VFree
datavg 1 14 0 wz--n- <350.00g <126.00g
La colonne VFree est la clé : ici, 126 Go ne sont attribués à aucun volume logique. On peut donc agrandir le volume sans toucher aux disques.
Pour une vue d’ensemble de l’empilement des disques, partitions et volumes, lsblk est le plus lisible :
lsblk -f
Cas 1 : il reste de l’espace dans le groupe de volumes
C’est le cas le plus fréquent, et le plus simple. Une seule commande agrandit le volume logique et le système de fichiers qu’il porte :
lvextend -r -L +50G /dev/datavg/containerslv
-L +50Gajoute 50 Go à la taille actuelle. Le signe+est essentiel, nous y reviendrons ;-r(--resizefs) agrandit le système de fichiers dans la foulée, quel que soit son type. Sans cette option, le volume grandit mais le système de fichiers garde son ancienne taille, etdfn’affiche aucun changement.
Pour attribuer tout l’espace libre restant, on raisonne en pourcentage avec -l minuscule :
lvextend -r -l +100%FREE /dev/datavg/containerslv
Il est cependant rarement judicieux de vider complètement le groupe : garder une marge permet de réagir à la prochaine alerte sur un autre volume, ou de créer un instantané avant une opération délicate.
Vérifiez le résultat :
df -hT /var/lib/containers
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/datavg-containerslv xfs 150G 85G 66G 57% /var/lib/containers
L’opération se fait à chaud : le système de fichiers reste monté, les applications continuent d’écrire.
La même chose en deux temps
Si vous avez oublié -r, ou si vous préférez maîtriser chaque étape, on agrandit d’abord le volume, puis le système de fichiers avec l’outil propre à son type :
lvextend -L +50G /dev/datavg/containerslvSystème de fichiers XFS : on désigne le point de montage xfs_growfs /var/lib/containers Système de fichiers ext4 : on désigne le volumeresize2fs /dev/datavg/containerslv
Sans indication de taille, xfs_growfs et resize2fs étendent le système de fichiers à toute la taille du volume.
Cas 2 : le groupe de volumes est plein
Si VFree est à zéro ou insuffisant, il faut d’abord donner de l’espace au groupe. Deux possibilités.
Ajouter un nouveau disque
Après l’ajout d’un disque, physique ou virtuel, repérez-le avec lsblk : c’est celui qui n’a ni partition ni point de montage. Puis confiez-le à LVM et ajoutez-le au groupe :
pvcreate /dev/sdc
vgextend datavg /dev/sdc
vgs datavg
L’espace du nouveau disque apparaît dans VFree, et l’on revient au cas 1. Vérifiez deux fois le nom du disque avant pvcreate : sur un disque contenant des données, la commande les rendrait inaccessibles.
Agrandir un disque virtuel existant
Sur une machine virtuelle, il est souvent plus simple d’agrandir le disque depuis l’hyperviseur. Il faut alors faire constater sa nouvelle taille au système, puis à LVM :
# Faire relire la taille du disque par le noyau echo 1 > /sys/class/block/sdb/device/rescanSi le disque entier est un volume physiquepvresize /dev/sdb
Si le volume physique est une partition, par exemple /dev/sda2, il faut d’abord agrandir la partition. La commande growpart, du paquet cloud-utils-growpart, le fait sans démontage :
growpart /dev/sda 2
pvresize /dev/sda2
Notez l’espace entre /dev/sda et 2 : growpart attend le disque, puis le numéro de la partition.
Cas 3 : un serveur sans LVM
Quand le système de fichiers repose directement sur une partition, la démarche est la même, sans la couche LVM : agrandir le disque, puis la partition, puis le système de fichiers.
growpart /dev/sda 1XFS xfs_growfs / ext4resize2fs /dev/sda1
La limite apparaît quand la partition à agrandir n’est pas la dernière du disque : une autre partition lui barre la route, et il faut alors ajouter un disque et déplacer des données. C’est précisément ce que LVM évite.
Réduire un système de fichiers : à éviter
L’opération inverse est beaucoup plus délicate.
- XFS ne peut pas être réduit. La seule solution est de sauvegarder les données, de recréer un volume plus petit et de restaurer ;
- ext4 peut être réduit, mais seulement démonté, donc avec une interruption de service, après une vérification complète par
e2fsck -f.
D’où une règle pratique : allouez par petites étapes. Il est facile d’ajouter 50 Go demain ; il est difficile de reprendre 200 Go attribués trop généreusement aujourd’hui.
Les pièges à connaître
Oublier le signe +. -L +50G ajoute 50 Go ; -L 50G fixe la taille totale à 50 Go. Avec lvextend, une taille inférieure à l’actuelle est refusée, ce qui protège. Mais avec lvresize, qui sait aussi réduire, la même faute de frappe réduirait le volume en dessous de ses données.
Oublier -r. Le volume grandit, le système de fichiers non : lvs montre la nouvelle taille, df l’ancienne. Rattrapez avec xfs_growfs ou resize2fs.
Confondre les unités. Pour LVM, G désigne des gibioctets (1 024³ octets). Les tailles affichées par df -h suivent la même convention. Les écarts avec la taille annoncée par un fournisseur, en gigaoctets décimaux, viennent souvent de là.
Agrandir au lieu de comprendre. Un système de fichiers qui se remplit régulièrement a souvent une cause : journaux sans rotation, images de conteneurs jamais nettoyées, exports oubliés. Avant d’agrandir, vérifiez ce qui occupe l’espace ; c’est l’objet de notre article sur les gros fichiers qui saturent un serveur. Pour un répertoire de conteneurs comme /var/lib/containers, un podman system df indique la part des images inutilisées, qu’un nettoyage peut libérer.
Les inodes d’ext4. Sur ext4, le nombre maximal de fichiers est fixé à la création. Agrandir le système de fichiers en ajoute proportionnellement, mais si le problème vient de millions de petits fichiers, df -i le révélera avant que l’espace ne soit épuisé. XFS alloue ses inodes dynamiquement et n’a pas cette limite.
Et sur AIX ?
AIX intègre la gestion de volumes depuis l’origine, avec un vocabulaire proche : volumes physiques, groupes de volumes, volumes logiques. Pour un système de fichiers JFS2, une seule commande agrandit à la fois le volume logique et le système de fichiers, à chaud :
# Espace libre dans le groupe de volumes lsvg datavgAjouter 50 Go au système de fichierschfs -a size=+50G /data
Si le groupe est plein, extendvg y ajoute un disque, comme vgextend sous Linux.
La procédure complète en résumé
df -hT: quel système de fichiers, quel type, quel volume ;vgs: reste-t-il de l’espace libre dans le groupe ?- si non : ajouter un disque (
pvcreate,vgextend) ou agrandir l’existant (growpart,pvresize) ; lvextend -r -L +NG: agrandir le volume et le système de fichiers ;df -hT: vérifier.
En résumé
- un système de fichiers repose sur un volume logique, découpé dans un groupe de volumes, formé de volumes physiques ;
- la colonne
VFreedevgsdit si l’on peut agrandir sans toucher aux disques ; lvextend -r -L +50Gagrandit volume et système de fichiers, à chaud, en une commande ;- sans
-r, il faut finir avecxfs_growfs(XFS) ouresize2fs(ext4) ; - groupe plein :
pvcreateetvgextendpour un nouveau disque,growpartetpvresizepour un disque agrandi ; - XFS ne se réduit pas, ext4 seulement démonté : allouez par petites étapes ;
- sur AIX,
chfs -a size=+50Gfait tout en une commande.
Agrandir un système de fichiers est devenu une opération banale, presque sans risque quand LVM est en place. Ce qui demande du discernement, c’est la décision qui la précède : donner de l’espace ou en faire, et combien en garder en réserve pour la prochaine fois.
📖 À lire aussi