LVM

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

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎polski • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

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
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
Tout ne doit pas être activé; quelques unes des options ne sont nécessaires que pour les Instantanés LVM2 et les Instantanés LVM2 parcimonieux, LVM2 Mirrors, LVM2 RAID 0/Stripeset et le cryptage.

Logiciel

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

device-mapper-only Build only device-mapper and not the rest of LVM2 (UNSUPPORTED)
lvm2create_initrd Install lvm2create_initrd script and pull in sys-apps/makedev for the /sbin/MAKEDEV command
readline Enable support for libreadline, a GNU line-editing library that almost everyone wants
sanlock Enable lvmlockd with support for sanlock
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
static !!do not set this during bootstrap!! Causes binaries to be statically linked instead of dynamically
static-libs Build static versions of dynamic libraries as well
systemd Enable use of systemd-specific libraries and features like socket activation or session tracking
thin Support for thin volumes
udev Enable virtual/udev integration (device discovery, power and storage device support, etc)
The above template uses deprecated functionality. Help us update this template!

Emerge

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

root #emerge --ask lvm2


Handbook

The handbook does not contain specific steps for installing Gentoo using LVMs. The following steps complement the handbook.


Preparing the disks

To stick with the handbook partitioning theme the following scheme will be used:

Partition Filesystem Size Description
/dev/sda1 (bootloader) 2M BIOS boot partition
/dev/sda2 ext2 (or fat32 if UEFI is being used) 128M Boot/EFI system partition
/dev/sda3 LVM Rest of the disk LVM Volume Group


The Logical Volume vg01 will then be used for the Swap and Root partitions:

Logical Volume Name Filesystem Size Description
swap (swap) 512M or higher Swap partition
rootfs ext4 Rest of the volume group Root partition


Using parted to partition the disk
root #parted -a optimal /dev/sda

GNU Parted 2.3 Using /dev/sda

Welcome to GNU Parted! Type 'help' to view a list of commands.


Setting the GPT label
(parted)mklabel gpt
Creating the partitions

Now create a 2 MB partition that will be used by the GRUB2 boot loader later.

(parted)mkpart primary 1 3
(parted)name 1 grub
(parted)set 1 bios_grub on

Do the same for the boot partition (128 MB).

(parted)mkpart primary 3 131
(parted)name 2 boot
(parted)set 2 boot on

Now create the partition 3 with the lvm flag using the remaining space:

(parted)mkpart primary 131 -1
(parted)name 3 lvm01
(parted)set 3 lvm on

The end result looks like so:

(parted)print

Model: VMware Virtual disk (scsi) Disk /dev/sda: 17.2GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags:

Number Start End Size File system Name Flags

1      1049kB  3146kB  2097kB               grub   bios_grub
2      3146kB  131MB   128MB                boot   boot, esp
3      131MB   17.2GB  17.0GB               lvm01  lvm
Creating the physical volume

This creates a physical volume that will be used to store the volume group on:

root #pvcreate /dev/sda3
 Physical volume "/dev/sda3" successfully created.


Creating the volume group

This creates a volume that will be used to store the logical volumes on:

root #vgcreate vg01 /dev/sda3
 Volume group "vg01" successfully created


Creating the logical volumes

This creates the logical volume for the swap of 512M:

root #lvcreate -L 512M -n swap vg01
 Logical volume "swap" created.

This creates the logical volume for the root filesystem using the remaining space:

root #lvcreate -l 100%VG -n rootfs vg01
 Logical volume "rootfs" created.
Creating the filesystems

Create the boot partition (/dev/sda2) in ext2:

root #mkfs.ext2 /dev/sda2

Create the root partition (/dev/vg01/rootfs) in ext4:

root #mkfs.ext4 /dev/vg01/rootfs


Activating the swap partition

Make the swap partition (/dev/vg01/swap):

root #mkswap /dev/vg01/swap

Activate the swap partition:

root #swapon /dev/vg01/swap


Mounting the root partition

Mount the root partition:

root #mount /dev/vg01/rootfs /mnt/gentoo


Configuring the Linux kernel

You will need to build an initramfs so the LVM can be mounted. After installing make install command execute the following:

root #emerge --ask sys-kernel/genkernel
root #genkernel --lvm --install initramfs


Configuring the system

Edit the /etc/fstab file:

