LVM

De ArchwikiFR
Révision datée du 4 janvier 2018 à 16:08 par Steranoid (discussion | contributions) (RAID)


Introduction

LVM est un gestionnaire de volumes logiques pour le noyau Linux. Le but de LVM est de fournir une couche d'abstraction entre l'espace de stockage physique et le système: il permet de créer des «partitions virtuelles» faciles à gérer (changements de taille, création, suppression...). Les éléments qui composent LVM sont:

  • Les volumes physiques (PV): ce sont les espaces de stockage traditionnels (disques, partitions, éventuellement des fichiers montés en loopback), sur lequels LVM crée ses volumes logiques. Il comprend un en-tête spécial et se divise en blocs physiques (extents).
  • Les groupes de volumes (VG): Ce sont des groupes de volumes physiques (PV) réunis par LVM en un seul «disque virtuel». Un groupe de volumes contient des volumes logiques, ceux-ci sont répartis par LVM de manière transparente sur les différents volumes physiques: un volume logique peut même être dispersé à travers les disques disponibles.
  • Les volumes logiques (LV): ce sont des «partitions virtuelles» (logiques parce qu'elles sont produites par un logiciel sans forcément correspondre à une portion d'un disque matériel. Les volumes logiques sont constitués d'étendues de blocs physiques réunis en un seul espace de stockage, et rendus lisibles par le système. On peut les utiliser comme des partitions ordinaires.
  • Étendue physique (PE): un petit bloc de disque (en général de 4MB) qui peut être affecté à un volume logique. Les étendues physiques se comportent comme les secteurs ou les cylindres des disques durs physiques.

Exemple:

Disques physiques
                
  Disque 1 (/dev/sda):
     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    |Partition1 50GB (Volume physique) |Partition2 80GB (Volume physique)     |
    |/dev/sda1                         |/dev/sda2                             |
    |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
                                  
  Disque 2 (/dev/sdb):
     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    |Partition1 120GB (Volume physique)                 |
    |/dev/sdb1                                          |
    | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _|
Volumes logiques LVM

  Groupe de volumes 1 (/dev/MyStorage/ = /dev/sda1 + /dev/sda2 + /dev/sdb1):
     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    |Volume logique 1 15GB |Volume logique 2 35GB     |Volume logique 3 200GB              |
    |/dev/MyStorage/rootvol|/dev/MyStorage/homevol    |/dev/MyStorage/mediavol             |
    |_ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |

Pour résumer: LVM permet d'utiliser tout l'espace disque disponible (le groupe de volumes) et de le présenter sous forme de partitions virtuelles (les volumes logiques) qui peuvent être découpées très différemment, pour plus de flexibilité..

Installation

Avant toute opération, il faut charger le bon module dans le noyau:

# modprobe dm_mod

Partitionner les disques

Ensuite, il faut créer une partition pour LVM. Elle doit avoir le type 'Linux LVM' (numéro 0x8e pour les partitions MBR, 8e00 pour GPT). Il suffit normalement d'une seule partition LVM sur chaque disque à utiliser. Les volumes logiques seront positionnés dans ces partitions, donc prévoyez la place nécessaire. Pour utiliser seulement LVM sans autre partition, prenez tout l'espace libre disponible.

Il est possible d'utiliser LVM directement sur le disque, sans partition sous-jacente, néanmoins cette pratique est déconseillé dans la mesure où elle n'indique pas le type de données présentes sur le disque, information pouvant être utile pour un autre système d'exploitation éventuel.

LVM peut également être utilisé au dessus d'une couche de chiffrement auquel cas il faudra effectuer cette étape au préalable (voir LUKS#LVM pour plus de détails)

Attention : Le répertoire /boot ne peut pas être situé sur une partition LVM, car GRUB (version <1.95) ne peut pas les lire.
Astuce : Toutes les partitions LVM de tous les disques présents peuvent être configurées pour apparaître comme un seul disque.

Créer les volumes physiques

Il faut maintenant initialiser les partitions pour les utiliser avec LVM. La commande fdisk -l permet de trouver quelles partitions sont marquées avec le type 'Linux LVM', on alors en faire des volumes physiques pour LVM avec la commande:

# pvcreate /dev/sda2

Remplacez /dev/sda2 avec le nom des partitions concernées pour les utiliser comme volumes physiques. Cette commande écrit un en-tête adéquat sur chaque partition. Pour voir la liste des volumes physiques reconnus par LVM, tapez:

# pvdisplay

Créer un ou plusieurs groupes de volumes

L'étape suivante consiste à créer un groupe de volumes (VG). La commande vgcreate permet de créer un groupe de volumes avec l'une des partitions, et vgextend permet d'ajouter une autre partition dans ce groupe:

# vgcreate VGroupe0 /dev/sda2
# vgextend VGroupe0 /dev/sdb1

Remplacez VGroupe0 par le nom souhaité. L'état du groupe de volume peut être affiché par la commande

# vgdisplay
Note : Il est possible de créer plusieurs groupes de volumes, ils apparaîtront alors comme des «disques» séparés.

Créer des volumes logiques

On peut maintenant définir des volumes logiques pour ce groupe. Cela se fait avec la commande lvcreate, en précisant la talle désirée et le nom du volume, et le groupe dans lequel il apparaîtra:

lvcreate -L 10G VGroupe0 -n home

Ceci crée un volume logique accessible par le chemin /dev/mapper/VGroupe0-home ou /dev/VGroupe0/home. De la même façon, on peut choisir n'importe quel nom pour un volume logique.

Vous pouvez lister les volumes crées avec:

# lvdisplay

Créer un système de fichier

Note : Pour pouvoir manipuler les volumes, il vous faut charger le module dm_mod.

Pour rendre les groupes de volumes disponibles:

# modprobe dm_mod
# vgscan
# vgchange -ay

Ensuite, il suffit d'utiliser les volumes comme n'importe quelle partition:

# mkfs.ext4 /dev/mapper/VGroupe0-home
# mount /dev/mapper/VGroupe0-home /home

Configuration du système

Si une partition nécessaire au système (/, /usr, ...) est en LVM :

  • Rajoutez le HOOK lvm2 à la configuration du /etc/mkinitcpio.conf avant le HOOK filesystems et après le HOOK udev. Si LVM est utilisé au dessus d'une couche de chiffrement (comme LUKS), il est nécessaire de placer le hook lvm2 après encrypt (ou sd-encrypt). Bien sûr, à contrario, si LUKS est installé au dessus de LVM, le hook doit être placé après.
  • Régénérer l'initramfs.

RAID

Il est possible d'utiliser RAID avec LVM, son fonctionnement repose sur dm mais fonctionne à partir des partitions logiques.

Types de RAID pris en charge par LVM :

  • 0 : accélération de l'écriture et de la lecture, pas de redondance, vulnérabilité forte à la défaillance matérielle, nécessite 2 disques minimum
  • 1 : redondance des disques, accélération de la lecture, perte de performances en ecriture, supporte la perte de tous disques tant qu'un seul reste opérationnel, nécessite 2 disques minimum
  • 4 : raid0 avec bloc de sauvegarde par parité, supporte la perte d'un disque, diminuant le risque lié à la défaillance matérielle, procédure de restauration chronophage, lecture et ecriture accélérées, nécessite 3 disques minimum
  • 5 : raid4 avec bloc de sauvegarde par parité répartie, diminuant le temps de récupération en cas de défaillance matérielle, lecture et ecriture accélérées, nécessite 3 disques minimum
  • 6 : raid5 avec double bloc de sauvegarde par parité répartie, supporte la perte de deux disques, nécessite au moins 4 disques
  • 10 : raid0 sur raid1, redondance, lecture et ecriture améliorées, nécessite beaucoup de disques, au minimum 4 disques

Créer une partition RAID

On peut créer une partition RAID grâce à la commande suivante (à effectuer après l'étape de création de groupe de volume).

# lvcreate --type TYPE_RAID --name NOM_DE_LA_PARTITION --size TAILLE VG [Volumes Physiques ...]

Par exemple, pour créer une partition logique en RAID 5 de 40Gio sur les partitions de disque sda1, sdb1, sdc1 (préalablement rajouté dans le groupe de volumes vg0 et d'une taille minimale de 40Gio chacun) :

# lvcreate --type raid5 --name lvol_raid5 --size 40G vg0 /dev/sda1 /dev/sdb1 /dev/sdc1

LVM Cache

De plus en plus d'utilisateurs possède plusieurs types de volumes de stockage, ce qu'on appelle un "stockage hybride", c'est à dire un ensemble hétérogène de technologie de stockage par exemple un mélange de disques mécanique, généralement avec beaucoup de place de stockage avec un SSD relativement petit. LVM permet d'accélerer un disque lent et volumineux avec un disque rapide et plus petit.

Créer un cache

Pour créer un cache de 20Gio pour la partition logique donneesLV du groupe donnesVG sur le disque /dev/sdx1 (de préférence un volume plus rapide que le volume utilisé jusqu'alors) :

# lvcreate --type cache --cachemode writethrough --size 20G --name donneesLV_cache donneesVG/donneesLV /dev/sdx1

Supprimer un cache

# lvconvert --uncache donneesVG/donneesLV

Ressources supplémentaires

Autres articles sur LVM sur ArchWiki :

Autres ressources sur ArchWiki :

  • Btrfs qui intègre les mêmes idées que LVM dans un système de fichiers.

Liens externes :