web-dev-qa-db-fra.com

Pourquoi dois-je faire resize2fs après lvextend?

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?

10
Rufus

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:

  • création de nouveaux inodes dans l'espace ajouté
  • étendre les structures de données d'allocation de blocs afin que le système de fichiers puisse dire si un bloc de l'espace ajouté est en cours d'utilisation ou libre
  • déplacer éventuellement certains blocs de données s'ils gênent l'extension de la structure de données mentionnée précédemment

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.

19
telcoM

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 ...
11
JRFerguson

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.

4
mattdm

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
0
George Udosen