root #nano -w /etc/fstab

Here is a the /etc/fstab file contents for this guide:

FILE /etc/fstabA full /etc/fstab example
/dev/sda2          /boot        ext2    defaults,noatime     0 2
/dev/vg01/swap     none         swap    sw                   0 0
/dev/vg01/rootfs   /            ext4    noatime              0 1
 
/dev/cdrom  /mnt/cdrom   auto    noauto,user          0 0


Configuring the bootloader

Emerge

GRUB needs to be compiled with device-mapper, execute the following command first:

root #echo 'sys-boot/grub:2 device-mapper' >> /etc/portage/package.use/package.use


Install

Now install GRUB:

root #emerge --ask --verbose sys-boot/grub:2
  • When using BIOS:
root #grub-install /dev/sda

Installing for i386-pc platform.

Installation finished. No error reported.
  • When using UEFI:
root #grub-install -target=x86_64-efi --efi-directory=/boot
Configure

The dolvm option needs to be enabled for GRUB_CMDLINE_LINUX_DEFAULT in the /etc/default/grub file, edit it:

root #nano -w /etc/default/grub


Configure the option:

FILE /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT option
GRUB_CMDLINE_LINUX_DEFAULT="dolvm"


Now generate the GRUB2 configuration:

root #grub-mkconfig -o /boot/grub/grub.cfg

Generating grub configuration file ...

 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.

Found linux image: /boot/vmlinuz-4.12.12-gentoo Found initrd image: /boot/initramfs-genkernel-x86_64-4.12.12-gentoo

 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.

done

Note
You can ignore these WARNINGS:

/run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning.


Reboot

You can now reboot the system, it should boot up OK.


Fixing a non-booting system

If your system doesn't boot you will need to boot back to the installation medium to resolve the issues. Executing the following commands will allow you to make any changes using the guide:

root #vgchange -ay vg01
root #swapon /dev/vg01/swap
root #mount /dev/vg01/rootfs /mnt/gentoo
root #mount -t proc /proc /mnt/gentoo/proc
root #mount --rbind /sys /mnt/gentoo/sys
root #mount --make-rslave /mnt/gentoo/sys
root #mount --rbind /dev /mnt/gentoo/dev
root #mount --make-rslave /mnt/gentoo/dev
root #chroot /mnt/gentoo /bin/bash
root #source /etc/profile
root #mount /dev/sda2 /boot

Configuration

La configuration de LVM se fait à plusieurs niveaux:

  1. Gestion de volumes logiques, pool de volumes et groupes de volumes via l'utilitaire de gestion
  2. Peaufinage du sous-système LVM via les fichiers de configuration
  3. Gestion du service au niveau de la distribution
  4. configuration via un disque virtuel de démarrage

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.

Pour cette raison, il est conseillé d'utiliser une partition de démarrage (boot) non LVM et de monter la racine LVM depuis un système de fichiers virtuel de démarrage (initramfs). Un tel système de fichiers virtuel peut être généré automatiquement via genkernel, genkernel-next et dracut:

  • genkernel ne peut pas amorcer depuis tous les types sauf depuis les volumes parcimonieux (puisqu'il ne compile/construit ni ne copie les binaires des outils thin-provisionning (allocation parcimonieuse) de l'hôte de compilation/construction) et peut-être RAID10 (la prise en charge de RAID10 nécessite LVM2 2.02.98, mais genkernel compile 2.02.89, néanmoins si des binaires statiques sont disponibles, il peut les copier)
  • genkernel-next ne peut pas amorcer depuis tous les types volumes, mais a besoin d'un paquet app-misc/pax-utils suffisamment récent sous peine de voir les binaires thin (parcimonieux) cassés (voir bug #482504)
  • dracut devrait amorcer tous les types, mais n'inclut que la prise en charge thin (parcimonieux) dans le système de fichiers virtuel de démarrage (initramfs) si l'hôte sur lequel on l'exécute à une racine thin (parcimonieuse).

Genkernel/Genkernel-next

Installez le paquet sys-kernel/genkernel ou le paquet sys-kernel/genkernel-next. L'option static de la variable USE doit aussi être activée sur le paquet sys-fs/lvm2 de façon à ce que genkernel utilise les binaires système (autrement il construirait sa propre copie privée). L'exemple suivant construit seulement un système de fichiers virtuel de démarrage (pas un noyau entier) et active la prise en charge de LVM.

