Introduction à LVM

Introduction

Imaginons que vous ayez un serveur avec le schéma de partition suivant:

2014-05-22 15_46_22-Drawing1

Problème: votre partition /home (par exemple) est devenu trop petite et vous souhaitez l’agrandir en connectant un second disque dur. Et là, vous êtes bloqué, impossible à faire !

C’est pour résoudre à ce problème que LVM est né: permettre de redimensionner et d’étendre à chaud des partitions et de les répartir sur plusieurs disques (si si).

Fonctionnement

Foundations of CentOS Linux

(Image tiré du livre « Fondations of CentOS Linux »)

Pour commencer, il faut savoir qu’il n’est pas possible de démarrer directement sur une partition LVM, il faut donc forcément une partition physique pour /boot qui contiendra le programme d’amorçage (Grub/Lilo). 500MB suffit largement même en conservant plusieurs versions du noyau.

En général, on créé sur le disque contenant la partition d’amorçage une partition LVM qui occupe le reste de l’espace. Et une seule partition LVM qui occupe l’ensemble du disque pour les autres disques.

Un volume physique (PV – Physical Volume) est une partition Linux LVM. On les identifie par les noms attribués par Linux: sda1, sda2, etc.

Un groupe de volumes (VG – Volume Group) est composé de volumes physique. Il existe deux conventions de nommage: soit en incrémentant un compteur: VolGroup00 soit en lui donnant un petit nom précédé de vg-: vg-home.

Dans l’image ci-dessus, nous avons ici deux groupes: un VolGroup00 qui s’appuie sur une seule partition physique sur le disque sda et un vg-home qui est composé de deux partitions physiques réparties sur deux disques.

Un volume logique (LV – Logical Volume) peut encapsulé une ou plusieurs partitions. On les nomme généralement sous la forme lv-root. L’administrateur est libre de choisir ensuite le type de partition qu’il souhaite (ext3, ext4, etc.) pour chacune.

Chaque partition est ensuite montée sur… un point de montage pour être utilisée comme n’importe quelle partition.

Mise en place

Dans notre démonstration, nous aurons trois disques:

  • sda qui comprend le système. L’installateur CentOS va nous créer automatiquement:
    • Une partition sda1 pour l’amorçage de type ext3
    • Un groupe de volumes VolGroup composé de deux partitions pour / et la swap.
  • sdb et sdc qui sont vierges et vont nous servir pour LVM

Commençons par lister nos disques avec fdisk -l:

[root@localhost ~]# fdisk -l

Disque /dev/sda: 8589 Mo, 8589934592 octets
255 têtes, 63 secteurs/piste, 1044 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x000d1465

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sda1   *           1          64      512000   83  Linux
La partition 1 ne se termine pas sur une frontière de cylindre.
/dev/sda2              64        1045     7875584   8e  Linux LVM

Disque /dev/sdb: 8589 Mo, 8589934592 octets
255 têtes, 63 secteurs/piste, 1044 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x000ed17d

Périphérique Amorce  Début        Fin      Blocs     Id  Système

Disque /dev/sdc: 8589 Mo, 8589934592 octets
255 têtes, 63 secteurs/piste, 1044 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x00014a71

Périphérique Amorce  Début        Fin      Blocs     Id  Système

Disque /dev/mapper/VolGroup-lv_root: 7205 Mo, 7205814272 octets
255 têtes, 63 secteurs/piste, 876 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x00000000


Disque /dev/mapper/VolGroup-lv_swap: 855 Mo, 855638016 octets
255 têtes, 63 secteurs/piste, 104 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0x00000000

On y retrouve notre disque principal avec sa partition de boot et son volume physique LVM, nos deux disques vierges et les deux volumes logiques LVM existants.

Nous ne toucherons pas à /dev/sda (le disque principal).

Commençons par créer un volume physique sur chaque disque avec la commande pvcreate:

