LVM

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page LVM and the translation is 76% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎日本語 • ‎한국어 • ‎polski • ‎русский • ‎中文(中国大陆)‎

Not to be confused with LLVM.


Resources

LVM (Logical Volume Manager - Gestionnaire de volumes logiques) permet aux administrateurs de créer des méta-périphériques qui fournissent une couche d'abstraction entre un système de fichiers et le stockage physique sous-jacent. Les méta-périphériques (sur lesquels sont placés les systèmes de fichiers) sont des volumes logiques, qui utilisent de l'espace de stockages tiré de pools de stockage appelés groupes de volumes. Un groupe de volumes dispose d'un ou plusieurs volumes physiques qui représentent les véritables périphériques sur lesquels les données sont stockées.

Les volumes physiques peuvent être des partitions, des disques durs SATA entiers regroupés sous formes de JBOD (Just a Bunch Of Disks - Un simple groupe de disques), des systèmes RAID , iSCSI, un canal de fibre, eSATA etc.

Contents

Installation

La configuration de LVM est gérée à la fois par des pilotes au niveau du noyau et des applications de l'espace utilisateur.

Noyau

Activez les options suivantes du noyau:

KERNEL Enabling LVM
Device Drivers  --->
   Multiple devices driver support (RAID and LVM)  --->
       <*> Device mapper support
           <*> Crypt target support
           <*> Snapshot target
           <*> Mirror target
       <*> Multipath target
           <*> I/O Path Selector based on the number of in-flight I/Os
           <*> I/O Path Selector based on the service time
Note
Not everything needs to be enabled; some of the options are only needed for LVM2 Snapshots and LVM2 Thin Snapshots, LVM2 Mirrors, LVM2 RAID 0/Stripeset and encryption.

USE flags

USE flags for sys-fs/lvm2 User-land utilities for LVM2 (device-mapper) software

clvm Allow users to build clustered lvm2 local
cman Cman support for clustered lvm local
corosync Corosync support for clustered lvm local
device-mapper-only Build only device-mapper and not the rest of LVM2 (UNSUPPORTED) local
lvm1 Allow users to build lvm2 with lvm1 support local
lvm2create_initrd Install lvm2create_initrd script and pull in sys-apps/makedev for the /sbin/MAKEDEV command local
openais Openais support for clustered lvm local
readline Enable support for libreadline, a GNU line-editing library that almost everyone wants global
sanlock Enable lvmlockd with support for sanlock local
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur global
static !!do not set this during bootstrap!! Causes binaries to be statically linked instead of dynamically global
static-libs Build static versions of dynamic libraries as well global
systemd Enable use of systemd-specific libraries and features like socket activation or session tracking global
thin Support for thin volumes local
udev Enable virtual/udev integration (device discovery, power and storage device support, etc) global

Emerge

After reviewing the USE flags, ask Portage to install the sys-fs/lvm2 package:

root #emerge --ask sys-fs/lvm2

Configuration

Configuring LVM is done on several levels:

  1. LV, PV and VG management through the management utilities;
  2. LVM subsystem fine-tuning through the configuration file;
  3. Service management at the distribution level;
  4. Setup through an initial ram file system (initramfs).

La gestion des volumes physiques et logiques, tout autant que celles des groupes de volumes est traitée dans le chapitre Usage.

Fichiers de configuration de LVM

LVM dispose d'un fichier de configuration très étendu, soit /etc/lvm/lvm.conf. La plupart des utilisateurs n'ont pas besoin de modifier les paramètres de ce fichier pour commencer à utiliser LVM.

Gestion du service

Gentoo fournit le service LVM pour détecter automatiquement et activer les groupes de volumes et les volumes logiques.

Le service peut être géré via le système init.

openrc

Pour démarre LVM à la main :

root #/etc/init.d/lvm start

Pour démarrer LVM au démarrage de la machine.

root #rc-update add lvm boot

systemd

Pour démarrer lvm à la main

root #systemctl start lvm2-monitor.service

Pour démarrer LVM au démarrage de la machine.

root #systemctl enable lvm2-monitor.service

Utilisation de LVM dans un disque virtuel de démarrage -- initramfs

La plupart des chargeurs d'amorçage ne peuvent pas démarrer depuis LVM directement - Ni GRUB patrimonial, ni LILO ne le peuvent. GRUB2 peut amorcer depuis un volume logique linéaire, un volume logique miroir et possiblement depuis quelques volume logiques RAID. Aucun chargeur d'amorçage ne prend actuellement en charge les volumes logiques parcimonieux.

