LVM2 Debian

LVM2 sous Debian GNU/linux

Introduction

Ce document a été rédigé dans l'espoir qu'il soit utile mais SANS AUCUNES GARANTIES.
Le lecteur engage sa propre responsabilité et ne pourra en aucun cas se retourner vers l'auteur ou MayLUG en cas de problèmes.
Il est rappelé au lecteur qu'il est le seul responsable de son système, de ses données ou de celle de son employeur.
Il est conseillé de faire des sauvegardes et de s'assurer qu'elles fonctionnent avant d'entreprendre des modifications profondes de son système.
Par ailleurs, le lecteur serait bien avisé de lire les pages de manuel des commandes qu'il exécutera sur son système pour être sûre de ce qu'elles impliquent.

LVM2, Logical Volume Manager version 2, est un gestionnaire de volumes logiques pour les systèmes d'exploitation de type Unix. En pratique, LVM2 ajoute une couche entre le partitionnement des supports physiques et le système de fichiers du système d'exploitation. Une suite d'outils complets issus du paquet LVM2 apporte une grande souplesse dans la gestion de l'espace disque et des systèmes de fichiers (modification de la taille des partitions à la volée, ajouter/remplacer un disque dur sans modifier le fichier /etc/fstab, snapshots).

Avec le passage sous LVM2 il y a 3 principes à intégrer:

  • PV, les volumes physiques, qui peuvent être des partitions (primaires ou logiques), des disques entiers ou même des volumes RAID.
  • VG, les groupes de volumes, qui sont issus de l’agrégation des PV et d'où sont créés les LV.
  • LV, les volumes logiques, sur lesquels seront créés les futurs systèmes de fichiers du système d'exploitation.

schéma

ce schéma est issu de celui de Erik Bågfors, publié sur la liste de diffusion linux-lvm

hda1   hdc1   (PV)                        
       \   /                                                                    
        \ /                                                                     
      diskvg        (VG)                                                       
      /  |  \                                                                  
     /   |   \                                                                 
 usrlv rootlv varlv (LV)
   |      |     |                                                              
ext2  reiserfs  xfs (filesystems)
   |      |      |
 /usr     /     /var

En bref

  1. # pvcreate /dev/sdc1
  2. # vgcreate maylug_vg /dev/sdc1
  3. # vgchange -a y maylug_vg
  4. # lvcreate -L10000 -ndata1_lv maylug_vg
  5. # vgdisplay maylug_vg | grep “Total PE”
  6. # lvcreate -l 15779 maylug_vg -ndata3_lv
  7. # mkfs.ext4 /dev/maylug_vg/data1_lv
  8. # mount /dev/maylug_vg/data1_lv /home/user/monrepertoire

and voila ;)

Let's go

Installation

root@maylug:/root# aptitude install lvm2
   ou
user@maylug:/home/user$ sudo aptitude install lvm2

Création de volumes physiques

Le plus commun est d'utiliser une partition d'un disque dur pour créer un PV, bien évidemment cette partition peut faire toute la taille du disque dur.

la partition nouvellement créée ne nécessite pas d'y construire un système de fichiers !

Prenons l'exemple d'un disque neuf, détecté sur /dev/sdc, dans lequel nous avons créé une partition primaire dédiée à LVM2, /dev/sdc1.

Utilisons l'utilitaire pvcreate(8) pour attacher cette partition primaire comme volume physique (PV):

root@maylug:/root# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created

Gestion des PV

  • pvscan(8) permet de chercher puis de lister les volumes physiques disponibles:
root@maylug:/# pvscan
  PV /dev/sdc1   lvm2 [74,33 GiB]
  Total: 2 [74,33 GiB] / in use: 0 / in no VG: 1 [74,33 GiB]
  • pvs(8) permet de récupérer des infos sur le(s) PV:
root@maylug:/# pvs
  PV   VG          Fmt  Attr PSize  PFree 
  /dev/sdc1              lvm2 a-   74,33g 74,33g
  • pvdisplay(8) rapporte lui aussi des infos sur le(s) PV, mais de façon plus complète:
root@renegade:/home/slaurent# pvdisplay
 "/dev/sdc1" is a new physical volume of "74,33 GiB"
 --- NEW Physical volume ---
 PV Name   /dev/sdc1
 VG Name               
 PV Size               74,33 GiB
 Allocatable           NO
 PE Size               0   
 Total PE              0
 Free PE               0
 Allocated PE          0
 PV UUID               oEOFcK-0vGX-p7F0-TBNm-mxqR-2uHl-yIbQ2V
  • pvremove(8) permet de détacher un volume physique précédemment utilisé par un VG
  • pvmove(8) permet de déplacer le contenu d'un PV vers l'espace libre des autres PV, ceci permettra par la suite de détacher le PV concerné.
  • pvchange(8) permet de changer le statut d'un PV; dans le cas d'un disque dur défaillant on changera le statut du PV associé pour y interdire l'écriture de nouvelle données en attendant son remplacement.

Création d'un groupe de volumes

Utilisons à présent l'utilitaire vgcreate(8) pour créer un groupe de volumes (VG) à partir de PV disponibles, un seul dans notre exemple: /dev/sdc1.

root@maylug:/# vgcreate maylug_vg /dev/sdc1
  Volume group "maylug_vg" successfully created

Si nous disposons de plusieurs PV alors c'est très simple:

root@maylug:/# vgcreate maylug_vg /dev/sda2 /dev/sdb1 /dev/sdc1
  Volume group "maylug_vg" successfully created

