mirroir readonly du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) https://wiki.evolix.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

13 KiB

title category
Howto LVM linux disk

LVM est un système permettant de gérer des « logical volumes » (LV) indépendamment des disques. On obtient ainsi un système de partitionnement plus souple, cela facilite notamment l'augmentation (future) de la taille d'un LV.

Installation

# apt install lvm2

PV : les partitions LVM

On doit ensuite créer des partitions de type « Linux LVM » (code 8E). Puis on initialise les partitions pour LVM :

# pvcreate /dev/hda1
# pvcreate /dev/hdb1

Note : dans certains cas, on devra utiliser l'option -ff (par exemple pour réinitialiser une partition)

On pourra ainsi lister les partitions LVM du système avec pvdisplay ou pvs :

# pvdisplay
--- Physical volume ---
PV Name               /dev/hda1
VG Name               group1
PV Size               124.84 GB / not usable 1.52 MB
Allocatable           yes
PE Size (KByte)       4096
Total PE              31959
Free PE               7639
Allocated PE          24320
PV UUID               T12qj5-SEkv-zNrB-QUdG-tFua-b6ok-p1za3e

--- Physical volume ---
PV Name               /dev/hdb1
VG Name               group1
PV Size               13.08 GB / not usable 2.08 MB
Allocatable           yes
PE Size (KByte)       4096
Total PE              3347
Free PE               3347
Allocated PE          0
PV UUID               CQEeDw-TYNK-n0nh-G7ti-3U3J-4zgk-a7xg2S

# pvs
PV         VG     Fmt  Attr PSize   PFree
/dev/hda1 group1 lvm2 a-    13.07G 13.07G
/dev/hdb1 group1 lvm2 a-   124.84G 34.84G

# pvs -o pv_mda_count,pv_mda_free /dev/hda1
#PMda #PMdaFree
    1    91.50K

# pvscan
PV /dev/sda9    VG group1   lvm2 [124.84 GB / 29.84 GB free]
PV /dev/sda12   VG group1   lvm2 [13.07 GB / 13.07 GB free]
Total: 2 [137.91 GB] / in use: 2 [137.91 GB] / in no VG: 0 [0   ]

Si la partition est redimensionnée, on peut augmenter la taille du PV :

# pvresize /dev/hda1

VG : les groupes de volumes

Une fois nos PV initialisés, on créé un ou plusieurs groupes de volumes (VG) dans lesquels on découpera les volumes logiques (LV).

# vgcreate group1 /dev/hda1 /dev/hdb1
  Volume group "mylvmtest" successfully created

On peut ainsi les lister avec les commandes vgdisplay ou vgs :

# vgdisplay
  --- Volume group ---
  VG Name               group1
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  28
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                5
  Open LV               4
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               137.91 GB
  PE Size               4.00 MB
  Total PE              35306
  Alloc PE / Size       24320 / 95.00 GB
  Free  PE / Size       10986 / 42.91 GB
  VG UUID               zwApn7-SCSx-ju4h-6Y1R-x6ie-3wl0-uSE1DE

# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  group1   2   5   0 wz--n- 137.91G 42.91G

# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "group1" using metadata type lvm2

LV : les volumes logiques

On peut maintenant découper nos volumes finaux :

# lvcreate -L5G -nfirstlvmvol group1
  Logical volume "firstlvmvol" created

# lvcreate -L10G -nsecondlvmvol group1
  Logical volume "secondlvmvol" created

On a ainsi des périphériques de stockage utilisables (accessibles via /dev/mapper/<VG>-<LV> ou /dev/<VG>/<LV>) que l'on peut formater :

# mkfs.ext4 /dev/mapper/group1-firstlvmvol
# mkfs.ext4 /dev/group1/secondlvmvol

On peut lister les LV avec lvdisplay ou lvs :

# lvdisplay
  --- Logical volume ---
  LV Name                /dev/group1/firstlvmvol
  VG Name                group1
  LV UUID                iHCvHy-ow0G-Idf2-hNOi-TRFe-BqvW-tmowLj
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                5.00 GB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Name                /dev/group1/secondlvmvol
  VG Name                group1
  LV UUID                S5GPY7-7q6n-1FCy-ydKA-Js2e-BAOy-wlgYQO
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                10.00 GB
  Current LE             12800
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

# lvs
  LV           VG     Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  firstlvmvol  group1 -wi-ao  5.00G
  secondlvmvol group1 -wi-ao 10.00G

# lvscan
  ACTIVE            '/dev/group1/firstlvmvol'   [5.00 GB] inherit
  ACTIVE            '/dev/group1/secondlvmvol' [10.00 GB] inherit

