Tag Archive for LVM

Commandes pratiques pour gérer les volumes logiques (LVM) sous Linux/Unix

Introduction

LVM pour Logical Volume Management ou gestion de volumes logiques (in french), est un système de gestion de volumes logiques pour les plate-formes Linux/Unix. Il est utilisé principalement pour apporter de la souplesse dans la gestion des espaces de stockage. Le principe est de dé-corréler l’organisation des systèmes de fichiers (types, tailles, point de montage, etc.) de l’organisation physique des disques matériels et autres dispositifs de stockage par une couche de structure en volumes logiques par dessus les espaces physiques alloué.

Il est ainsi possible d’assembler plusieurs disques afin de disposer d’une seule partition logique hébergeant toute l’arborescence du système de fichier. Il est également possible de modifier la taille des volumes alloué pour chaque point de montage du système (root, /home, /usr, /var, /tmp, etc. ) afin de l’adapter à l’évolution du besoin sans être obliger de tout sauvegarder / reconfigurer / formater / restaurer, et ceci indépendamment de la taille des partitions et disques physiques utilisés.

Cela permet également d’apporter une couche logique très commode pour gérer d’une façon transparente et souple les nouveaux dispositifs de stockage de données qui se démocratise de plus en plus dans les salles machines et autres datacenters (SAN avec ou sans Multipath, iSCSI, etc.).

Les outils

J’utiliserais LVM2 qui est pré-installé dans mon système sous OpenSUSE Linux en version 11.3. Mais cela ne devrais pas causer de problèmes aux utilisateurs des autres distributions.

Je ne décrirais pas ici les phases d’installation des outils LVM2 ni de tout autre système de gestion de volumes logiques compatible et considère donc les outils comme disponibles.

Néanmoins, n’hésitez pas à me signaler ici tout problème afin d’ajuster le contenu de ce post pour être utile au plus grand nombre d’entre vous.

Définitions

Volume physique (Physical Volume : PV) : disque, partition physique ou volume RAID qui servira de support de stockage.

Groupe de volumes (Volume Group : VG) : les volumes physiques sont organisés au sein d’un ou plusieurs groupes de volumes. Chaque volume physique ne peut être que dans un seul groupe.

Volume logique (Logical  Volume : VG) : un groupe de volume une fois créé et constitué d’un ou de plusieurs volumes physiques peut être utilisé pour créer un ou plusieurs volumes logiques qui seront accessibles comme des partitions « classiques », qu’il sera possible de formater avec le système de fichier que l’on souhaite (Ext2, Ext3, Ext4, Fat32, NTFS, RaiserFS, JFS, XFS, etc.), et d’associer à un point de montage.

Visualisation de l’état des groupes de volumes

Commande : vgdisplay

monlinux:~ # vgdisplay
--- Volume group ---
VG Name               vg1
System ID
Format                lvm2
Metadata Areas        2
Metadata Sequence No  12
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                1
Open LV               1
Max PV                0
Cur PV                2
Act PV                2
VG Size               200.00 GiB
PE Size               4.00 MiB
Total PE              51200
Alloc PE / Size       51200 / 200.00 GiB
Free  PE / Size       0 / 0
VG UUID               41GILT-UW8P-Li19-SyRW-ohUF-Q2N1-Sz1Tnq


Remplacement d’un volume physique

Mise en situation : un groupe de volumes vg1 (/dev/vg1), constitué de deux volumes physiques /dev/sda1 et /dev/sdb1 et de un ou plusieurs volumes logiques /dev/vg1/lv1, /dev/vg1/lv2, etc.

Disons, pour notre exemple que le disque B (/dev/sdb), contenant la partition /dev/sdb1, a besoin d’être remplacé car il montre des signes de faiblesse ou pour le réaffecter à un autre usage. Pour cela nous avons arrêté notre système afin d’installer le nouveau disque C. Après redémarrage, nous avons « partitioner » le nouveau disque /dev/sdc en prenant modèle sur le disque B ou selon une nouvelle organisation qui répond à notre nouveau besoin. Supposant que /dev/sdc2 est la partition du disque C qui a vocation à remplacer celle du disque B (/dev/sdb1) au sein du groupe de volumes vg1, nous l’avons idéalement marquée de type « Linux LVM » (code 8E).

Etape 1 : Préparer le volume physique. La commande pvcreate sert à créer un descripteur de groupe de volumes au début de la partition.

monlinux:~ # pvcreate /dev/sdc2



Etape 2 : Ajouter le volume physique au groupe de volumes par la commande vgextend.

monlinux:~ # vgextend vg1 /dev/sdc2



Etape 3 : Déplacer les données pour libérer le volume physique avec la commande pvmove. Cette commande travaille « à chaud » et intelligemment pour déplacer toutes les données des volumes logiques se trouvant sur le volume physique à libérer, vers les autres volumes physiques disposant d’espace libre. Ceci suppose que l’espace libre disponible est largement suffisant. (C’est clair non ?)

Attention, ce travail peut prendre de quelques minutes à plusieurs heures, selon la quantité de données (photos, mp3, divx, etc. ;-) à déplacer.

monlinux:~ # pvmove /dev/sdb1
/dev/sdb1: Moved: 0.0%
/dev/sdb1: Moved: 0.3%
/dev/sdb1: Moved: 0.7%
/dev/sdb1: Moved: 1.0%

...

/dev/sdb1: Moved: 99.6%
/dev/sdb1: Moved: 99.8%
/dev/sdb1: Moved: 100.0%
/dev/sdb1: Moved: 100.0%



Etape 4 : Retirer le volume physique du groupe de volume par la commande vgreduce. A partir de ce moment (et si aucune autre partition du disque B n’est en utilisation) le disque B peut être retirer du système ou être réaffecté à d’autres usages.

monlinux:~ # vgreduce vg1 /dev/sdb1
Removed "/dev/sdb1" from volume group "vg1"



Etape 5 : Visualiser les informations sur les volumes logiques avec la commande lvdisplay.

monlinux:~ # lvdisplay
  --- Logical volume ---
  LV Name                /dev/vg1/lv-home
  VG Name                vg1
  LV UUID                9tnijT-md5T-8cvz-SOpT-KcGM-gtTJ-kNY8r3
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                150,00 GiB
  Current LE             5600
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Name                /dev/vg1/lv-root
  VG Name                vg1
  LV UUID                6U8UO0-PHWK-3dP5-0okf-XkzV-49kI-K5hzpp
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                50,00 GiB
  Current LE             1600
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1



Etape 6 : Etendre un volume logique pour profiter d’une éventuelle capacité supplémentaire, obtenue suite à l’ajout d’un volume physique ou le remplacement d’un volume physique par un autre plus grand.

L’extension n’est pas obligatoire, et l’espace de stockage additionnel peut être gardé comme espace de sécurité, à utiliser pour étendre dans l’avenir, un volume logique qui viendrait à manquer de place.

Utiliser pour cela la commande lvextend.

monlinux:~ # lvextend -L200G /dev/vg1/lv-home
(L200G pour passer à 200Go, L+50G pour ajouter 50Go à la taille actuelle)

Etape 7 : Redimensionner le système de fichier pour l’adapter au nouvel espace logique offert. En effet, le changement de taille du volume logique ne se répercute pas automatiquement sur l’espace de stockage et les structures du système de fichier hébergé.

La commande resize2fs prend en charge ce travail, à chaud pour les systèmes de fichier : Ext2, Ext3 et Ext4.

monlinux:~ # resize2fs -p /dev/vg1/lv-home

Références :
LVM HOWTO