Activation du nouveau groupe de volumes

Le script vgchange(8) nous permet d'utiliser notre nouveau groupe de volume (VG) immédiatement sans avoir à rebooter la machine pour une prise en compte par le noyau Linux:

root@maylug:/# vgchange -a y maylug_vg
  0 logical volume(s) in volume group "maylug_vg" now active

Gestion des VG

  • vgcfgbackup(8)
  • vgcfgrestore(8)
  • vgck(8)
  • vgconvert(8)
  • vgdisplay(8) rapporte des infos précieuses sur l'état des VG:
root@maylug:/# vgdisplay 
 --- Volume group ---
 VG Name   maylug_vg
 System ID             
 Format                lvm2
 Metadata Areas        1
 Metadata Sequence No  5
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                3
 Open LV               3
 Max PV                0
 Cur PV                1
 Act PV                1
 VG Size               74,33 GiB
 PE Size               4,00 MiB
 Total PE              19029
 Alloc PE / Size       19029 / 74,33 GiB
 Free  PE / Size       0 / 0   
 VG UUID               xs3ZD7-uVcT-URTt-Nu13-YsdX-Z6zQ-YWhY4l
  • vgexport(8)
  • vgextend(8)
  • vgimport(8)
  • vgimportclone(8)
  • vgmerge(8)
  • vgmknodes(8)
  • vgreduce(8)
  • vgremove(8)
  • vgrename(8)
  • vgs(8)
  • vgscan(8)
  • vgsplit(8)

Création de volumes logiques

Il ne reste plus qu'à jouer du lvcreate(8) pour créer nos volumes logiques correspondant aux points de montages souhaités:


Commençons par tailler un volume de 10000MB destiné à recevoir la partition /data1 :

root@maylug:/# lvcreate -L10000 -ndata1_lv maylug_vg

Puis un volume de 3000MB pour la partition /data2:

root@maylug:/# lvcreate -L3000 -ndata2_lv maylug_vg

Et enfin un volume de l'ensemble de l'espace disponible pour /data3. Il faut préalablement savoir combien il nous reste d'espace disponible:

root@maylug:/# vgdisplay maylug_vg | grep "Total PE"
 Total PE   15779

Puis créer le volume en fonction:

root@maylug:/# lvcreate -l 15779 maylug_vg -ndata3_lv

Une fois nos LV construits nous y créons des systèmes de fichiers, ext4 sur data1 pour l'exemple:

root@maylug:/# mkfs.ext4 /dev/maylug_vg/data1_lv 
mke2fs 1.41.12 (17-May-2010)
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
« Stride » = 0 blocs, « Stripe width » = 0 blocs
640848 i-noeuds, 2560000 blocs
128000 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=2621440000
79 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
8112 i-noeuds par groupe
Superblocs de secours stockés sur les blocs : 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Écriture des tables d'i-noeuds : complété   
Création du journal (32768 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Le système de fichiers sera automatiquement vérifié tous les 27 montages ou
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i
pour écraser la valeur.

Et enfin, il ne reste plus qu'à venir modifier le fichier /etc/fstab pour que nos tout nouveaux LV soient montés au boot de la machine:

/dev/maylug_vg/data1_lv	/home/user/docs		ext4    defaults   0       2
/dev/maylug_vg/data2_lv	/home/user/bank		ext4    defaults      0       2
/dev/maylug_vg/data3_lv	/home/user/mp3		ext4    defaults      0       2

Gestion des LV

  • lvchange(8)
  • lvextend(8)
  • lvreduce(8)
  • lvrename(8)
  • lvs(8)
  • lvconvert(8)
  • lvdisplay(8), à la manière de pvdisplay(8) et vgdisplay(8), est un outils de rapport très précieux:
root@maylug:/# lvdisplay 
 --- Logical volume ---
 LV Name   /dev/maylug_vg/data1_lv
 VG Name                renegade_vg
 LV UUID                G7Xm2i-0g47-Tx6U-lIgj-vGBs-lFcd-DD5P6o
 LV Write Access        read/write
 LV Status              available
 # open                 1
 LV Size                9,77 GiB
 Current LE             2500
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           254:0
  
 --- Logical volume ---
 LV Name                /dev/maylug_vg/data2_lv
 VG Name                renegade_vg
 LV UUID                bkiOwv-36FI-lRAF-hhBh-chGh-aXdY-Wkjfhk
 LV Write Access        read/write
 LV Status              available
 # open                 2
 LV Size                2,93 GiB
 Current LE             750
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           254:1
  
 --- Logical volume ---
 LV Name                /dev/maylug_vg/data3_lv
 VG Name                renegade_vg
 LV UUID                xsE1LN-SI5z-oI1g-adkq-0J5t-DLdw-Fn9fz5
 LV Write Access        read/write
 LV Status              available
 # open                 1
 LV Size                61,64 GiB
 Current LE             15779
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           254:2
  • lvremove(8)
  • lvresize(8)
  • lvscan(8)

LVM2 & Live-CD

Pour pouvoir accéder à ses volumes logiques lors de l'utilisation d'un média live (Live-CD/ Live-USB) Debian ou Ubuntu il faut:

1 - installer LVM2

$ sudo aptitude install LVM2

2 - rechercher puis activer le ou les groupes de volumes

$ sudo vgdisplay
$ sudo vgchange -a y $NOM_DU_VG

3 - rechercher puis monter le ou les volumes logiques

$ sudo lvdisplay
$ sudo mount /dev/$NOM_DU_VG/$NOM_DU_LV /point/de/montage

Liens