Device Mapper et LVM

Device Mapper et LVM

Cet article fait suite à Device Mapper : une explication simple.

Dans cet article, nous allons montrer que la structure sous-jacente de LVM est en fait du Device Mapper.

Pour cela, nous allons :

  • créer deux partitions
    • 100 Mo sur /dev/sdb
    • 50 Mo sur /dev/sdc
  • ajouter ces partitions dans un VG (Volume Group)
  • créer un Volume Logique (LV) dans ce VG.

Ensuite, nous verrons comment ce LV est fabriqué dans le Device Mapper.

 

Avec fdisk, nous avons créé 2 partitions sur 2 disques de 20 Go : /dev/sdb1 (100 Mo) et /dev/sdc1 (50 Mo) :

[root@TEST /]# fdisk -l
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
(...)
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      206847      102400   83  Linux

Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
(...)
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048      104447       51200   83  Linux

Créons maintenant un VG à partir de ces deux partitions :

[root@TEST /]# vgcreate vg-virtual /dev/sdb1 /dev/sdc1
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdc1" successfully created
  Volume group "vg-virtual" successfully created

Dans ce VG, créons un LV qui occupe tout l’espace (donc 150 Mo) :

[root@TEST /]# lvcreate -n lv-virtual -l+100%FREE vg-virtual
  Logical volume "lv-virtual" created.

La commande lvs indique bien la création d’un LV de (environ) 150Mo :

[root@TEST /]# lvs
  LV         VG         Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root       centos     -wi-ao----  17.47g
  swap       centos     -wi-ao----   2.00g
  lv-virtual vg-virtual -wi-a----- 144.00m

 

Comment ce LV est-il représenté dans le Device Mapper ?

La commande dmsetup ls nous confirme qu’un device composite (c’est-à-dire composé de plusieurs partitions) a bien été créé :

[root@TEST /]# dmsetup ls
vg--virtual-lv--virtual (253:2)
centos-swap     (253:1)
centos-root     (253:0)

Quelle est la composition de ce device ?

Utilisons la commande dmsetup table :

[root@TEST /]# dmsetup table vg--virtual-lv--virtual
0 196608 linear 8:17 2048
196608 98304 linear 8:33 2048

Nous constatons ici que le device vg–virtual-lv–virtual est composé de deux devices 8:17 et 8:33 qui sont en fait /dev/sdb1 et /dev/sdc1 :

[root@TEST /]# ls -lh /dev/sd[bc]1
brw-rw----. 1 root disk 8, 17 Jan 18 16:11 /dev/sdb1
brw-rw----. 1 root disk 8, 33 Jan 18 16:11 /dev/sdc1

Selon le résultat de dmsetup table, le device est composé de la manière suivante :

  • 0 196608 linear 8:17 2048
    •  Les 196608 premiers secteurs du LV sont en fait 196608 secteurs de /dev/sdb1
      • A partir du secteur 2048 de /dev/sdb1
      • 196608 secteurs de 512 octets = 100663296 octets = 96 Mo
  • 196608 98304 linear 8:33 2048
    •  Les 98304 secteurs suivants du LV sont en fait 98304 secteurs de /dev/sdc1
      • A partir du secteur 2048 de /dev/sdb1
      • 98304 secteurs de 512 octets = 50331648 octets = 48 Mo

Tout cela montre qu’un disque LVM est essentiellement un disque construit avec Device Mapper.

Bien sûr, il ne suffit pas de créer du Device Mapper à la main pour faire appaître un volume LVM (comme on modifierait /etc/passwd et /etc/shadow pour créer un nouvel utilisateur). En effet, LVM stocke des métadatas sur ses volumes qu’il est impossible de créer manuellement.