Notions basiques
Comme dit dans le chapeau, LVM2 vous permet de pouvoir créer des partitions s’étendant sur plusieurs disques en les regroupant en volumes virtuels. Il permet également de pouvoir agrandir la taille des partitions existantes facilement (seulement si le système de fichiers le permet). Cela permet d’avoir une gestion de disque bien plus scalable car l’ajout ou la suppression d’espace est très facile et permet d’agrandir les ressources disponibles sur un système sans avoir à repartitionner toute la machine (et la plupart du temps réinstaller la machine).
Physical volumes and volume groups
La méthode utilisée par LVM2 pour permettre de gérer plusieurs disques en tant qu’une seule même unité est de regrouper toutes les partitions que l’on souhaite utiliser avec LVM2 dans un ou plusieurs "volume groups".
Pour cela, il est nécessaire de créer un "physical volume", opération qui premet de préparer une partition, un disque entier dans un format que LVM2 utilisera plus tard pour stocker les données.
Cela se fait au moyen de la commande pvcreate.
Par exemple si j’ai un disque de 6.4Go situé en /dev/hdb et un disque de 40Go en /dev/hde, je les initialiserais de la façon suivante :
osiris ~ # pvcreate /dev/hdb
Physical volume "/dev/hdb" successfully created
osiris ~ # pvcreate /dev/hde
Physical volume "/dev/hdb" successfully created
Nous pouvons vérifier que les deux physical volumes sont bien préparés en utilisant la commande pvdisplay ce qui retournerait :
livecd ~ # pvdisplay
--- NEW Physical volume ---
PV Name /dev/hde
VG Name
PV Size 37.27 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID f0iIbU-ayPe-kpoy-d3bP-hfDP-JqPO-5MVLT7
--- NEW Physical volume ---
PV Name /dev/hdb
VG Name
PV Size 6.01 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID yV0Qht-jGSe-jdDo-jErn-cgYi-tbR6-ITqrz1
Nous avons donc deux disques préparés pour l’utilisation dans un volume group. Il est maintenant nécessaire de créer un volume group de la façon suivante (nous lui donnerons le nom lvmspace)
osiris ~ # vgcreate lvmspace /dev/hdb
Volume group "lvmspace" successfully created
Le volume group est maintenant créé et totalise une taille de 6.01Go, ce que nous pouvons vérifier avec la commande vgdisplay :
osiris ~ # vgdisplay
--- Volume group ---
VG Name lvmspace
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 6.00 GB
PE Size 4.00 MB
Total PE 1537
Alloc PE / Size 0 / 0
Free PE / Size 1537 / 6.00 GB
VG UUID W7zp0w-pYZk-xkg1-9u37-9kiI-30uM-yA6Yji
La prochaine opération permettra d’étendre la taille du volume group avec la taille du disque /dev/hde.
osiris ~ # vgextend lvmspace /dev/hde
/dev/cdrom: open failed: Read-only file system
/dev/cdrom: open failed: Read-only file system
Attempt to close device '/dev/cdrom' which is not open.
Volume group "lvmspace" successfully extended
Ne prêtez pas attention aux messages concernant le lecteur cd.
Voici une représentation de l’opération que l’on vient de réaliser, à savoir cumuler les deux espaces disques physiques dans un disque virtuel.
Nous pouvons donc vérifier que la taille du volume group à bien été augmentée :
osiris ~ # vgdisplay
--- Volume group ---
VG Name lvmspace
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 43.27 GB
PE Size 4.00 MB
Total PE 11078
Alloc PE / Size 0 / 0
Free PE / Size 11078 / 43.27 GB
VG UUID W7zp0w-pYZk-xkg1-9u37-9kiI-30uM-yA6Yji
On peut voir maintenant avec pvdisplay que les disques ont été totalement affectés au volume group.
osiris ~ # pvdisplay
--- Physical volume ---
PV Name /dev/hdb
VG Name lvmspace
PV Size 6.00 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 1537
Free PE 1537
Allocated PE 0
PV UUID yV0Qht-jGSe-jdDo-jErn-cgYi-tbR6-ITqrz1
--- Physical volume ---
PV Name /dev/hde
VG Name lvmspace
PV Size 37.27 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 9541
Free PE 9541
Allocated PE 0
PV UUID f0iIbU-ayPe-kpoy-d3bP-hfDP-JqPO-5MVLT7
Maintenant que nous avons un espace disque virtuel utilisable, nous allons pouvoir créer des partitions sur cet espace afin de pouvoir les utiliser. Commençons par créer une partition, que l’on appelle logical volume lorsque l’on utilise LVM, nommée home d’une taille de 7Go avec la commande lvcreate.
osiris ~ # lvcreate -L 7G -n home lvmspace
Logical volume "home" created
Nous pouvons voir les détails du résultat de l’opération précédente avec la commande lvdisplay.
osiris ~ # lvdisplay
--- Logical volume ---
LV Name /dev/lvmspace/home
VG Name lvmspace
LV UUID icrus5-H10v-GqTG-NW0L-cwUR-FW2P-T5eqy1
LV Write Access read/write
LV Status available
# open 0
LV Size 7.00 GB
Current LE 1792
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0
Nous pouvons également constater que le logical volume créé plus tot occupe tout l’espace de /dev/hdb et une petite partie de /dev/hde.
osiris ~ # pvdisplay
--- Physical volume ---
PV Name /dev/hdb
VG Name lvmspace
PV Size 6.00 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 1537
Free PE 0
Allocated PE 1537
PV UUID yV0Qht-jGSe-jdDo-jErn-cgYi-tbR6-ITqrz1
--- Physical volume ---
PV Name /dev/hde
VG Name lvmspace
PV Size 37.27 GB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 9541
Free PE 9286
Allocated PE 255
PV UUID f0iIbU-ayPe-kpoy-d3bP-hfDP-JqPO-5MVLT7
Créons maintenant un logical volume de 20Go nommée var.
osiris ~ # lvcreate -L 20G -n var lvmspace
Logical volume "var" created
Voyons le résultat de la commande précédente :
osiris ~ # lvdisplay
--- Logical volume ---
LV Name /dev/lvmspace/home
VG Name lvmspace
LV UUID icrus5-H10v-GqTG-NW0L-cwUR-FW2P-T5eqy1
LV Write Access read/write
LV Status available
# open 0
LV Size 7.00 GB
Current LE 1792
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0
--- Logical volume ---
LV Name /dev/lvmspace/var
VG Name lvmspace
LV UUID GNPaI1-7jlr-oUYZ-6qot-1cS8-gN8G-Ig6cJ2
LV Write Access read/write
LV Status available
# open 0
LV Size 20.00 GB
Current LE 5120
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1
Nous voyons donc bien que 27Go sont occupés dans le volume group lvmspace.
osiris ~ # vgdisplay
--- Volume group ---
VG Name lvmspace
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 43.27 GB
PE Size 4.00 MB
Total PE 11078
Alloc PE / Size 6912 / 27.00 GB
Free PE / Size 4166 / 16.27 GB
VG UUID W7zp0w-pYZk-xkg1-9u37-9kiI-30uM-yA6Yji
Créons maintenant un logical volume de 3Go nommé tmp et un dernier logical volume de 13.27Go pour remplir tout l’espace disque disponible.
osiris ~ # lvcreate -L 3G -n tmp lvmspace
Logical volume "tmp" created
osiris ~ # lvcreate -L 13.27G -n portage lvmspace
Rounding up size to full physical extent 13.27 GB
Logical volume "portage" created
Nous voyons donc maintenant qu’il n’y a plus d’espace disque disponible dans le volume group.
osiris ~ # vgdisplay
--- Volume group ---
VG Name lvmspace
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 4
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 43.27 GB
PE Size 4.00 MB
Total PE 11078
Alloc PE / Size 11078 / 43.27 GB
Free PE / Size 0 / 0
VG UUID W7zp0w-pYZk-xkg1-9u37-9kiI-30uM-yA6Yji
Le schéma actuel est le suivant :
osiris ~ # ls /dev/lvmspace/
home portage tmp var
Nous allons donc maintenant créer des systèmes de fichier sur les logical volumes afin de pouvoir les utiliser comme des partitions standard.
osiris ~ # mkfs.ext3 /dev/lvmspace/tmp -L "/tmp"
osiris ~ # mkfs.ext3 /dev/lvmspace/var -L "/var"
osiris ~ #mkfs.reiserfs /dev/lvmspace/portage -l "/usr/portage"
osiris ~ # mkfs.reiserfs /dev/lvmspace/home -l "/home"
Nous avons donc le schéma suivant :
Nous allons dans la prochaine partie voir à quel point l’utilisation de LVM2 est un avantage.
Redimensionnement des logical volumes
Imaginons que nous souhaitions ajouter un disque dur pour utiliser son espace disque.
Préparation du physical volume :
osiris ~ # pvcreate /dev/hdg
Physical volume "/dev/hdg" successfully created
On étend maintenant le volume group :
osiris ~ # vgextend lvmspace /dev/hdg
/dev/cdrom: open failed: Read-only file system
Attempt to close device '/dev/cdrom' which is not open.
Volume group "lvmspace" successfully extended
osiris ~ # vgdisplay
--- Volume group ---
VG Name lvmspace
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 4
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 81.62 GB
PE Size 4.00 MB
Total PE 20894
Alloc PE / Size 11078 / 43.27 GB
Free PE / Size 9816 / 38.34 GB
VG UUID W7zp0w-pYZk-xkg1-9u37-9kiI-30uM-yA6Yji
Nous allons maintenant étendre le logical volume home de 3Go. Maintenant il est très important de saisir que nous allons étendre ce qui fait office de lecteur virtuel, pas la partition que nous avons créé dessus, et il sera nécessaire de redimensionner le système de fichiers pour que le lecteur puisse être utilisé dans sa totalité. Le shéma suivant vous illustrera la différence.
osiris ~ # lvextend -L +3G /dev/lvmspace/home
Extending logical volume home to 10.00 GB
Logical volume home successfully resized
Nous voyons bien maintenant que le logical volume à une taille de 10Go.
osiris ~ # lvdisplay /dev/lvmspace/home
--- Logical volume ---
LV Name /dev/lvmspace/home
VG Name lvmspace
LV UUID icrus5-H10v-GqTG-NW0L-cwUR-FW2P-T5eqy1
LV Write Access read/write
LV Status available
# open 0
LV Size 10.00 GB
Current LE 2560
Segments 3
Allocation inherit
Read ahead sectors 0
Block device 253:0
Nous allons maintenant étendre le système de fichiers existant sur home en utilisant la commande spécialement mise à disposition pour cela concernant le système de fichiers reiserfs appelée resize_reiserfs.
Il est important de noter que cette opération doit se faire sur une partition non montée !
osiris ~ # resize_reiserfs -s+3G /dev/lvmspace/home
resize_reiserfs 3.6.19 (2003 www.namesys.com)
ReiserFS report:
blocksize 4096
block count 2621440 (1835008)
free blocks 2613149 (1826741)
bitmap block count 80 (56)
Syncing..done
resize_reiserfs: Resizing finished successfully.
Nous allons maintenant faire la même opération sur le lecteur var en étendant la logical volume et le système de fichiers ext3 qui est dessus (grâce à la commande resize2fs) de 5Go.
Contrairement a resize_reiserfs, il est possible de resizer (dans le sens de l'agrandissement) à chaud les partitions ayant ext3 comme filesystem. Ceci peut etre considéré comme un avantage sérieux d'ext3 par rapport à reiser sur des systèmes de production
osiris ~ # lvextend -L +5G /dev/lvmspace/var
Extending logical volume var to 25.00 GB
Logical volume var successfully resized
osiris ~ # resize2fs /dev/lvmspace/var 25G
resize2fs 1.38 (30-Jun-2005)
Resizing the filesystem on /dev/lvmspace/var to 6553600 (4k) blocks.
The filesystem on /dev/lvmspace/var is now 6553600 blocks long.
Voici donc maintenant la situation :
Rétrecissement d’un logical volume
Admettons maintenant que nous souhaitions ne plus avoir 10Go sur home pour une raison quelconque. La méthode à suivre pour pouvoir procéder au rétrécissement du logical volume est d’abord de redimensionner à la baisse le système de fichiers existant dessus puis de redimensionner à la baisse le logical volume.
Redimensionnement du système de fichiers :
osiris ~ # resize_reiserfs -s-1G /dev/lvmspace/home
resize_reiserfs 3.6.19 (2003 www.namesys.com)
You are running BETA version of reiserfs shrinker.
This version is only for testing or VERY CAREFUL use.
Backup of you data is recommended.
Do you want to continue? [y/N]:y
Processing the tree: 0%....20%....40%....60%....80%....100% left 0, 0 /sec
nodes processed (moved):
int 0 (0),
leaves 1 (0),
unfm 0 (0),
total 1 (0).
check for used blocks in truncated region
ReiserFS report:
blocksize 4096
block count 2359296 (2621440)
free blocks 2351013 (2613149)
bitmap block count 72 (80)
Syncing..done
resize_reiserfs: Resizing finished successfully.
Redimensionnement du logical volume :
osiris ~ # lvresize -L -1G /dev/lvmspace/home
WARNING: Reducing active logical volume to 9.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce home? [y/n]: y
Reducing logical volume home to 9.00 GB
Logical volume home successfully resized
Vous savez maintenant agrandir et reduire des logical volume, étendre des volume groups, vous êtes donc capables de faire pas mal de choses avec cette technologie géniale qu’est LVM. |