Le Device Mapper (ou Carte/Correspondance des périphériques en français) permet de créer un périphérique block (un « disque dur »…) à partir d’autres périphériques blocks.
En d’autres termes, dans l’utilisation la plus simple, vous pouvez utiliser des morceaux de partitions de plusieurs disques, pour créer un disque composite.
C’est utilisé surtout avec le LVM et le RAID logiciel.
Pour illustrer nos propos, nous allons créer un disque virtuel appelé virtualhd, composé d’un morceau de 100Mo pris sur le disque /dev/sdb et d’un morceau de 50Mo pris sur /dev/sdc.
Les partitions /dev/sdb1 et /dev/sdc1 (créées avec fdisk) font environ 20Go :
[root@TEST /]# fdisk -l Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors (...) Device Boot Start End Blocks Id System /dev/sdb1 2048 41943039 20970496 83 Linux Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors (...) Device Boot Start End Blocks Id System /dev/sdc1 2048 41943039 20970496 83 Linux
Créons un disque virtualhd avec l’outil dmsetup :
[root@TEST /]# dmsetup create virtualhd 0 204800 linear /dev/sdb1 0 204800 102400 linear /dev/sdc1 1500000
(CTRL-D pour sortir)
Que signifient ces lignes ?
- dmsetup create virtualhd
- Le périphérique block /dev/mapper/virtualhd va être créé
- 0 204800 linear /dev/sdb1 0
- Les 204 800 premiers secteurs (en partant de 0) de ce nouveau périphérique sont en fait les secteurs du périphérique /dev/sdb1, en partant du secteur 0
- Le système utilise donc 204800 secteurs de /dev/sdb1 à partir du secteur 0
- 204800 102400 linear /dev/sdc1 1500000
- Les 102400 secteurs suivants (donc à partir du 204800ème secteur) de ce nouveau périphérique sont en fait les secteurs du périphérique /dev/sdc1
- Le système utilise donc 102400 secteurs de /dev/sdc1, à partir du secteur 1500000 (on suppose que les secteurs précédents de /dev/sdc1 sont déjà utilisés).
- La taille d’un secteur est de 512 octets
- Le premier morceau pris sur /dev/sdb1 fait 204800 secteurs = 104857600 octets = 100 Mo
- Le deuxième morceau pris sur /dev/sdc1 fait 102400 secteurs = 52428800 octets = 50 Mo
Nous obtenons donc un nouveau périphérique :
[root@TEST /]# fdisk –l (...) Disk /dev/mapper/virtualhd: 157 MB, 157286400 bytes, 307200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Il est possible de formater ce disque, et de le monter dans un répertoire :
[root@TEST /]# mkfs.ext4 /dev/mapper/virtualhd mke2fs 1.42.9 (28-Dec-2013) (...) Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done [root@TEST /]# mount /dev/mapper/virtualhd /mnt/virtualhd/ [root@TEST /]# df -hP /mnt/virtualhd/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/virtualhd 142M 1.6M 130M 2% /mnt/virtualhd
Un peu plus en details :
Le périphérique /dev/mapper/virtualhd est en fait un lien symbolique vers un device dans /dev :
[root@TEST /]# ls -lh /dev/mapper/virtualhd lrwxrwxrwx. 1 root root 7 Jan 18 13:48 /dev/mapper/virtualhd -> ../dm-2
Ce device est le “vrai” device, dont on trouve le majeur/mineur (ici 253/2) :
[root@TEST /]# ls -lh /dev/dm-2 brw-rw----. 1 root disk 253, 2 Jan 18 13:48 /dev/dm-2
C’est le vrai majeur/mineur du device virtualhd qu’on retrouve dans la commande dmsetup ls :
[root@TEST /]# dmsetup ls virtualhd (253:2) centos-swap (253:1) centos-root (253:0)
Dans le résultat de cette commande, on constate que d’autres devices sont en fait des devices mappés ; ici, il s’agit en réalité de volumes logiques LVM, mais cela sera exploré dans un prochain article.
Pour finir, on affiche la table de correspondance du device avec la commande dmsetup table :
[root@TEST /]# dmsetup table virtualhd: 0 204800 linear 8:17 0 virtualhd: 204800 102400 linear 8:33 1500000
On retrouve exactement les mêmes informations que lors de la création, à la simple exception des devices qui sont identifiés par leur majeur/mineur (8/17 et 8/33).
Quels sont les devices derrière ces majeurs/mineurs ?
[root@TEST /]# ls -lh /dev/sd[bc]1 brw-rw----. 1 root disk 8, 17 Jan 18 12:33 /dev/sdb1 brw-rw----. 1 root disk 8, 33 Jan 18 12:33 /dev/sdc1
Ce sont bien sûr sdb1 et sdc1 utilisés lors de la création.
Voir une application de Device Mapper avec LVM dans l’article suivant.