root #genkernel --lvm initramfs

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

Le disque virtuel de démarrage (initrd) demande certains paramètres pour savoir démarrer lvm. Ils lui sont fournis de la même manière que les autres paramètres du noyau. Par exemple :

FILE /etc/default/grubAjouter dolvm en tant que paramètre de démarrage du noyau
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

Le disque virtuel de démarrage requiert quelques paramètres pour le renseigner sur l'endroit où démarrer lvm. Ces derniers sont transmis de la même façon que les autres paramètres du noyau. Par exemple :

FILE /etc/default/grubAjouter la prise en charge de LVM aux paramètres de démarrage du noyau
GRUB_CMDLINE_LINUX="rd.lvm.vg=vol00"

Pour une liste exhaustive des options de lvm avec dracut, reportez-vous à la section concernée du manuel de dracut.

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).

Par exemple, pour définir le type, via fdisk, d'une partition /dev/sda:

root #fdisk /dev/sda

Dans fdisk, ajoutez une partition en tapant n (nouvelle) et changez le type de la partition en tapant t (type) et en saisissant 8e.

Créer un volume physique

Les volumes physiques peuvent être créés et initialisés avec la commande pvcreate.

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

La commande pvdisplay retourne une vue d'ensemble de tous les volumes physiques du système.

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

Si plus de volumes physiques devraient être affichés, alors la commande pvscan est capable de détecter les volumes physiques inactifs et peut les activer.

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.

S'il est nécessaire de retirer un volume physique d'un groupe de volumes, les données doivent d'abord être déplacées en dehors de ce volume physique. La commande pvmove permet de déplacer toutes les données d'un volume physique à un autre à l'intérieur d'un même groupe de volumes.

root #pvmove -v /dev/sda1

Une telle opération peut prendre beaucoup de temps selon l'importance volumique des données à déplacer. Une fois terminée, il ne devrait rester aucune donnée sur ce périphérique. Vérifiez que le volume physique n'est plus utilisé par un volume logique avec la commande pvdisplay.

L'étape suivante consiste à retirer le volume physique du groupe de volumes. La commande vgreduce est là pour cela. Après l'avoir utilisée, le volume peut être détaché du groupe de volumes par la commande 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

La commande vgdisplay retourne la liste des groupes de volumes actifs:

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

Si des groupes de volumes n'apparaissent pas, utilisez la commande vgscan pour les localiser :

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

Si des volumes physiques doivent être retiré d'un groupe de volumes, toutes les données encore utilisées de ce volume physique doivent être déplacées vers d'autres volumes physiques à l'intérieur du groupe de volumes. Comme nous l'avons vu précédemment, on utilise pour cela la commande pvmove. Après cela, le volume physique peut être retiré du groupe en utilisant la commande vgreduce :

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

Retirer un groupe de volumes

Si un groupe de volumes n'est plus nécessaire (ou en d'autres termes, le pool de stockage qu'il représente n'est plus utilisé et que les volumes physiques qui le composent peuvent être libérés pour une autre utilisation), il peut être retiré avec la commande vgremove. Ceci ne fonctionne que si aucun volume logique n'est défini pour ce groupe de volumes, et que si tous les volumes physiques, à l'exception d'un seul, ont été retirés de ce 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