Les snapshots LVM

Un snapshot LVM sert à « figer » une partition à chaud. Cela permettra de faire une vraie sauvegarde « tranquillement » par la suite.

Exemple typique, une base SQL stocke ses fichiers dans /srv/sql qui est en LVM :

  • On arrête la base SQL (ou on la « lock »)
  • On déclenche un snapshot LVM de /srv/sql
  • On redémarre (ou « délock ») la base SQL : elle n'aura été arrêtée que quelques secondes !
  • Ensuite, on peut monter le snapshot et faire tranquillement son backup (tar, dd, rsync, etc.)
  • On peut enfin supprimer le snapshot vu qu'il ne sera plus présent au prochain boot

Note : il semble qu'on peut pas trop avoir deux snapshots en même temps.

# lvcreate -L100M -s  -n snap /dev/mylvmtest/firstlvmvol
  Logical volume "snap" created

# lvdisplay
  --- Logical volume ---
  LV Name                /dev/mylvmtest/firstlvmvol
  VG Name                mylvmtest
  LV UUID                4vOXer-YH8x-AB9T-3MoP-BESB-7fyn-ce0Rho
  LV Write Access        read/write
  LV snapshot status     source of
                         /dev/mylvmtest/snap [active]
  LV Status              available
  # open                 0
  LV Size                500.00 MB
  Current LE             125
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:0

  --- Logical volume ---
  LV Name                /dev/mylvmtest/snap
  VG Name                mylvmtest
  LV UUID                lF0wn9-7O3A-FacC-gnVM-SPwE-fCnI-5jb9wz
  LV Write Access        read/write
  LV snapshot status     active destination for /dev/mylvmtest/firstlvmvol
  LV Status              available
  # open                 0
  LV Size                500.00 MB
  Current LE             125
  COW-table size         100.00 MB
  COW-table LE           25
  Allocated to snapshot  0.02%
  Snapshot chunk size    8.00 KB
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:3

# mkdir /tmp/snap

# mount /dev/mylvmtest/snap /tmp/snap/

# lvcreate -L100M -s -n snap2 /dev/mylvmtest/firstlvmvol
  Logical volume "snap2" created

device-mapper: snapshots: Invalidating snapshot: Unable to allocate exception.
Buffer I/O error on device dm-3, logical block 530
lost page write due to I/O error on dm-3
Buffer I/O error on device dm-3, logical block 530
lost page write due to I/O error on dm-3
Buffer I/O error on device dm-3, logical block 530
lost page write due to I/O error on dm-3
Buffer I/O error on device dm-3, logical block 1
lost page write due to I/O error on dm-3
Buffer I/O error on device dm-3, logical block 1
lost page write due to I/O error on dm-3

# umount /tmp/snap

# lvremove /dev/mylvmtest/snap
Do you really want to remove active logical volume "snap"? [y/n]: y
  Logical volume "snap" successfully removed

LVM mirror : du RAID1 avec LVM

Une fonctionnalité peu connue de LVM est de permettre de faire du RAID1. Peu d'intérêt à part peut-être gérer du RAID1 « retaillable » sans gérer une couche « MDADM + LVM ».

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

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

# lvcreate -L180G -m1 -nlvmirror --corelog vg00 /dev/sda7 /dev/sdb5
  Logical volume "lvmirror" created

# lvs -a
  LV                  VG   Attr   LSize   Origin Snap%  Move Log Copy%
  lvmirror            vg00 mwi-ao 180.00G                          8.60
  [lvmirror_mimage_0] vg00 iwi-ao 180.00G
  [lvmirror_mimage_1] vg00 iwi-ao 180.00G

Pour étendre un miroir LVM, on ajoute des PV au VG :

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

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

# vgextend vg00 /dev/sda8 /dev/sdb6
  Volume group "vg00" successfully extended

On désactive le miroir, on retaille, on réactive :

# lvextend -L+25G  /dev/vg00/lvmirror
  Extending 2 mirror images.
  Mirrors cannot be resized while active yeta.

# umount /dev/vg00/lvmirror

# lvchange -an /dev/vg00/lvmirror

# lvextend  -L+25G /dev/vg00/lvmirror
  Extending 2 mirror images.
  Extending logical volume lvmirror to 205.00 GB
  Logical volume lvmirror successfully resized

# lvchange -ay /dev/vg00/lvmirror

Enfin on retaille le filesystem :