For that reason, it is recommended to use a non-LVM /boot partition and mount the LVM root from an initramfs. Such an initramfs can be generated automatically through genkernel, sys-kernel/genkernel-next and dracut:

  • genkernel can boot from all types except thin volumes (as it neither builds nor copies the thin-provisioning-tools binaries from the build host) and maybe RAID10 (RAID10 support requires LVM2 2.02.98, but genkernel builds 2.02.89, however if static binaries are available it can copy those);
  • genkernel-next can boot from all types volumes, but needs a new enough app-misc/pax-utils or the resulting thin binaries will be broken (See bug #482504);
  • dracut should boot all types, but only includes thin support in the initramfs if the host being run on has a thin root.

Genkernel/Genkernel-next

Emerge either sys-kernel/genkernel or sys-kernel/genkernel-next. The static USE flag may also be enabled on the package sys-fs/lvm2 so that genkernel will use the system binaries (otherwise it will build its own private copy). The following example will build only an initramfs (not an entire kernel) and enable support for LVM.

root #genkernel --lvm initramfs

La page de manuel de genkernel présente d'autres options qui dépendent des besoins du système.

The initrd will require parameters to tell it how to start LVM, and they are supplied the same way as other kernel parameters. For example:

FILE /etc/default/grubAdding dolvm as a kernel boot parameter
GRUB_CMDLINE_LINUX="dolvm"

Dracut

Le paquet sys-kernel/dracut, qui a été porté depuis le projet RedHat, tient lieu d'outil similaire pour générer un système de fichiers virtuel de démarrage.Comme il est actuellement sous ~arch pour test, les utilisateurs doivent l'accepter explicitement (via /etc/portage/package.accept_keywords) avant de l'installer. Avant cela, l'option DRACUT_MODULES="lvm" doit être déclarée dans /etc/portage/make.conf. D'autres modules peuvent être requis. Reportez-vous à Dracut. En général, la commande suivante devrait générer un système virtuel de fichiers de démarrage utilisable (initramfs).

root #dracut -a lvm

The initrd will require parameters to tell it how to start LVM, and they are supplied the same way as other kernel parameters. For example:

FILE /etc/default/grubAdding LVM support to the kernel boot parameters
GRUB_CMDLINE_LINUX="rd.lvm.vg=vol00"

For a comprehensive list of LVM options within dracut please see the section in the Dracut Manual.

Utilisation

LVM organise le stockage sur 3 niveaux différents comme suit :

  • disques durs, partitions, systèmes RAID systems ou autres moyens de stockage sont initialisés en tant que volumes physiques (PVs)
  • les volumes physiques (Physical Volumes) sont regroupés en groupe de volumes (Volumes Groups)
  • les volumes logiques (Logical Volumes) sont gérés en groupes de volumes (VG)

Volumes physiques (Pysical Volumes)

Les volumes physiques sont les systèmes physiques réels sur lesquels LVM est construit.

Partitionnement

Note
L'utilisation de partitions séparées pour allouer de l'espace de stockage aux groupes de volumes n'est nécessaire qui si on ne désire pas utiliser le disque entier pour un unique groupe de volumes LVM. Si le disque entier peut être utilisé, sautez cette étape et initialisez le disque dur tout entier en tant que volume physique.

Le code du type de partition pour LVM est8e (Linux LVM).

For instance, to set the type through fdisk for a partition on /dev/sda:

root #fdisk /dev/sda

In fdisk, create partitions using the n key and then change the partition type with the t key to 8e.

Créer un volume physique

Physical volumes can be created / initialized with the pvcreate command.

Par exemple, la commande suivante crée un volume physique sur la première partition de /dev/sda et /dev/sdb:

root #pvcreate /dev/sd[ab]1

Lister les volumes physiques

With the pvdisplay command, an overview of all active physical volumes on the system can be obtained.

root #pvdisplay
 --- Physical volume ---
  PV Name               /dev/sda1
  VG Name               volgrp
  PV Size               160.01 GiB / not usable 2.31 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              40962
  Free PE               4098
  Allocated PE          36864
  PV UUID               3WHAz3-dh4r-RJ0E-5o6T-9Dbs-4xLe-inVwcV
  
 --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               volgrp
  PV Size               160.01 GiB / not usable 2.31 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              40962
  Free PE               40962
  Allocated PE          0
  PV UUID               b031x0-6rej-BcBu-bE2C-eCXG-jObu-0Boo0x

If more physical volumes should be displayed, then pvscan can detect inactive physical volumes and activate those.

root #pvscan
  PV /dev/sda1  VG volgrp        lvm2 [160.01 GiB / 16.01 GiB free]
  PV /dev/sdb1  VG volgrp        lvm2 [160.01 GiB / 160.01 GiB free]
  Total: 2 [320.02 GB] / in use: 2 [320.02 GiB] / in no VG: 0 [0]

Retirer un volume physique

LVM répartit les données automatiquement sur tous les volumes physiques (sauf si on lui demande de procéder différemment) mais dans une démarche linéaire. Si un volume logique requis (dans un groupe de volumes) est plus petit que le volume de l'espace libre sur un unique volume physique, alors tout l'espace de ce volume physique (unique) est alloué à ce volume logique d'une manière contigüe. Ceci vise à optimiser la performance.

If a physical volume needs to be removed from a volume group, the data first needs to be moved away from the physical volume. With the pvmove command, all data on a physical volume is moved to other physical volumes within the same volume group.

root #pvmove -v /dev/sda1

Such an operation can take a while depending on the amount of data that needs to be moved. Once finished, there should be no data left on the device. Verify with pvdisplay that the physical volume is no longer used by any logical volume.

The next step is to remove the physical volume from the volume group using vgreduce after which the device can be "deselected" as a physical volume using pvremove:

root #vgreduce vg0 /dev/sda1 && pvremove /dev/sda1

Groupe de volumes (Volum Group)

Un groupe de volumes (VG) regroupe un certain nombre de volumes physiques et se présente comme /dev/VG_NAME dans le système de fichiers. Le nom du groupe de volumes est choisi par l'administrateur.

Créer un groupe de volumes

La commande suivante crée un groupe de volume appelé vg0 en lui assignant deux volumes physiques /dev/sda1 et /dev/sdb1.

root #vgcreate vg0 /dev/sd[ab]1

Lister les groupes de volumes

To list all active volume groups, use the vgdisplay command:

root #vgdisplay
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  8
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                6
  Open LV               6
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               320.02 GiB
  PE Size               4.00 MiB
  Total PE              81924
  Alloc PE / Size       36864 / 144.00 GiB
  Free  PE / Size       45056 /176.01 GiB
  VG UUID               mFPXj3-DdPi-7YJ5-9WKy-KA5Y-Vd4S-Lycxq3

If volume groups are missing, use the vgscan command to locate volume groups:

root #vgscan
  Reading all physical volumes.  This may take a while...
  (lecture de tous les volumes physiques. Ceci peut prendre un moment...)
  Found volume group "vg0" using metadata type lvm2
  (Groupe de volumes trouvé ''vg0'' qui utilise la méta-donnée de type lvm2)

Étendre un groupe de volumes

Les groupes de volumes regroupent des volumes physiques, permettant ainsi aux administrateurs d'utiliser un pool de stockage pour allouer de l'espace aux systèmes de fichiers. Lorsqu'un groupe de volumes manque de ressources physiques, il est nécessaire de l'étendre en lui ajoutant de nouveaux volumes physiques.

La commande suivante étend le groupe de volumes vg0 en lui ajoutant le volume physique /dev/sdc1:

root #vgextend vg0 /dev/sdc1

N'oubliez pas que le volume physique doit d'abord être initialisé en tant que tel !

Réduire un groupe de volumes

If physical volumes need to be removed from the volume group, all data still in use on the physical volume needs to be moved to other physical volumes in the volume group. As seen before, this is handled through the pvmove command, after which the physical volume can be removed from the volume group using vgreduce:

root #pvmove -v /dev/sdc1
root #vgreduce vg0 /dev/sdc1

Retirer un groupe de volumes

If a volume group is no longer necessary (or, in other words, the storage pool that it represents is no longer used and the physical volumes in it need to be freed for other purposes) then the volume group can be removed with vgremove. This only works if no logical volume is defined for the volume group, and all but one physical volume have already been removed from the pool.

root #vgremove vg0

Volume logique (Logical Volume)

Les volumes logiques sont les méta-périphériques finaux mis à la disposition du système, ordinairement pour y placer des systèmes de fichiers. Ils sont créés et gérés en groupes de volumes et apparaissent sous la forme /dev/VG_NAME/LV_NAME. Comme avec les groupes de volumes, le nom utilisé pour désigner le volume est fixé par l'administrateur.

Créer un volume logique

To create a logical volume, the lvcreate command is used. The parameters to the command consist out of the requested size for the logical volume (which cannot be larger than the amount of free space in the volume group), the volume group from which the space is to be claimed and the name of the logical volume to be created.

Dans l'exemple qui suit, un volume logique nommé lvol1 est créé à partir du groupe de volumes nommé vg0 avec une taille de 150MB.

root #lvcreate -L 150M -n lvol1 vg0

It is possible to tell lvcreate to use all free space inside a volume group. This is done through the -l option which selects the amount of extents rather than a (human readable) size. Logical volumes are split into logical extents which are data chunks inside a volume group. All extents in a volume group have the same size. With the -l option lvcreate can be asked to allocate all free extents:

root #lvcreate -l 100%FREE -n lvol1 vg0

Juste après FREE la clé VG peut être utilisée pour signifier la taille entière du groupe de volumes.

Lister les volumes logiques

To list all logical volumes, use the lvdisplay command:

root #lvdisplay

If logical volumes are missing, then the lvscan command can be used to scan for logical volumes on all available volume groups.

root #lvscan

Étendre un volume logique

When a logical volume needs to be expanded, then the lvextend command can be used to grow the allocated space for the logical volume.

Par exemple pour augment la taille du volume logique 'lvol1 jusqu'à 500 MO :

root #lvextend -L500M /dev/vg0/lvol1

On peut aussi utiliser la taille à ajouter plutôt que de spécifier la taille totale.

root #lvextend -L+350MB /dev/vg0/lvol1

Un groupe de volumes ne met pas immédiatement un espace de stockage additionnel à la disposition de l'utilisateur. Pour cela, le système de fichiers qui occupe ce groupe de volumes doit être élargi lui aussi. Tous les systèmes de fichiers ne permettent pas le redimensionnement à chaud. Vérifiez la documentation de votre système de fichier pour plus d'information.

À titre d'exemple, pour redimensionner un système de fichiers ext4 pour lui donner une taille de 500 MO :

root #resize2fs /dev/vg0/lvol1 500M

Réduire un volume logique

Si un volume logique doit être réduit en taille, commencez par réduire l'étendue du système de fichier. Tous les systèmes de fichiers ne peuvent être redimensionné système en marche.

Par exemple, ext4 ne peut être redimensionner avec un système qui tourne dessus, il faut d'abord le démonter. Il est également recommandé de vérifier le système de fichiers afin d'être certain qu'il ne comporte pas d'incohérence.

root #umount /mnt/data
root #e2fsck -f /dev/vg0/lvol1
root #resize2fs /dev/vg0/lvol1 150M
Une fois le système de fichiers réduit, il est possible de réduire le volume logique à son tour.
root #lvreduce -L150M /dev/vg0/lvol1

Permissions d'un volume logique

LVM prend en charge les permissions sur les volumes logiques.

For instance, a logical volume can be set to read only using the lvchange command:

root #lvchange -p r /dev/vg0/lvol1
root #mount -o remount /dev/vg0/lvol1

Il est nécessaire de remonter le volume car le changement ne peut être pris en compte immédiatement.

Pour marquer le volume logique comme inscriptible à nouveau, utilisez les bits de permission rw

root #lvchange -p rw /dev/vg0/lvol1 && mount -o remount /dev/vg0/lvol1

Retirer un volume logique

Avant de retirer un volume logique, assurez-vous qu'il n'est pas monté.

root #umount /dev/vg0/lvol1

Désactivez le volume logique de façon à ce qu'on ne puisse plus y écrire :

root #lvchange -a n /dev/vg0/lvol1

Dès lors que le volume logique est démonté et désactivé, on peut le retirer, libérant ainsi les étendues élémentaires qui lui sont alloués pour les mettre à la disposition des autres volumes logiques dans le groupe de volumes.

root #lvremove /dev/vg0/lvol1

Fonctionnalités

LVM offre quelques fonctionnalités intéressantes pour les administrateurs, y compris (mais sans limitation) :

  • l'allocation parcimonieuse
  • la prise en charge des instantanés
  • des types de volumes utilisant des méthodes d'allocation différentes

L'allocation parcimonieuse

Recent versions of LVM2 (2.02.89) support "thin" volumes. Thin volumes are to block devices what sparse files are to file systems. Thus, a thin logical volume within a pool can be "over-committed": its presented size can be larger than the allocated size - it can even be larger than the pool itself. Just like a sparse file, the extents are allocated as the block device gets populated. If the file system has discard support extents are freed again as files are removed, reducing space utilization of the pool.

Dans LVM, un tel pool parcimonieux est un type de volume logique, qui peut lui-même héberger des volumes logiques.

Créer un pool parcimonieux

Attention !
Si un débordement se produit dans les méta-données du pool parcimonieux, alors le pool est corrompu. LVM ne peut pas se remettre d'une telle situation.
Note
Si le pool parcimonieux est épuisé, tout process qui provoquerait l'allocation par le pool parcimonieux d'étendues physiques élémentaires non disponibles est gelé dans un état de sommeil tuable jusqu'à ce que le pool soit étendu ou que le process reçoive un signal SIGKILL. .

Each thin pool has metadata associated with it, which is added to the thin pool size. LVM will compute the size of the metadata based on the size of the thin pool as the minimum of pool_chunks * 64 bytes or 2MiB, whichever is larger. The administrator can select a different metadata size as well.

To create a thin pool, add the --type thin-pool --thinpool thin_pool options to lvcreate:

root #lvcreate -L 150M --type thin-pool --thinpool thin_pool vg0

L'exemple précédent crée un pool parcimonieux appelé thin_pool qui aura une taille totale de 150 MO. Il s'agit de la taille réelle du pool parcimonieux (et par conséquent le montant total d'espace de stockage qui peut être utilisé).

To explicitly ask for a certain metadata size, use the --metadatasize option:

root #lvcreate -L 150M --poolmetadatasize 2M --type thin-pool --thinpool thin_pool vg0

À cause des méta-données qui sont ajoutées au pool parcimonieux, la manière intuitive qui consiste à utiliser toute la taille disponible dans un groupe de volume ne fonctionne pas (voir LVM bug [1]):

root #lvcreate -l 100%FREE --type thin-pool --thinpool thin_pool vg0
Insufficient suitable allocatable extents for logical volume thin_pool: 549 more required
(Nombre d'''étendues physiques élémentaires'' allouables insuffisant pour le ''volume logique parcimonieux'': 549 étendues physiques élémentaires supplémentaires sont nécessaires.)

Notez que le pool parcimonieux n'a pas de nœud de périphérique associé comme les autres.

Créer un volume logique parcimonieux

A thin logical volume is a logical volume inside the thin pool (which itself is a logical volume). As thin logical volumes are sparse, a virtual size instead of a physical size is specified using the -V option:

root #lvcreate -T vg0/thin_pool -V 300M -n lvol1

Dans cet exemple le volume logique parcimonieux (thin) lvol1 est mis à disposition en tant que périphérique de taille 300 MO, bien que le pool sous-jacent ne contienne que 150 MO d'espace mémoire réel alloué.

Il est également possible de créer à la fois le pool parcimonieux et le volume logique à l'intérieur de ce pool en une seule commande :

root #lvcreate -T vg0/thin_pool -V 300M -L150M -n lvol1

Lister les pools parcimonieux et les volumes logiques parcimonieux

Thin pools and thin logical volumes are special types of logical volumes, and as such as displayed through the lvdisplay command. The lvscan command will also detect these logical volumes.

Étendre un pool parcimonieux

Attention !
Depuis LVM2 2.02.89, la taille des méta-données du pool parcimonieux ne peut pas être étendue, elle est fixée à la création.

The thin pool is expanded like a non-thin logical volume using lvextend. For instance:

root #lvextend -L500M vg0/thin_pool

Étendre un volume logique parcimonieux

Un volume logique parcimonieux est étendu de la même manière qu'un volume ordinaire :

root #lvextend -L1G vg0/lvol1

Note that the lvextend command uses the -L option (or -l if extent counts are used) and not a "virtual size" option as was used during the creation.

Réduire un pool parcimonieux

Au stade actuel, LVM ne sait pas réduire la taille d'un pool parcimonieux. Reportez-vous au rapport de bogue [2].

Réduire un volume logique parcimonieux

Les volumes logiques parcimonieux sont réduits de la même manière que les volumes logiques ordinaires.

For instance:

root #lvreduce -L300M vg0/lvol1l

Note that the lvreduce command uses the -L option (or -l if extent counts are used) and not a "virtual size" option as was used during the creation.

Retirer des pools parcimonieux

Ces pools ne peuvent être retirés que si tous les volumes logiques parcimonieux qu'ils contenaient ont été retirés.

When a thin pool no longer services any thin logical volume, it can be removed through the lvremove command:

root #lvremove vg0/thin_pool

Instantanés LVM2 et instantanés parcimonieux

Un instantané est un volume logique que agit comme copie d'un autre volume logique. Il affiche l'état du volume logique original au moment de la création de l'instantané.

Warning
Since the logical snapshot volume also gets the same filesystem LABEL and UUID, be sure the /etc/fstab file or initramfs does not contain entries for these filesystems using the LABEL= or UUID= syntax. Otherwise you might end up with the snapshot being mounted instead of the (intended) original logical volume.

Créer un instantané de volume logique

A snapshot logical volume is created using the -s option to lvcreate. Snapshot logical volumes are still given allocated storage as LVM "registers" all changes made to the original logical volume and stores these changes in the allocated storage for the snapshot. When querying the snapshot state, LVM will start from the original logical volume and then check all changes registered, "undoing" the changes before showing the result to the user.

Un volume logique instantané, grossit par conséquence au rythme des changements apportés au volume logique original. Lorsque tout l'espace alloué à l'instantané est épuisé, l'instantané est automatiquement retiré du système.

root #lvcreate -l 10%VG -s -n 20140412_lvol1 /dev/vg0/lvol1

L'exemple qui précède crée un volume logique instantané appelé 20140412_lvol1, basé sur le volume lvol1' du groupe de volumes vg0. Il utilise 10% de l'espace (réellement des étendues physiques élémentaires) alloués au groupe de volumes.

Accéder à un volume logique instantané

Les volumes logiques instantanés sont montés de la même manière que les volumes logiques ordinaires. Ils ne sont même pas réduits à des opérations en lecture seule - il est possible de modifier des instantanés et les utiliser ainsi pour des tester des changements avant de les appliquer à un système de fichier de production.

Tant qu'un volume logique instantané existe, le volume logique original ordinaire ne peut être réduit en taille ou supprimer.

Les instantanés parcimonieux de LVM

Note
Un instantané parcimonieux ne peut être créé que depuis un pool parcimonieux pour un volume logique parcimonieux. La cible de cartographie des périphériques parcimonieux prend en charge les instantanés parcimonieux des volumes non parcimonieux en lecture seule, mais l'outillage LVM2 ne prend pas en charge cela. Cependant, il est possible de créer un volume logique instantané ordinaire (non parcimonieux) à partir d'un volume logique parcimonieux.

To create a thin snapshot, the lvcreate command is used with the -s option. No size declaration needs to be passed on:

root #lvcreate -s -n 20140413_lvol1 /dev/vg0/lvol1

Les volumes logiques instantanés parcimonieux ont la même taille que leur volume logique original, et utilisent une allocation physique de 0 tout comme les autres volumes logiques.

Important
Si -l ou -L est spécifié, un instantané sera quand même créé, mais l'instantané résultant sera un instantané ordinaire, par un instantané parcimonieux.

Il est aussi possible de prendre des instantanés d'instantanés.

root #lvcreate -s -n 1_20140413_lvol1 /dev/vg0/20140413_lvol1

Ce type d'instantanés procure plusieurs avantages par rapport aux instantanés ordinaires. Tout d'abord, les instantanés parcimonieux sont indépendants de leur volume logique original une fois créés. Le volume logique original peut être réduit ou supprimé sans que cela n'affecte l'instantané. En second lieu, ce type d'instantanés peut être créé efficacement de manière récursive (instantanés d'instantanés) sans la surcharge due au chaînage des instantanés LVM ordinaires récursifs.

Revenir à l'état de l'instantané

Pour faire revenir en arrière le volume logique à l'état de l'instantané, utilisez la commande suivante :

root #lvconvert --merge /dev/vg0/20140413_lvol1

This might take a couple of minutes, depending on the size of the volume. Please note that the rollback will only happen once the parent logical volume is offline. Hence a reboot might be required.

Important
L'instantané sera supprimé et ce changement est irréversible.

Revenir à l'état d'un instantané parcimonieux

For thin volumes, lvconvert --merge does not work. Instead, delete the original logical volume and rename the snapshot:

root #umount /dev/vg0/lvol1
root #lvremove /dev/vg0/lvol1
root #lvrename vg0/20140413_lvol1 lvol1

Différentes méthodes d'allocation d'espace de stockage

LVM supports different allocation methods for storage:

  • Linear volumes (which is the default);
  • Mirrored volumes (in a more-or-less active/standby setup);
  • Striping (RAID0);
  • Mirrored volumes (RAID1 - which is more an active/active setup);
  • Striping with parity (RAID4 and RAID5);
  • Striping with double parity (RAID6);
  • Striping and mirroring (RAID10).

Les volumes linéaires

Les volumes linéaires sont les volumes les plus courants de LVM. LVM essaye d'allouer l'espace au volume logique pour assurer une contiguïté physique aussi grande que possible. S'il existe un volume physique suffisamment grand pour contenir le volume logique tout entier, alors LVM lui allouera cet espace, autrement, il l'éclatera en aussi peu de morceaux que possible.

Les commandes introduites plus haut dans cette page pour la création de volumes logiques créent des volumes logiques linéaires.

Comme les volumes logiques n'ont aucune exigence particulière, ils sont les plus faciles à manipuler et peuvent être redimensionnés et ré-alloués à volonté. Si un volume logique se voit alloué de l'espace de plusieurs volumes physiques, et que l'un de ces volumes physiques devient indisponible, alors le volume logique ne peut plus être démarré et devient inutilisable.

Les volumes réfléchis

LVM prend en charge les volumes réfléchis (mirrored), qui procure une tolérance aux fautes en cas de panne de disque. À la différence de RAID, il n'y a pas de gain de performance - toutes les lectures et écritures ne se font que sur un seul coté du miroir.

Pour suivre l'état du miroir, LVM a besoin qu'un journal soit tenu. Il est conseillé (et souvent obligatoire) de placer ce journal sur un volume physique qui ne contient aucun des volumes logiques réfléchis. Il y a trois sortes de journaux utilisables avec les miroirs :

  1. Disk est le type de journal par défaut. Tous les changements effectués sont inscrits dans les étendues physiques élémentaires de méta-données supplémentaires, que LVM gère. Si un périphérique tombe en panne, alors les changements sont inscrits dans le journal jusqu'à ce que le miroir soit restauré.
  2. Les journaux de type Mirror sont des journaux de type disk qui sont eux-même réfléchis.
  3. Les journaux Core mirror enregistre l'état du miroir en mémoire seulement. LVM doit reconstruir le miroir à chaque fois qu'il est activé. Ce type de journal est utile pour les miroirs temporaires.

To create a logical volume with a single mirror, pass the -m 1 argument (to select standard mirroring) with optionally --mirrorlog to select a particular log type:

root #lvcreate -m 1 --mirrorlog mirror -l 40%VG --nosync -n lvol1 vg0

The -m 1 tells LVM to create one (additional) mirror, so requiring 2 physical volumes. The --nosync option is an optimization - without it LVM will try synchronize the mirror by copying empty sectors from one logical volume to another.

Il est possible de créer un miroir d'un volume physique existant :

root #lvconvert -m 1 -b vg0/lvol1

The -b option does the conversion in the background as this can take quite a while.

Pour retirer un miroir, repositionnez le nombre de miroirs à zéro :

root #lvconvert -m0 vg0/lvol1

Si une partie du miroir est indisponible (généralement parce que le disque contenant le volume physique est en panne), le groupe de volumes aura besoin d'être restauré dans un mode dégradé :

root #vgchange -ay --partial vg0

Dès le première écriture, LVW se rendra compte que le miroir est brisé. La politique par défaut (remove c.à.d. retirer) est de réduire/briser automatiquement le miroir selon le nombre de morceaux disponibles. Un miroir à trois volets avec un volume physique manquant sera réduit à un miroir à deux volets; un miroir à deux volets sera réduit à un volume linéaire ordinaire. Si la panne est seulement transitoire, et que le volume physique redevient disponible après que LVM a cassé le miroir, il faudra recréer le volume logique réfléchi dessus.

To recover the mirror, the failed physical volume needs to be removed from the volume group, and a replacement physical volume needs to be added (or if the volume group has a free physical volume, it can be created on that one). Then the mirror can be recreated with lvconvert at which point the old physical volume can be removed from the volume group:

root #vgextend vg0 /dev/sdc1
root #lvconvert -b -m 1 --mirrorlog disk vg0/lvol1
root #vgreduce --removemissing vg0

Il es possible de faire en sorte que LVM recrée le miroir avec des étendues physiques élémentaires libres sur un volume physique différent si un des coté est en panne. Pour cela définissez mirror_image_fault_policy à la valeur allocate dans lvm.conf.

Miroir parcimonieux

It is not (yet) possible to create a mirrored thin pool or thin volume. It is possible to create a mirrored thin pool by creating a normal mirrored logical volume and then converting the logical volume to a thin pool with lvconvert. 2 logical volumes are required: one for the thin pool and one for the thin metadata; the conversion process will merge them into a single logical volume.

Attention !
LVM 2.02.98 ou postérieur est requis pour que cela fonctionne correctement. Les versions antérieures sont, soit incapables, soit produiront des erreurs de segmentation et corrompront le groupe de volumes. De plus, la conversion d'un miroir en un pool parcimonieux détruit toutes les données présentes dans le miroir !
root #lvcreate -m 1 --mirrorlog mirrored -l40%VG -n thin_pool vg0
root #lvcreate -m 1 --mirrorlog mirrored -L4MB -n thin_meta vg0
root #lvconvert --thinpool vg0/thin_pool --poolmetadata vg0/thin_meta

Segmentation répartie (RAID0)

Instead of a linear volume, where multiple contiguous physical volumes are appended, it possible to create a striped or RAID0 volume for better performance. This will alternate storage allocations across the available physical volumes.

Pour créer un volume à segmentation répartie sur 3 volumes physiques :

root #lvcreate -i 3 -l 20%VG -n lvol1_stripe vg0
Using default stripesize 64.00 KiB

The -i option indicates over how many physical volumes the striping should be done.

It is possible to mirror a stripe set. The -i and -m options can be combined to create a striped mirror:

root #lvcreate -i 2 -m 1 -l 10%VG vg0

This creates a 2 physical volume stripe set and mirrors it on 2 different physical volumes, for a total of 4 physical volumes. An existing stripe set can be mirrored with lvconvert.

Un pool parcimonieux peut être rendu à segmentation répartie comme tout autre volume logique. Tous les volumes parcimonieux créés à partir du pool héritent de ces réglages - ne les spécifiez pas à la main lorsque vous créez un volume parcimonieux.

Il n'est pas possible de transformer un volume existant en un volume à segmentation répartie, ni de redéfinir la répartition sur plus ou moins de volumes physiques, ni de le convertir en un volume linéaire de niveau de RAID différent. Un volume à segmentation répartie peut être réfléchi. Il est possible d'étendre un volume à segmentation répartie sur des volumes physiques additionnels, mais ces derniers doivent être ajoutés en multiples de ceux du volume original (ce qui ajoutera linéairement un nouveau volume à segmentation répartie).

Réflexion (RAID1)

Unlike RAID0, which is striping, RAID1 is mirroring, but implemented differently than the original LVM mirror. Under RAID1, reads are spread out across physical volumes, improving performance. RAID1 mirror failures do not cause I/O to block because LVM does not need to break it on write.

Any place where an LVM mirror could be used, a RAID1 mirror can be used in its place. It is possible to have LVM create RAID1 mirrors instead of regular mirrors implicitly by setting mirror_segtype_default to raid1 in lvm.conf.

Warning
LVM RAID1 mirroring is not yet supported by GRUB. If you apply this to the LVM volume that holds your kernel/initramfs (your 'boot' volume), you will render your system unbootable. (A fix will appear in the next version of GRUB. See GRUB bug #44534 for details.)

Pour créer un volume logique avec un miroir unique :

root #lvcreate -m 1 --type raid1 -l 40%VG --nosync -n lvm_raid1 vg0

Notez la différence pour créer un miroir : il n'y a pas de mirorlog spécifié, parce que les volumes RAID1 n'ont pas de journal miroir explicite - it built-in to the logical volume.

It is possible to convert an existing logical volume to RAID1:

root #lvconvert -m 1 --type raid1 -b vg0/lvol1

To remove a RAID1 mirror, set the number of mirrors to 0:

root #lvconvert -m0 vg0/lvm_raid1

Si une partie de RAID1 est indisponible (en général parce qu'un des disques contenant le volume physique est en panne), le groupe de volume doit être mis dans un état dégradé:

root #vgchange -ay --partial vg0

Unlike an LVM mirror, writing does NOT break the mirroring. If the failure is only transient, and the missing physical volume returns, LVM will resync the mirror by copying cover the out-of-date segments instead of the entire logical volume. If the failure is permanent, then the failed physical volume needs to be removed from the volume group, and a replacement physical volume needs to be added (or if the volume group has a free physical volume, it can be created on a different PV). The mirror can then be repaired with lvconvert, and the old physical volume can be removed from the volume group:

root #vgextend vg0 /dev/sdc1
root #lvconvert --repair -b vg0/lvm_raid1
root #vgreduce --removemissing vg0

RAID1 parcimonieux

It is not (yet) possible to create a RAID1 thin pool or thin volume. It is possible to create a RAID1 thin pool by creating a normal mirrored logical volume and then converting the logical volume to a thin pool with lvconvert. 2 logical volumes are required: one for the thin pool and one for the thin metadata; the conversion process will then merge them into a single logical volume.

Warning
LVM 2.02.98 or above is required for this to work properly. Prior versions are either not capable or will segfault and corrupt the VG. Also, conversion of a RAID1 into a thin pool destroys all existing data in the mirror!
root #lvcreate -m 1 --type raid1 -l40%VG -n thin_pool vg0
root #lvcreate -m 1 --type raid1 -L4MB -n thin_meta vg0
root #lvconvert --thinpool vg0/thin_pool --poolmetadata vg00/thin_meta

Segmentation répartie avec parité (RAID4 et RAID5)

Note
La segmentation répartie avec parité nécessite au moins 3 volumes physiques.

RAID0 is not fault-tolerant - if any of the physical volumes fail then the logical volume is unusable. By adding a parity stripe to RAID0 the logical volume can still function if a physical volume is missing. A new physical volume can then be added to restore fault tolerance.

Stripsets with parity come in 2 flavors: RAID4 and RAID5. Under RAID4, all the parity stripes are stored on the same physical volume. This can become a bottleneck because all writes hit that physical volume, and it gets worse the more physical volumes are in the array. With RAID5, the parity data is distributed evenly across the physical volumes so none of them become a bottleneck. For that reason, RAID4 is rare and is considered obsolete/historical. In practice, all stripesets with parity are RAID5.

root #lvcreate --type raid5 -l 20%VG -i 2 -n lvm_raid5 vg0

Seuls les volumes physiques de données sont spécifiés avec -i, LVM en ajoute un automatiquement pour la parité. Ainsi pour un RAID 5 à 3 volumes physiques, on donne -i 2 et non pas -i 3.

Lorsqu'un volume physique est défaillant, le groupe de volume doit être mis dans un mode dégradé :

root #vgchange -ay --partial vg0

The volume will work normally at this point, however this degrades the array to RAID0 until a replacement physical volume is added. Performance is unlikely to be affected while the array is degraded - although it does need to recompute its missing data via parity, it only requires simple XOR for the parity block with the remaining data. The overhead is negligible compared to the disk I/O.

Réparer le RAID 5 :

root #lvconvert --repair vg0/lvm_raid5
root #vgreduce --removemissing vg0

Il est possible de remplacer un volume physique toujours opérationnel en RAID 5 également :

root #lvconvert --replace /dev/sdb1 vg0/lvm_raid5
root #vgreduce vg0 /dev/sdb1

Les mêmes restrictions qui s'appliquent aux volumes à segmentation répartie s'appliquent également aux volumes à segmentation répartie avec parité : il n'est pas possible de reformer les volumes à segmentation répartie sur plus ou moins de volumes physiques, ni de les reconvertir en un volume linéaire RAID de niveau différent. Un volume à segmentation répartie avec parité peut être réfléchi. Il est possible de l'étendre sur des volumes physiques additionnels, mais ils doivent être ajoutés en multiples du volume à segmentation répartie avec parité (ce qui ajoute effectivement linéairement un nouveau volume à segmentation répartie avec parité).

Volumes logiques RAID 5 parcimonieux

It is not (yet) possible to create stripe set with parity (RAID5) thin pools or thin logical volumes. It is possible to create a RAID5 thin pool by creating a normal RAID5 logical volume and then converting the logical volume into a thin pool with lvconvert. 2 logical volumes are required: one for the thin pool and one for the thin metadata; the conversion process will merge them into a single logical volume.

Attention !
Une version 2.02.98 de LVM ou ultérieure est requise pour que cela fonctionne correctement. Les versions antérieures sont, soit incapables, soit conduisent à des fautes de segmentation et corrompent le groupe de volumes. Notez également que la conversion d'un volume logique RAID5 en un pool parcimonieux détruit toutes les données existantes du volume logique !
root #lvcreate --type raid5 -i 2 -l20%VG -n thin_pool vg0
root #lvcreate --type raid5 -i 2 -L4MB -n thin_meta vg0
root #lvconvert --thinpool vg0/thin_pool --poolmetadata vg00/thin_meta

Segmentation répartie avec double parité (RAID6)

Note
RAID6 requiert au moins 5 volumes physiques.

RAID6 is similar to RAID5, however RAID6 can survive up to two physical volume failures, thus offering more fault tolerance than RAID5 at the expense of extra physical volumes.

root #lvcreate --type raid6 -l 20%VG -i 3 -n lvm_raid6 vg00

Like RAID5, the -i option is used to specify the number of physical volumes to stripe, excluding the 2 physical volumes for parity. So for a 5 physical volume RAID6, pass on -i 3 and not -i 5.

La récupération pour RAID6 est la même que pour RAID5.

Note
Contrairement à RAID5 où les blocs de parité sont peu coûteux à recompiler vs des entrées/sorties sur disque, ceci est à moitié vrai en RAID6. RAID6 utilise deux segments de parité : l'un est compilé comme pour RAID5 (simple XOR). Le second est plus difficiel à compiler - reportez-vous à [https://www.kernel.org/pub/linux/kernel/people/hpa/raid6.pdf

Les volumes logiques RAID6 parcimonieux

It is not (yet) possible to create a RAID6 thin pool or thin volumes. It is possible to create a RAID6 thin pool by creating a normal RAID6 logical volume and then converting the logical volume into a thin pool with lvconvert. 2 logical volumes are required: one for the thin pool and one for the thin metadata; the conversion process will merge them into a single logical volume.

Attention !
Une version 2.02.98 de LVM ou ultérieure es requise pour que cela fonctionne bien. Les versions antérieures sont, soit incapables, soit conduisent à des fautes de segmentation et corrompent le groupe de volumes. Notez également que la conversion d'un volume RAID6 en un pool parcimonieux détruit' toutes les données existantes dans le volume logique !
root #lvcreate --type raid6 -i 2 -l20%VG -n thin_pool vg0
root #lvcreate --type raid6 -i 2 -L4MB -n thin_meta vg0
root #lvconvert --thinpool vg0/thin_pool --poolmetadata vg0/thin_meta

LVM RAID10

Note
RAID10 nécessite au moins 4 volumes physiques. De plus la syntaxe de LVM demande que le nombre de volumes physiques soit un multiple du nombre de bandes et de miroirs, même si le format RAID10 ne le requiert pas.

RAID10 est une combinaison de RAID0 et de RAID1. Il est plus puissant que RAID0+RAID1 car la réflexion est faite au niveau des bandes plutôt qu'au niveau du volume logique. En conséquence l'agencement n'a pas besoin d'être symétrique. Un volume RAID10 peut tolérer au moins un volume physique manquant, et possiblement plus.

Note
Au stade actuel, LVM limite RAID10 à un miroir unique.
root #lvcreate --type raid10 -l 1020 -i 2 -m 1 --nosync -n lvm_raid10 vg0

Both the -i and -m options are specified: -i is the number of stripes and -m is the number of mirrors. Two stripes and 1 mirror requires 4 physical volumes.

RAID10 parcimonieux

It is not (yet) possible to create a RAID10 thin pool or thin volumes. It is possible to create a RAID10 thin pool by creating a normal RAID10 logical volume and then converting the logical volume into a thin pool with lvconvert. 2 logical volumes are required: one for the thin pool and one for the thin metadata; the conversion process will merge them into a single logical volume.

Warning
Conversion of a RAID10 logical volume into a thin pool destroys all existing data in the logical volume!
root #lvcreate -i 2 -m 1 --type raid10 -l 1012 -n thin_pool vg0
root #lvcreate -i 2 -m 1 --type raid10 -l 6 -n thin_meta vg0
root #lvconvert --thinpool vg0/thin_pool --poolmetadata vg0/thin_meta

Expérimenter avec LVM

Il est possible d'expérimenter avec LVM sans utiliser des périphériques de stockage réels. Pour ce faire, les périphériques de boucle de retour sont créés.

Tout d'abord, assurez-vous que le module de boucle de retour loopback est chargé.

root #modprobe -r loop && modprobe loop max_part=63
Note
Si la prise en charge de boucle de retour est pré-construite dans le noyau, alors utilisez l'option de boot loop.max_part=63.

Ensuite configurez LVM pour qu'il n'utilise pas udev pour scanner les périphériques :

FILE /etc/lvm/lvm.confDisabling udev in LVM config
obtain_device_list_from_udev = 0
Important
Ceci est à des fins de test seulement, assurez-vous de restaurer les réglages initiaux lorsque vous voudrez avoir affaire à des périphériques réels puisque l'utilisation de udev est plus rapide !

Créez quelques fichiers images qui deviendront vos périphériques de stockage. L'exemple suivant utilise 5 fichiers pour un total d'environ ~10 GO d'espace disque réel :

root #mkdir /var/lib/lvm_img
root #dd if=/dev/null of=/var/lib/lvm_img/lvm0.img bs=1024 seek=2097152
root #dd if=/dev/null of=/var/lib/lvm_img/lvm1.img bs=1024 seek=2097152
root #dd if=/dev/null of=/var/lib/lvm_img/lvm2.img bs=1024 seek=2097152
root #dd if=/dev/null of=/var/lib/lvm_img/lvm3.img bs=1024 seek=2097152
root #dd if=/dev/null of=/var/lib/lvm_img/lvm4.img bs=1024 seek=2097152

Vérifiez quels sont les périphériques de boucle de retour disponibles :

root #losetup -a

En supposant que tous les périphériques de boucle de retours soient disponibles, créez les périphériques :

root #losetup /dev/loop0 /var/lib/lvm_img/lvm0.img
root #losetup /dev/loop1 /var/lib/lvm_img/lvm1.img
root #losetup /dev/loop2 /var/lib/lvm_img/lvm2.img
root #losetup /dev/loop3 /var/lib/lvm_img/lvm3.img
root #losetup /dev/loop4 /var/lib/lvm_img/lvm4.img

Les périphériques /dev/loop[0-4] sont désormais disponibles pour une utilisation identique à celle de tout autre disque dur du système (et par conséquent parfaits pour les volumes physiques).

Note
Au prochain démarrage, tous les périphériques de boucle de retour seront libérés et le dossier /var/lib/lvm_imgpourra être effacé.

Dépannage

LVM dispose de quelques fonctionnalités qui offrent déjà quelques niveaux de redondance. Néanmoins, il y a des situations où il est possible de restaurer des volumes physiques ou logiques perdus.

La fonctionnalité vgcfgrestore

Par défaut, lors de tout changement apporté à un volume LVM physique, à un groupe de volumes, ou à un volume logique, LVM2 crée un fichier de sauvegarde des méta-données dans /etc/lvm/archive. Ces fichiers peuvent être utilisés pour récupérer d'un changement accidentel (tel que l'effacement malencontreux d'un volume physique). LVM tient également une copie de sauvegarde des méta-données les plus récentes dans /etc/lvm/backup. Ces copies peuvent être utilisées pour restaurer le méta-données sur un disque de rechange, ou pour réparer les méta-données corrompues.

Pour connaître quels sont les états disponibles du groupe de volumes pour restauration (listing partiel pour améliorer la lisibilité):

root #vgcfgrestore --list vg00
  File:		/etc/lvm/archive/vg0_00042-302371184.vg
  VG name:    	vg0
  Description:	Created *before* executing 'lvremove vg0/lvm_raid1'
  Backup Time:	Sat Jul 13 01:41:32 201

Restaurer un volume logique accidentellement effacé

En supposant que le volume logique lvw_raid1 ait été effacé accidentellement du groupe de volumes vg0, il est possible de le restaurer de la manière suivante :

root #vgcfgrestore -f /etc/lvm/archive/vg0_00042-302371184.vg vg0
Important
vgcfgrestore only restores LVM metadata, not the data inside the logical volume. However pvremove, vgremove, and lvremove only wipe metadata, leaving any data intact. If issue_discards is set in /etc/lvm/lvm.conf though, then these command are destructive to data.

Remplacer un volume physique défaillant

Il est possible de faire un remplacement véritable et de recréer les méta-données sur un nouveau volume physique pour qu'il soit identique à l'ancien volume physique :

root #vgdisplay --partial --verbose
  --- Physical volumes ---
  PV Name               /dev/loop0     
  PV UUID               iLdp2U-GX3X-W2PY-aSlX-AVE9-7zVC-Cjr5VU
  PV Status             allocatable
  Total PE / Free PE    511 / 102
  
  PV Name               unknown device     
  PV UUID               T7bUjc-PYoO-bMqI-53vh-uxOV-xHYv-0VejBY
  PV Status             allocatable
  Total PE / Free PE    511 / 102

La ligne importante ici est UUID unknown device.

root #pvcreate --uuid T7bUjc-PYoO-bMqI-53vh-uxOV-xHYv-0VejBY --restorefile /etc/lvm/backup/vg0 /dev/loop1
  Couldn't find device with uuid T7bUjc-PYoO-bMqI-53vh-uxOV-xHYv-0VejBY.
  Physical volume "/dev/loop1" successfully created

Ceci recrée les méta-données du volume physique, mais pas le volume logique manquant ou les données manquantes du groupe de volume sur le volume physique.

root #vgcfgrestore -f /etc/lvm/backup/vg0 vg0
  Restored volume group vg0

Ceci reconstruit maintenant toutes les méta-données manquantes sur le volume physique, y compris le volume logique et les données du groupe de volumes. Cependant, cela ne restaure pas les données, et le miroir est ainsi hors synchronisation.

root #vgchange -ay vg0
  device-mapper: reload ioctl on  failed: Invalid argument
  1 logical volume(s) in volume group "vg0" now active
root #lvchange --resync vg0/lvm_raid1
Do you really want to deactivate logical volume lvm_raid1 to resync it? [y/n]: y

Ceci resynchronise le miroir. Cela fonctionne avec RAID 4, 5 et 6.

Désactiver un volume logique

Il est possible de désactiver un volume logique via la commande suivante :

root #umount /dev/vg0/lvol1
root #lvchange -a n /dev/vg0/lvol1

Il n'est pas possible de monter le volume logique tant qu'il n'est pas réactivé.

root #lvchange -a y /dev/vg0/lvol1

Ressources externes