La commande lvcreate crée un volume logique. Les paramètres passés à la commande sont la taille requise (qui ne peut excéder la taille de l'espace libre dans le groupe de volume), le groupe de volumes à qui l'espace est réclamé et le nom du volume logique à créer.

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

Il est possible de spécifier à la commande lvcreate d'utiliser tout l'espace libre d'un groupe de volumes. On utilise pour cela le paramètre -l qui spécifie la taille en nombre d' étendues physiques élémentaires (extents) plutôt qu'une taille (interprétable par un humain). Les volumes logiques sont éclatés en étendues logiques élémentaires (logical extents) qui représentent des blocs de données dans un groupe de volumes. Tous les étendues physiques élémentaires dans un groupe de volumes possèdent la même taille. Via le paramètre -l, on spécifie à la commande lvcreate d'allouer toutes les étendues physiques élémentaires libres.

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

Pour lister tous les groupes de volumes, utilisez la commande lvdisplay.

root #lvdisplay

Si des volumes logiques n'apparaissent pas, on peut utiliser la commande lvscan pour détecter tous les volumes logiques dans tous les groupes de volumes disponibles.

root #lvscan

Étendre un volume logique

Lorsqu'un volume logique doit être étendu, on peut utiliser la commande lvextend pour étendre l'espace alloué à ce 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 /mnt/data 500M

For certain file systems, lvreseize extends the logical volume and the file system in one step. For instance, to extend the logical volume lvol1 and resize the ext4 file system:

root #lvresize --resizefs --size +350GB /dev/vg0/lvol1

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.

Par exemple, on peut déclarer un volume logique en lecture seule en utilisant la commande lvchange :

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

De récentes version de LVM2 (2.02.89) prennent en charge les volumes à allocation parcimonieuse (thin volumes ou volumes parcimonieux). Les volumes parcimonieux sont aux périphériques de blocs, ce que les fichiers parcimonieux (sparse files) sont aux systèmes de fichiers. En conséquences, un volume logique parcimonieux à l'intérieur d'un pool peut être sur-engagé : sa taille affichée peut être supérieure à l'espace qui lui est alloué - il peut même être plus volumineux que le pool lui-même. Tout comme un fichier parcimonieux, les étendues physiques élémentaires sont allouées au fur et à mesure que le périphérique de blocs est peuplé. Si le système de fichiers prend en charge la fonctionnalité discard(rejette), des étendues physiques élémentaires sont à nouveau libérées dès lors que des fichiers sont retirés, réduisant ainsi l'utilisation d'espace du 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. .

Chaque pool parcimonieux possède des méta-données associées, qui augmentent la taille du pool parcimonieux. LVM calcule la taille des méta-données en se basant sur la taille du pool parcimonieux comme étant le minimum de pool_chunks * 64 octets et de <2 MO. L'administrateur peut choisir un taille des méta-données différentes.

Pou créer un pool parcimonieux, ajoutez les paramètres--type thin-pool --thinpool thin_pool à 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é).

Pour requérir explicitement une certaine taille des méta-données, utilisez le paramètre --metadatasize :

root #lvcreate -L 150M --metadatasize 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

An volume logique parcimonieux (thin logical volume) est un volume logique à l'intérieur d'un pool (qui est lui-même un volume logique). Comme les volumes logiques parcimonieux sont parcimonieux (sparse), une taille virtuelle plutôt que physique est spécifiée à l'aide du paramètre -v :

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

Les pools parcimonieux et les volumes logiques parcimonieux sont des types spéciaux de volumes logiques, et, en tant que tels, affichés via la commande lvdisplay. La commande lvscan détecte également ces volumes logiques.

É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.

Le pool parcimonieux est étendu comme un volume logique non parcimonieux via la commande lvextend . Par exemple :

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

Notez que la commande lvextend utilise l'option -L (ou -l si les compteurs d'étendues physiques élémentaires sont utilisés) et non pas une option taille virtuelle telle que celle utilisée lors de la création.

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

Notez que la commande lvreduce utilise l'option -L (ou -l si les compteurs d'étendues physiques élémentaires sont utilisés) et non pas une option taille virtuelle telle que celle utilisée lors de la création.

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.

Lorsqu'un pool ne sert plus à aucun volume logique, il peut être retiré via la commande lvremove :

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

Un volume logique instantané est créé via l'option -s de la commande lvcreate. Les volumes logiques instantanés reçoivent de l'espace car LVM y enregistre tous les changements apportés au volume logique original. Lorsque l'on s'enquière de l'état de l'instantané, LVM démarre du volume logique original et évalue tous les changements enregistrés, "défaisant les changements avant de montrer le résultat à l'utilisateur.

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.

Pour créer un instantané parcimonieux, utilisez la commande lvcreate avec l'option -s . Il n'est pas nécessaire de communiquer une taille :

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

Ceci peut prendre quelques minutes, selon la taille du volume.

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

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