# e2fsck -f /dev/vg00/lvmirror
e2fsck 1.40-WIP (14-Nov-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg00/lvmirror: 216749/23592960 files (13.5% non-contiguous), 44825506/47185920 blocks

# resize2fs /dev/vg00/lvmirror
resize2fs 1.40-WIP (14-Nov-2006)
Resizing the filesystem on /dev/vg00/lvmirror to 53739520 (4k) blocks.
The filesystem on /dev/vg00/lvmirror is now 53739520 blocks long.

FAQ

Supprimer une partition LVM d'un VG

# pvmove -v /dev/hde1
    Finding volume group "mylvmtest"
    Archiving volume group "mylvmtest" metadata.
    Creating logical volume pvmove0
  mirror: Required device-mapper target(s) not detected in your kernel

# vgreduce mylvmtest /dev/hde1
  Removed "/dev/hde1" from volume group "mylvmtest"

Supprimer un LV

# lvremove -v /dev/testlvm/testlvm2
    Using logical volume(s) on command line
Do you really want to remove active logical volume "testlvm2"? [y/n]: y
    Archiving volume group "testlvm" metadata.
    Found volume group "testlvm"
    Removing testlvm-testlvm2
    Found volume group "testlvm"
    Releasing logical volume "testlvm2"
    Creating volume group backup "/etc/lvm/backup/testlvm"
  Logical volume "testlvm2" successfully removed

Augmenter la taille d'un LV

# umount /dev/mylvmtest/thirdlvmvol

# lvextend -L+1G  /dev/mylvmtest/thirdlvmvol
  Extending logical volume thirdlvmvol to 4,00 GB
  Logical volume thirdlvmvol successfully resized

# resize2fs -p /dev/mylvmtest/thirdlvmvol

# e2fsck -f /dev/mylvmtest/thirdlvmvol -C0
e2fsck 1.35 (28-Feb-2004)
Passe 1: vérification inodes, blocs, et des tailles
Passe 2: vérification de la structure répertoire
Passe 3: vérification de lca connectivité répertoire
Pass 4: vérification des compteur de références
Pass 5: vérification de l'information du sommaire groupe
/dev/mylvmtest/thirdlvmvol: 11/393216 fichier (0.0% non
 blocs

# resize2fs -p /dev/mylvmtest/thirdlvmvol
resize2fs 1.35 (28-Feb-2004)
Resizing the filesystem on /dev/mylvmtest/thirdlvmvol to
Le système de fichiers /dev/mylvmtest/thirdlvmvol a main
8576 blocs.

Réduire la taille d'un LV

  ACTIVE            '/dev/mylvmtest/secondlvmvol' [60,00 GB] inherit

# umount /dev/mylvmtest/secondlvmvol

# e2fsck -f /dev/mylvmtest/secondlvmvol -C0

# resize2fs /dev/mylvmtest/secondlvmvol 50G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mylvmtest/secondlvmvol to 13107200 (4k) blocks.
The filesystem on /dev/mylvmtest/secondlvmvol is now 13107200 blocks long.

# lvreduce -L-10G /dev/mylvmtest/secondlvmvol
  WARNING: Reducing active logical volume to 50,00 GB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce secondlvmvol? [y/n]: y
  Reducing logical volume secondlvmvol to 50,00 GB
  Logical volume secondlvmvol successfully resized

# mount /dev/mylvmtest/secondlvmvol

LVM et les tailles

Les tailles reportées par LVM sont très peu fiables.

Un exemple concret avec un VG qui annonce :

  VG Size               137.91 GB
  PE Size               4.00 MB
  Total PE              35306
  Alloc PE / Size       23040 / 90.00 GB
  Free  PE / Size       12266 / 47.91 GB

On a tendance à croire qu'il reste de la place… Pourtant un lvextend ou lvcreate échoue.

Par exemple :

# lvextend -L+10G /dev/group1/data
  Extending logical volume data to 30.00 GB
  device-mapper: resume ioctl failed: Invalid argument
  Unable to resume group1-data (253:3)
  Logical volume data successfully resized

# lvcreate -L5G -ntest group1
  device-mapper: resume ioctl failed: Invalid argument
  Unable to resume group1-test (253:4)
  /dev/group1/test: write failed after 0 of 4096 at 0: No space left on device
  Logical volume "test" created

Restauration

/!\ à manipuler avec beaucoup de précautions /!\

LVM sauvegarde ses métadatas dans /etc/lvm/backup et /etc/lvm/archive. On peut éventuellement les restaurer via la commande vgcfgrestore.

Infos sur les volumes

# dmestup info -c
# dmestup info