[root@localhost ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created
[root@localhost ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created

On affiche la liste des volumes physiques avec pvdisplay pour vérification:

[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VolGroup
  PV Size               7,51 GiB / not usable 3,00 MiB
  Allocatable           yes (but full)
  PE Size               4,00 MiB
  Total PE              1922
  Free PE               0
  Allocated PE          1922
  PV UUID               s7rrym-AiTz-kmce-6bxT-GQJY-E2ES-Sasl97

  "/dev/sdb" is a new physical volume of "8,00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name
  PV Size               8,00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               kt1in4-EqTK-edif-ZlTm-uPUY-Vjo8-sr5aAW

  "/dev/sdc" is a new physical volume of "8,00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name
  PV Size               8,00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               N1fU0O-vGqs-8hi2-lnRv-jKWq-ZdKr-uyD6Ln

Parfait, nous avons bien nos trois volumes physiques.

A présent, créons un premier groupe composé de deux disques (sdb et sdc):

[root@localhost ~]# vgcreate vg-data /dev/sdb /dev/sdc
  Volume group "vg-data" successfully created

Vérifions à nouveau, cette fois avec vgdisplay:

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg-data
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               15,99 GiB
  PE Size               4,00 MiB
  Total PE              4094
  Alloc PE / Size       0 / 0
  Free  PE / Size       4094 / 15,99 GiB
  VG UUID               6Kzr80-ToYT-tPsh-BQl8-cpYz-YmT2-Rt7eyC

Nous avons bien un groupe de volumes de 16 Go.

Pour terminer la mise en place, supposons que nous ayons besoin de deux volumes logiques dénommée lv-web de 10 Go et d’une autre, lv-tmp de 2 Go, ce qui nous laissera 8 Go pour nous agrandir. Cela se fait avec la commande lvcreate:

[root@localhost ~]# lvcreate -L 10G -n lv-web vg-data
   Logical volume "lv-web" created
[root@localhost ~]# lvcreate -L 2G -n lv-tmp vg-data
 Logical volume "lv-tmp" created

Vérifions avec lvdisplay:

[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg-data/lv-web
  LV Name                lv-web
  VG Name                vg-data
  LV UUID                729Iq7-erRF-S2zL-Alud-CPhE-3gZ7-rrxoqv
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2014-05-22 17:08:21 +0200
  LV Status              available
  # open                 0
  LV Size                10,00 GiB
  Current LE             2560
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/vg-data/lv-tmp
  LV Name                lv-tmp
  VG Name                vg-data
  LV UUID                wOsKBc-JMG1-dR5i-U5t3-Sc6L-OsMT-uYOODa
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2014-05-22 17:09:10 +0200
  LV Status              available
  # open                 0
  LV Size                2,00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3

Nous avons bien à présent nos deux partitions, l’une de 10 Go (!) et l’autre de 2G. Ne reste plus qu’à les formater:

[root@localhost ~]# mkfs.ext4 /dev/vg-data/lv-web
(...)
[root@localhost ~]# mkfs.ext4 /dev/vg-data/lv-tmp
(...)

Félicitation, vous venez de mettre en place LVM 

Faire évoluer les volumes LVM

Notre partition lv-web est à présent à l’étroit dans ses 10 Go, nous avons besoin de 2 Go supplémentaire:

[root@localhost ~]# lvresize -L +2G /dev/vg-data/lv-web
  Extending logical volume lv-web to 12,00 GiB
  Logical volume lv-web successfully resized

Le tour est joué, notre partition lv-web vient de gagner 2 GB.

N’oubliez pas de redimensionner le partition ext4 elle-même:

[root@localhost ~]# resize2fs /dev/vg-data/lv-web
resize2fs 1.41.12 (17-May-2010)
En train de retailler le système de fichiers sur /dev/vg-data/lv-web à 3145728 (4k) blocs.
Le système de fichiers /dev/vg-data/lv-web a maintenant une taille de 3145728 blocs.

Nous venons à présent d’ajouter un quatrième disque (encore un!) de 8G et souhaitons lui faire rejoindre notre volume logique vg-data. Il suffit de deux commandes:

# On créé un volume physique
[root@localhost ~]# pvcreate /dev/sdd
  Physical volume "/dev/sdd" successfully created
# On ajoute sdd à notre volume logique
[root@localhost ~]# vgextend vg-data /dev/sdd
  Volume group "vg-data" successfully extended
# On affiche à nouveau les informations
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg-data
  (...)
  Alloc PE / Size       3584 / 14,00 GiB
  Free  PE / Size       2557 / 9,99 GiB

On peut maintenant voir que nous avons 10 Go de disponible sur notre volume (les 2G déjà libre + le nouveau disque).

Les commandes LVM sont très simples à comprendre:

  • Celles qui débutent par pv manipulent des volumes physiques
  • Celles qui débutent par vg manipulent des groupes de volumes
  • Celles qui débutent par lv manipulent des volumes logiques

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s