Logical Volume Management (LVM)

LVM

Créer un volume logique

  1. Pour utiliser le disque entier: s’assurer que le disque est vide, sans table de partition. S’il y a des partitions, les supprimer

     $ lsblk -f /dev/sd*
     NAME   FSTYPE LABEL  UUID                                 FSAVAIL FSUSE% MOUNTPOINT
     sda
     └─sda1 ext4   purple 84446293-1640-4c35-b958-d62ebfb32c09    3.4G     0% /mnt
     sda1   ext4   purple 84446293-1640-4c35-b958-d62ebfb32c09    3.4G     0% /mnt
     sdb
     └─sdb1 ext4   blue   bff50a42-7652-4f95-bad9-a02762849e2d
     sdb1   ext4   blue   bff50a42-7652-4f95-bad9-a02762849e2d
     sdc
     └─sdc1 ext4   red    bdf03359-da9e-463d-85df-8f55ebc5129f
     sdc1   ext4   red    bdf03359-da9e-463d-85df-8f55ebc5129f
    
     $ sudo umount /dev/sda1
     $ sudo gdisk /dev/sda
     $ sudo gdisk /dev/sdb
     $ sudo gdisk /dev/sdc
    
     $ sudo partprobe
     $ lsblk -f
     NAME            FSTYPE      LABEL UUID                                   FSAVAIL FSUSE% MOUNTPOINT
     sda
     └─sda1
     sdb
     └─sdb1
     sdc
     └─sdc1
    
  2. Physical Volume (PV) Convertir ces partitions en volume physique.
    Cette opération ajoute un bloc de données au début du disque, qui le définit comme volume physique. Les volumes physiques sont des partitions destinées au gestionnaire de volume.

     $ sudo pvcreate /dev/sda1
       Physical volume "/dev/sda1" successfully created.
     $ sudo pvcreate /dev/sdb1
       Physical volume "/dev/sdb1" successfully created.
     $ sudo pvcreate /dev/sdc1
       Physical volume "/dev/sdc1" successfully created.
    
     $ sudo pvdisplay
     --- Physical volume ---
     "/dev/sda1" is a new physical volume of "<3.75 GiB"
     --- NEW Physical volume ---
     PV Name               /dev/sda1
     VG Name               
     PV Size               <3.75 GiB
     Allocatable           NO
     PE Size               0
     Total PE              0
     Free PE               0
     Allocated PE          0
     PV UUID               Zs1dcK-KHBR-ULsr-515h-PQL5-cy18-qt8nmW
     ...
    
  3. Volume Group (VG)
    Créer un groupe de volumes contenant différents volumes physiques.
    Le groupes de volumes sera utilisé comme base pour créer un volume logique. Par exemple, un groupe de 80Go (constitué de /dev/sdb: 50Go + /dev/sdb: 20Go + /dev/sdd1: 10Go), peut être utilisé pour créer un volume logique de 80Go.

     $ sudo vgcreate vg /dev/sda1 /dev/sdb1
       Volume group "vg" successfully created
    
     $ sudo vgdisplay
     --- Volume group ---
     VG Name               vg
     System ID             
     Format                lvm2
     Metadata Areas        2
     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                2
     Act PV                2
     VG Size               7.49 GiB
     PE Size               4.00 MiB
     Total PE              1918
     Alloc PE / Size       0 / 0
     Free  PE / Size       1918 / 7.49 GiB
     VG UUID               Vh5HAu-ALez-HuLD-qbQq-H6Qb-JzNR-U5Br6e
    

    On peut également ajouter un volume physique à un groupe de volumes existant.

     $ sudo vgextend vg /dev/sdc1
       Volume group "vg" successfully extended
    
     $ sudo vgdisplay vg -C
       VG #PV #LV #SN Attr   VSize   VFree
       vg   3   0   0 wz--n- <11.24g <11.24g
    

    Ou en enlever

     $ sudo vgreduce vg /dev/sdc1
       Removed "/dev/sdc1" from volume group "vg"
    
     $ sudo vgdisplay vg -C
       VG #PV #LV #SN Attr   VSize VFree
       vg   2   0   0 wz--n- 7.49g 7.49g
    
  4. Logical Volume (LV)
    Créer un volume logique.
    -L pour spécifier la taille du volume logique
    -n pour donner un nom au volume logique
    Le dernier argument (vg) est le nom du groupe volume d’où le volume logique obtient son espace physique

     $ sudo lvcreate -n backup -L 2g vg
       Logical volume "backup" created.
    
     $ sudo lvdisplay vg
       --- Logical volume ---
       LV Path                /dev/vg/backup
       LV Name                backup
       VG Name                vg
       LV UUID                dk8Ggf-aKSY-dqQN-weWo-45LT-XEx0-WdskAb
       LV Write Access        read/write
       LV Creation host, time XPS1393057cc859cd, 2023-03-15 15:24:29 +0100
       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:3
    

    Dans cet exemple, la commande lvcreate crée un fichier virtuel /dev/vg/backup.

    Avoir des volumes physiques physiques supplémentaires dans le groupe de volume permet d’ajouter de l’espace supplémentaire dans le volume logique à la volée, sans temps d’arrêt du système, tant qu’on dispose de suffisamment de volumes physiques connectés.

     # Ajouter de l'espace
     $ sudo lvextend -L +2G /dev/vg/backup
       Size of logical volume vg/backup changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
       Logical volume vg/backup successfully resized.
    
     $ sudo lvdisplay vg -C
       LV     VG Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
       backup vg -wi-a----- 4.00g
    
     # Enlever de l'espace
     $ sudo lvreduce -L -2G /dev/vg/backup
       WARNING: Reducing active logical volume to 2.00 GiB.
       THIS MAY DESTROY YOUR DATA (filesystem etc.)
     Do you really want to reduce vg/backup? [y/n]: y
       Size of logical volume vg/backup changed from 4.00 GiB (1024 extents) to 2.00 GiB (512 extents).
       Logical volume vg/backup successfully resized.
    
     $ sudo lvdisplay vg -C
     LV     VG Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
     backup vg -wi-a----- 2.00g
    
  5. Créer une partition dans le volume logique.
    Comme il ne s’agit pas véritablement d’une partition sur un périphérique régulier (mais sur un volume logique), techniquement on ne parle pas de partition mais de volume LVM.

     $ sudo mkfs.ext4 /dev/vg/backup
     mke2fs 1.45.5 (07-Jan-2020)
     Creating filesystem with 524288 4k blocks and 131072 inodes
     Filesystem UUID: 0a1b4426-8323-43c6-abff-4337a661543b
     Superblock backups stored on blocks:
       32768, 98304, 163840, 229376, 294912
    
     Allocating group tables: done
     Writing inode tables: done
     Creating journal (16384 blocks): done
     Writing superblocks and filesystem accounting information: done
    
  6. Monter la partition

     $ sudo mkdir /mylvm
     $ sudo mount /dev/vg/backup /mylvm
    
     $ df -h /mylvm
     Filesystem             Size  Used Avail Use% Mounted on
     /dev/mapper/vg-backup  2.0G   24K  1.8G   1% /mylvm
    

    Pour un montage persistant, l’ajouter à /etc/fstab

     /dev/vg/backup /mylvm ext4 defaults 1 2
    
  7. Ajouter de l’espace à la partition
    Il est facile d’ajouter ou soustraire de l’espace dans un volume logique: il suffit d’augmenter (pourvu qu’on ait des volumes physiques non utilisés dans le groupe de volume) ou réduire sa taille.

    lvextend ne peut être utilisé que pour ajouter de l’espace,
    lvreduce ne peut être utilisé que pour enlever de l’espace, lvresize peut être utilisé pour ajouter ou enlever de l’espace

    Losqu’on agrandit un volume logique contenant un système de fichier, il faut

    1. d’abord agrandir le volume

       $ sudo chmod -R 755 /mylvm
       $ sudo chown -R $USER: /mylvm
       $ echo "Hello World" > /mylvm/file
      
       # extend by the amount of free space on physical volume /dev/sdb1:
       $ sudo lvextend /dev/vg/backup /dev/sdb1
         Size of logical volume vg/backup changed from 2.00 GiB (512 extents) to <5.75 GiB (1471 extents).
         Logical volume vg/backup successfully resized.
      
       $ sudo lvdisplay vg -C
         LV     VG Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
         backup vg -wi-ao---- <5.75g
      
       $ df -h /mylvm
       Filesystem             Size  Used Avail Use% Mounted on
       /dev/mapper/vg-backup  2.0G   24K  1.8G   1% /mylvm
      
    2. agrandir le système de fichier
      Pour ce faire, il faut au préalable le démonter

       $ sudo umount /mylvm
      
       $ sudo e2fsck -f /dev/vg/backup
       e2fsck 1.45.5 (07-Jan-2020)
       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/vg/backup: 12/393216 files (0.0% non-contiguous), 43119/1557504 blocks
      
       $ sudo resize2fs -p /dev/vg/backup
       resize2fs 1.45.5 (07-Jan-2020)
       Filesystem at /dev/vg/backup is mounted on /mylvm; on-line resizing required
       old_desc_blocks = 1, new_desc_blocks = 1
       The filesystem on /dev/vg/backup is now 1506304 (4k) blocks long.
      
       $ sudo mount /dev/vg/backup /mylvm
       $ df -h /mylvm
       Filesystem             Size  Used Avail Use% Mounted on
       /dev/mapper/vg-backup  5.6G   24K  5.4G   1% /mylvm
      

    Alternative: l’option -r de lvresize permet de redimensionner le système de fichier en même temps que le volume. Pour ce faire, il faut au préalable démonter le système de fichier

     $ sudo umount /mylvm
     $ sudo vgextend vg /dev/sdc1
    
     $ sudo lvresize -r -L +100M /dev/vg/backup
     fsck from util-linux 2.34
     /dev/mapper/vg-backup: 12/376832 files (0.0% non-contiguous), 42091/1506304 blocks
       Size of logical volume vg/backup changed from 5.84 GiB (1496 extents) to 5.94 GiB (1521 extents).
       Logical volume vg/backup successfully resized.
     resize2fs 1.45.5 (07-Jan-2020)
     Resizing the filesystem on /dev/mapper/vg-backup to 1557504 (4k) blocks.
     The filesystem on /dev/mapper/vg-backup is now 1557504 (4k) blocks long.
    
     $ sudo mount /dev/vg/backup /mylvm
     $ df -h /mylvm
     Filesystem             Size  Used Avail Use% Mounted on
     /dev/mapper/vg-backup  5.8G   28K  5.6G   1% /mylvm
    
  8. Enlever de l’espace
    Lorsqu’on réduit un volume logique contenant un système de fichiers, il faut réduire le système de fichier, puis réduire le volume.

     $ sudo umount /mylvm
    
     $ sudo lvresize -r -L 200M /dev/vg/backup
     fsck from util-linux 2.34
     /dev/mapper/vg-backup: 12/638976 files (0.0% non-contiguous), 58796/2539520 blocks
     resize2fs 1.45.5 (07-Jan-2020)
     Resizing the filesystem on /dev/mapper/vg-backup to 51200 (4k) blocks.
     The filesystem on /dev/mapper/vg-backup is now 51200 (4k) blocks long.
    
       Size of logical volume vg/backup changed from <9.69 GiB (2480 extents) to 200.00 MiB (50 extents).
       Logical volume vg/backup successfully resized.
    
     $ sudo pvmove /dev/sdc1
     $ sudo vgreduce vg /dev/sdc1
       Removed "/dev/sdc1" from volume group "vg"
    
     $ sudo mount /dev/vg/backup /mylvm
     $ df -h /mylvm
     Filesystem             Size  Used Avail Use% Mounted on
     /dev/mapper/vg-backup  130M   28K  118M   1% /mylvm
    

Device mapper

Snapshots

Nettoyer

  1. Démonter le volume LVM

     sudo umount /mylvm
     sudo rmdir /mylvm
    
  2. Supprimer le volume LVM

     sudo fdisk /dev/vg/backup
     d
     w
    
     sudo partprobe
    
  3. Supprimer le volume logique

     $ sudo lvremove /dev/vg/backup
     Do you really want to remove and DISCARD active logical volume vg/backup? [y/n]: y
       Logical volume "backup" successfully removed
    
  4. Supprimer le groupe de volumes

     $ sudo vgremove vg
       Volume group "vg" successfully removed
    
  5. Supprimer les volumes physiques

     $ sudo pvremove /dev/sdc1
       Labels on physical volume "/dev/sdc1" successfully wiped.
     $ sudo pvremove /dev/sdb1
       Labels on physical volume "/dev/sdb1" successfully wiped.
     $ sudo pvremove /dev/sda1
       Labels on physical volume "/dev/sda1" successfully wiped.