Vous êtes sur la page 1sur 7

=========

LVM HOWTO (c) Nicolas Kovacs, <info@microlinux.fr>


=========

Dernire rvision : 2 juin 2015

Ce HOWTO dcrit l'utilisation de LVM sur un systme Slackware Linux.

* Introduction
* Concepts de base
* Exemple simple avec LVM
* Dtruire des LV, des VG et des PV
* LVM et la partition /boot
* Exemple avec un VG utilisant plusieurs PV

Introduction
------------

Un systme de fichiers (FS) est install normalement dans une partition d'un
disque dur. Il ne peut donc pas dpasser la taille de ce disque, et il est
difficile de l'tendre.

LVM ("Logical Volume Manager") ajoute une couche d'abstraction entre le


systme de fichiers et les partitions du ou des disques et permet une approche
plus souple. Un FS n'est pas cr dans une partition, mais dans un volume
logique. Ce dernier peut s'tendre sur plusieurs disques et peut tre agrandi
par la suite.

Concepts de base
----------------

LVM ajoute trois niveaux entre le disque dur et le systme de fichiers :


Physical Volumes (PV), Volume Groups (VG) et Logical Volumes (LV).

* Physical Volume (PV) - En rgle gnrale, un PV est une partition du


disque dur gre par LVM. Il peut s'agir d'un disque dur entier et mme
d'un assemblage RAID. La partition, le disque dur ou l'assemblage RAID
doit tre dfini en tant que PV pour que les commandes LVM puissent
fonctionner.

* Volume Group (VG) - Un ou plusieurs PV peuvent tre assembls en un


groupe, ce qui permet par exemple de runir les partitions de plusieurs
disques durs. Un VG constitue donc un ensemble de PV, d'un point de vue
physique.

* Logical Volume (LV) - Un Logical Volume (LV) est une partie d'un Volume
Group (VG). Pour l'utilisateur, le LV fonctionne comme une partition
virtuelle. C'est l o il installera le systme de fichiers. Ce dernier ne
sera plus cr dans une partition comme '/dev/sda7', mais dans un LV comme
par exemple '/dev/vg0/root' ou '/dev/vg0/home'.

Exemple simple avec LVM


-----------------------

On partira du cas de figure le plus simple. Le disque dur '/dev/sda' contient


une seule partition '/dev/sda1' de type LVM (8E). Un Physical Volume (PV) est
cr dans cette partition. Le Volume Group (VG) 'vg0' y sera cr.
l'intrieur de ce Volume Group, il y aura deux Logical Volumes (LV). Le LV
'/dev/vg0/swap' contiendra la partition swap, le LV '/dev/vg0/root' contiendra
la partition principale.

Partitionner le disque avec 'cfdisk' et crer une seule partition de type 8E.

# fdisk -l /dev/sda

Disk /dev/sda: 80.0 GB, 80000000000 bytes


...

Device Boot Start End Blocks Id System


/dev/sda1 63 156249999 78124968+ 8e Linux LVM

Vrifier s'il y a des PV :

# pvs

Crer un PV :

# pvcreate /dev/sda1
Physical volume "/dev/sda1" successfully created

Afficher les infos sur le ou les PV :

# pvs
PV VG Fmt Attr PSize PFree
/dev/sda1 lvm2 a-- 74.51g 74.51g

Vrifier s'il y a des VG :

# vgs
No volume groups found

Crer un VG :

# vgcreate vg0 /dev/sda1


Volume group "vg0" successfully created

Afficher les infos sur le ou les VG :

# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 1 0 0 wz--n- 74.50g 74.50g

# vgdisplay -v
...

Vrifier s'il y a des LV :

# lvs

Crer un premier LV pour la partition d'change :

# lvcreate -L 2G -n swap vg0


Logical volume "swap" created
Crer un deuxime LV pour la partition principale :

# lvcreate -l 100%FREE -n root vg0

Afficher les infos sur les LV :

# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
root vg0 -wi-ao---- 72.50g
swap vg0 -wi-ao---- 2.00g