Pour les volumes parcimonieux, la commande lvconvert --merge ne fonctionne pas. Au lieu de cela, supprimez le volume logique original et renommez l'instantané :

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 prend en charge plusieurs méthodes d'allocation d'espace de stockage:

  • les volumes linéaires (qui est la méthode par défaut)
  • les volumes réfléchis (mirrored) (dans une configuration plus ou moins active/standby)
  • la segmentation répartie (stripping) (RAID0)
  • les volumes réfléchis (RAID1 - qui est plutôt une configuration active/active )
  • la segmentation répartie avec parité (RAID4 et RAID5)
  • la segmentation répartie avec double parité (RAID6)
  • segmentation répartie et réflexion (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.

Pour créer un volume logique avec un miroir unique, passez l'argument -m 1 (pour sélectionner la réflexion standard ) et optionnellement --mirrorlog pour sélectionner un type particulier de journal :

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

L'option -m 1 demande à LVM de créer un miroir (supplémentaire), requérant ainsi 2 volumes physiques . L'option --nosync est une optimisation - sans elle LVM essaye de synchroniser le miroir en copiant des secteurs vides d'un volume logique à l'autre.

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

root #lvconvert -m 1 -b vg0/lvol1

L'option -b effectue la conversion en arrière plan et cela peut prendre un certain temps.

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.

Pour récupérer le miroir, le volume physique en panne doit être retiré du groupe de volumes, et un volume physique de rechange doit être ajouté (ou si le groupe de volume dispose d'un volume physique libre, il peut être recréé sur ce dernier). Alors le miroir peut être recréé avec l'option lvconvert permettant ainsi le retrait de l'ancien volume du groupe :

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

Il n'est pas possible actuellement de créer un pool parcimonieux réfléchi ou un volume parcimonieux réfléchi. Il est possible de créer un pool parcimonieux réfléchi en créant un volume logique ordinaire réfléchi et en le convertissant en pool parcimonieux avec la commande lvconvert. 2 volumes logiques sont requis: un pour le pool parcimonieux et l'autre pour les méta-données parcimonieuses ; le processus de conversion les fusionnera en un unique volume logique.

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)

Au lieu d'un volume linéaire, où de multiples volumes physiques contigües sont ajoutés, il est possible de créer un volume à segmentation répartie ou RAID 0 pour améliorer la performance.Ce principe segmente l'information et répartit alternativement les segments sur les volumes physiques disponibles ; une suite de segment contigües formant un bande qui s'étend à travers les différents volumes physiques.

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

L'option -i sur combien de volumes physiques la répartition doit avoir lieu.

Il est possible de réfléchir un volume à segmentation répartie. Les options -i et -m peuvent être combinées pour créer un miroir à segmentation répartie.

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

Ceci crée 2 volumes à segmentation répartie et les réfléchit sur 2 volumes physiques différents, pour un total de 4 volumes physiques. Un volume à segmentation répartie existant peut être réfléchi via la commande 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)

À la différence de RAID 0, qui correspond à la segmentation répartie, RAID 1 correspond à la réflexion, mais mis en œuvre différemment du miroir LVM original. Sous RAID 1, les lectures sont réparties à travers les volumes physiques, améliorant ainsi la performance. Une panne du miroir RAID 1 ne conduit pas à un blocage des entrées/sorties parce que LVM n'a pas besoin de le casser en écriture.

Partout où un miroir LVM peut être utilisé, un miroir RAID 1 peut l'être à sa place. Il est possible de faire que LVM crée implicitement des miroirs RAID 1 au lieu de miroir ordinaires en définissant la variable mirror_segtype_default à raid1 dans le fichier 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.

Il est possible de convertir un volume existant en RAID 1 :

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

Pour retirer un miroir RAID 1, mettez le nombre de miroirs à 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

