Pour redimensionner la partition LVM2, il faut exécuter les 2 commandes suivantes:
# lvextend -L+1G /dev/myvg/homevol
# resize2fs /dev/myvg/homevol
Cependant, lorsque j'exécute lvextend
, je constate que les modifications sont déjà appliquées à la partition (comme indiqué dans Gnome Disks). Alors pourquoi dois-je encore faire resize2fs
?
La commande lvextend
(sans la --resizefs
option) ne fait que les arrangements côté LVM pour agrandir le périphérique bloc qui est le volume logique. Quel que soit le type de système de fichiers (ou même s'il existe ou non un système de fichiers) sur le LV, ces opérations sont toujours similaires.
Si le LV contient un système de fichiers ext2/3/4, l'étape suivante consiste à mettre à jour les métadonnées du système de fichiers pour que le système de fichiers sache qu'il a le plus d'espace disponible et à créer/étendre les structures de métadonnées nécessaires pour gérer l'espace ajouté. Dans le cas des systèmes de fichiers ext2/3/4, cela implique au moins:
Cette partie est spécifique au type de système de fichiers, bien que les types de système de fichiers ext2/3/4 soient suffisamment similaires pour pouvoir tous être redimensionnés avec un seul resize2fs
outil. Pour XFS, les systèmes de fichiers, vous utiliseriez un xfs_growfs
outil à la place. D'autres systèmes de fichiers peuvent avoir leurs propres outils d'extension. Et si le volume logique ne contient pas de système de fichiers mais plutôt quelque chose comme une base de données "brute" ou un volume Oracle ASM, une autre procédure devra être appliquée.
Chaque système de fichiers a un fonctionnement interne différent et les conditions d'extension d'un système de fichiers seront donc différentes pour chacun. Il a fallu un certain temps jusqu'à ce qu'une API commune soit conçue pour l'extension du système de fichiers; qui a permis de mettre en œuvre le fsadm resize
, qui fournit une syntaxe unifiée pour étendre plusieurs types de systèmes de fichiers. Le --resizefs
option de lvextend
utilise simplement le fsadm resize
commande.
En bref: après lvextend
, les outils de niveau LVM tels que lvs
, vgs
, lvdisplay
et vgdisplay
verront la taille mise à jour , mais le système de fichiers et les outils qui y fonctionnent, comme df
, ne le verront pas encore.
La couche LVM est juste un conteneur pour le système de fichiers à l'intérieur. Vous pouvez dire à lvextend
de redimensionner le système de fichiers dans le volume logique sans avoir à exécuter un resize2fs
en ajoutant le -r
(ou --resizefs
) option:
lvextend -r ...
Parce que les systèmes de fichiers et les volumes logiques sont des abstractions différentes. Un volume est un morceau de disque (comme une partition) - ou du moins, l'équivalent "virtuel". C'est juste un appareil bloc. Un système de fichiers est une structure qui va à l'intérieur de celui-ci (ou, en plus, si vous préférez) et qui est utilisée pour fournir un mappage entre les fichiers (et les répertoires, etc.) sur ce périphérique. Sans pour autant resize2fs
, la partition est plus grande, mais le système de fichiers ne profite pas de l'espace disponible.
Vous pouvez réellement créer un système de fichiers initialement qui ne prend pas toute la partition. Du mke2fs
page de manuel:
La taille du système de fichiers est spécifiée par fs-size. Si fs-size n'a pas de suffixe, il est interprété comme une puissance de deux kilo-octets, sauf si l'option -b blocksize est spécifiée, auquel cas fs-size est interprété comme le nombre de blocs de taille de bloc. Si la taille fs est suffixée par 'k', 'm', 'g', 't' (majuscule ou minuscule), alors elle est interprétée en puissance de deux kilo-octets, mégaoctets, gigaoctets, téraoctets, etc. Si la taille fs est omise, mke2fs créera le système de fichiers en fonction de la taille du périphérique.
Comme vous pouvez le voir, la valeur par défaut est de remplir la partition, et il n'y a généralement aucune raison de faire autrement - mais vous pouvez le faire si vous le souhaitez.
Notez que lorsque lvextend
a une option --resizefs
(ou juste -r
) qui prend en charge la croissance du système de fichiers après l'extension du volume sans avoir à exécuter une commande distincte.
Le resize2fs
force le système de fichiers fs
à se développer ou à se réduire pour occuper le nouvel espace produit par la commande lvextend
. Les processus:
with fs:
-- shrink --> 1. shrink fs 2. shrink volume
-- expand --> 1. expand volume, 2. expand fs