# lvscan
ACTIVE '/dev/vg0/swap' [2.00 GiB] inherit
ACTIVE '/dev/vg0/root' [72.50 GiB] inherit

Afficher un rcapitulatif complet :

# vgdisplay -v | less

--- Volume group ---


VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 74.50 GiB
PE Size 4.00 MiB
Total PE 19073
Alloc PE / Size 19073 / 74.50 GiB
Free PE / Size 0 / 0
VG UUID qETnda-ZdxW-bbVg-lua5-PXa7-AWGd-1DSVtU

--- Logical volume ---


LV Path /dev/vg0/swap
LV Name swap
VG Name vg0
LV UUID 0HLM9g-584n-VyXt-B2dj-S5V8-rAAc-ehkgI6
LV Write Access read/write
LV Creation host, time slackware, 2015-05-31 09:39:45 +0200
LV Status available
# open 0
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

--- Logical volume ---


LV Path /dev/vg0/root
LV Name root
VG Name vg0
LV UUID Aoy2hg-IqBU-wnwi-bi2R-qNov-p4I2-yV3PBM
LV Write Access read/write
LV Creation host, time slackware, 2015-05-31 09:41:33 +0200
LV Status available
# open 0
LV Size 72.50 GiB
Current LE 18561
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1

--- Physical volumes ---


PV Name /dev/sda1
PV UUID OjNHvu-By0g-WDDV-Orab-LpsC-0ixo-8ZjlDV
PV Status allocatable
Total PE / Free PE 19073 / 0

/!\ La commande 'vgdisplay -v' fait partie des commandes les plus
importantes. Elle affiche les diffrents VG, et pour chacun leurs LV et PV.
Elle indique la place restante libre par VG (Free PE) et la taille de chacun
des LV et PV.

La partition d'change doit tre formate pour que l'installateur Slackware


puisse la reconnatre en tant que telle :

# mkswap /dev/vg0/swap

Lancer l'installateur :

# setup

Dfinir '/dev/vg0/swap' comme partition d'change et '/dev/vg0/root' comme


partition principale. partir de l, on pourra installer Slackware
normalement.

Dans sa configuration par dfaut, le kernel HUGE ne supporte pas LVM. Nous
devons donc construire un initrd avec le support LVM et configurer LILO pour
dmarrer sur le kernel GENERIC. Quitter l'installateur ('EXIT'), puis chrooter
dans l'environnement frachement install :

# chroot /mnt

Configurer l'initrd :

--8<---------- /etc/mkinitrd.conf --------------------------------------------


SOURCE_TREE="/boot/initrd-tree"
CLEAR_TREE="1"
OUTPUT_IMAGE="/boot/initrd.gz"
KERNEL_VERSION="$(uname -r)"
KEYMAP="fr_CH-latin1"
MODULE_LIST="ext4"
ROOTDEV="/dev/vg0/root"
ROOTFS="ext4"
RESUMEDEV="/dev/vg0/swap"
RAID="0"
LVM="1"
UDEV="1"
MODCONF="0"
WAIT="1"
--8<--------------------------------------------------------------------------

Construire l'initrd :

# mkinitrd -F

Configurer LILO :

--8<---------- /etc/lilo.conf ------------------------------------------------


append="nomodeset quiet ipv6.disable=1 vt.default_utf8=1"
boot = /dev/sda
compact
lba32
...
image = /boot/vmlinuz-generic-3.10.17
initrd = /boot/initrd.gz
root = /dev/vg0/root
label = Linux
read-only
--8<--------------------------------------------------------------------------

Prendre en compte la configuration :

# lilo

Quitter l'environnement chroot et redmarrer :

# exit
# reboot

Nous disposons dsormais d'un systme qui utilise LVM.

Dtruire des LV, des VG et des PV


---------------------------------

Nous allons supprimer les LV, le VG et le PV de l'exemple prcdent.

Dmarrer sur le CD d'installation et ouvrir une console.

Afficher les infos sur les LV avec 'lvs', 'lvscan' et 'vgdisplay -v'.