Contrairement à un miroir LVM, écrire ne brise pas le miroir. Si la panne est seulement transitoire, et que le volume manquant réapparaît, LVM resynchronise le miroir en recopiant les segments périmés plutôt que le volume logique tout entier. Si la panne est permanente, il faut retirer le volume physique du groupe de volumes, et un volume physique de remplacement doit être ajouté (ou si le groupe de volumes dispose d'un volume physique libre, il peut être créé sur un volume physique différent). Le miroir peut être réparé via la commande lvconvert, et le volume physique en panne peut être retiré du groupe de volumes.

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

RAID1 parcimonieux

Il n'est pas, pour le moment, possible de créer un pool RAID 1 parcimonieux ou un volume parcimonieux. Il est possible de créer un pool RAID 1 parcimonieux en créant un volume logique réfléchi ordinaire et en convertissant le volume logique en un pool parcimonieux avec la commande lvconvert. 2 volumes logiques sont nécessaires : un pour le pool parcimonieux et un pour les méta-données parcimonieuses ; le processus de conversion les fusionnera alors en un unique volume logique.

Attention !
LVM 2.02.98 ou postérieure est nécessaire 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 RAID 1 en un pool parcimonieux détruit toutes les données existantes dans le miroir !
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.

RAID 0 n'est pas tolérant aux défaillances - si l'un des volumes physiques tombe en panne alors le volume logique devient inutilisable. En ajoutant la segmentation répartie à RAID 0, le volume logique peut continuer à fonctionner si un volume physique est manquant. Un nouveau volume physique peut alors être ajouté pour restaurer la tolérance aux défaillances.

Les volumes à segmentation répartie avec parité existent en deux versions : RAID 4 et RAID 5. Avec RAID 4, tous les segments de parité sont stockés sur le même volume physique. Ceci devient un goulot d'étranglement parce que toutes les écritures affectent ce volume physique, et cela empire avec le nombre de volumes physiques dans le groupe. Avec RAID 5 , les données de parité sont distribuées de manière régulière à travers tous les volumes physiques et ainsi aucun d'entre eux ne devient un goulot d'étranglement. Pour cette raison, RAID 4 est rarement employé et est considéré comme obsolète. En pratique, tous les volumes à segmentation répartie avec parité sont en RAID 5.

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

Le volume fonctionnera normalement à partir de là, cependant ceci dégrade la grappe en RAID 0 jusqu'à ce qu'un volume physique de rechange soit ajouté. La performance ne devrait pas être affectée lors de la dégradation de la grappe.

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

Au stade actuel, il n'est pas possible de créer des pools parcimonieux de volumes à segmentation répartie avec parité (RAID5). Il est possible de créer un pool parcimonieux RAID5 en créant un volume logique RAID5 ordinaire et en le convertissant en un pool parcimonieux avec la commande lvconvert. Deux volumes logiques sont nécessaires : un pour le pool parcimonieux et un pour les méta-données parcimonieuses ; le processus de conversion les fusionnera en un volume logique unique.

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.

RAID 6 est très similaire à RAID 5, néanmoins RAID 6 peut survivre à 'deux défaillances de volumes physiques, offrant ainsi une plus grand tolérance aux défaillances que RAID5 en contrepartie de l'utilisation de volumes physiques supplémentaires.

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

Comme pour RAID5, l'option -i est utilisée pour spécifier le nombre de volumes physiques sur lesquels effectuer la répartition des segments, en excluant les 2 volumes physiques requis pour la parité. Ainsi pour un volume RAID6 à 5 volumes physiques, il faut passer -i 3 et non pas -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

Au stade actuel, il n'est pas possible de créer un pool de volumes RAID6 ou de volumes parcimonieux. Il est possible de créer un pool de volumes RAID6 parcimonieux en créant un volume logique RAID5 ordinaire et en le convertissant en un pool de volumes parcimonieux via la commande lvconvert. Deux volumes logiques sont requis : un pour le pool de volumes parcimonieux et un pour les méta-données parcimonieuses ; le processus de conversion les fusionnera en un volume logique unique.

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

Les options -i et -m sont toutes les deux spécifiées : -i est le nombre de bandes -m est le nombre de miroirs. 2 bandes et un miroir nécessitent 4 volumes physiques. .

RAID10 parcimonieux

Au stade actuel, il n'est pas possible de créer un pool de volumes RAID10 parcimonieux. Il est possible de créer un pool RAID10 parcimonieux en créant un volume logique RAID10 ordinaire et en le convertissant en un pool parcimonieux via la commande lvconvert. Deux volumes logiques sont requis  : un pour le pool parcimonieux, l'autre pour les méta-données parcimonieuses ; le processus de conversion les fusionnera en un volume logique unique.

Attention !
La conversion d'un volume logique RAID10 en un pool parcimonieux détruit toutes les données existantes sur le volume logique !
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 ne restaure que les méta-données LVM , pas les données à l'intérieur du volume logique. Cependant les commandes pvremove, vgremove, et lvremove n'effacent que les méta-données, laissant les données intactes. Cependant, si issue_discards est défini dans /etc/lvm/lvm.conf , ces commandes deviennent destructive des données également.

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

See also

Ressources externes