Supprimer les deux LV :

# lvremove /dev/vg0/swap
Logical volume "swap" successfully removed

# lvremove /dev/vg0/root
Logical volume "root" successfully removed

Si l'on souhaite supprimer l'ensemble des LV d'un VG, on peut fournir le nom
du VG en argument :

# lvremove vg0
Afficher les infos sur les VG avec 'vgs', 'vgscan' et 'vgdisplay -v'.

Supprimer le VG :

# vgremove vg0
Volume group "vg0" successfully removed

Enfin, afficher les infos sur les PV avec 'pvs' et 'pvscan'.

Supprimer le PV :

# pvremove /dev/sda1
Labels on physical volume "/dev/sda1" successfully wiped.

LVM et la partition /boot


-------------------------

LVM sait grer l'ensemble des FS systme sous forme de LV, l'exception de
'/boot'. L'exemple ci-dessus a pu fonctionner en raison de son extrme
simplicit. Ds que nous mettons en place plusieurs PV, l'installation du
chargeur de dmarrage ne pourra plus s'effectuer correctement et retournera
une erreur.

Pour viter ce genre de problme, la meilleure solution consiste dfinir une


partition '/boot' classique, et de grer le reste du systme (/, /home, swap,
etc.) avec des LV. L'installation par dfaut des systmes RHEL/CentOS utilise
cette stratgie.

Concrtement, on dfinira une partition '/boot' de 100 Mo' et une partition de


type LVM occupant le reste du disque :

# fdisk -l /dev/sda

Disk /dev/sda: 80.0 GB, 80000000000 bytes


...

Device Boot Start End Blocks Id System


/dev/sda1 * 63 192779 96358+ 83 Linux
/dev/sda2 192780 156249999 78028610 8e Linux LVM

partir de l, le PV sera cr sur '/dev/sda2', le VG 'vg0' sera dfini sur


ce PV, et les deux LV '/dev/vg0/swap' et '/dev/vg0/root' seront crs
l'intrieur de 'vg0'.

Dans l'installateur, la partition principale se situera toujours sur


'/dev/vg0/root' et sera formate en ext4. En contrepartie, la partition
'/boot' se trouvera sur '/dev/sda1' et sera formate en ext2.

En dehors de cela, il n'y a pas de changements notables signaler. La


construction de l'initrd et la configuration de LILO s'effectuent de manire
identique au premier cas de figure.

Exemple avec un VG utilisant plusieurs PV


-----------------------------------------

Dans le deuxime exemple, le systme sera toujours install sur deux Logical
Volumes (LV) '/dev/vg0/swap' et '/dev/vg0/root' contenus dans un Volume Group
(VG) 'vg0'. On prendra soin de grer la partition '/boot' part, dans une
partition de type 'Linux', comme nous venons de le voir. la diffrence du
premier exemple, ce VG s'tendra sur une srie de quatre Physical Volumes
(PV).

Partitionner le disque dur comme ceci :

# fdisk -l /dev/sda

Disk /dev/sda: 80.0 GB, 80000000000 bytes


...

Device Boot Start End Blocks Id System


/dev/sda1 * 63 192779 96358+ 83 Linux
/dev/sda2 192780 39262859 19535040 8e Linux LVM
/dev/sda3 39262860 78332939 19535040 8e Linux LVM
/dev/sda4 78332940 156249999 38958530 5 Extended
/dev/sda5 78333003 117403019 19535008+ 8e Linux LVM
/dev/sda6 117403083 156249999 19423458+ 8e Linux LVM

Dfinir les quatre PV :

# pvcreate /dev/sda2
# pvcreate /dev/sda3
# pvcreate /dev/sda5
# pvcreate /dev/sda6

Crer le VG :

# vgcreate vg0 /dev/sda2 /dev/sda3 /dev/sda5 /dev/sda6

partir de l, la cration des LV '/dev/vg0/swap' et '/dev/vg0/root' sera


identique la procdure dcrite ci-dessus.

------------------------------------------------------------------------------
# vim: syntax=txt