Annexe A. Device Mapper (Mappeur de périphériques)
Le Device Mapper est un pilote noyau qui offre un framework générique pour la gestion des volumes. Il permet de créer génériquement des périphériques mappés, qui peuvent être utilisés en tant que volumes logiques. Il ne connaît pas, de manière spécifique, le format des métadonnées et groupes de volumes.
Le Device Mapper fournit la base pour un nombre de technologies de haut niveau. En plus de LVM, le device-mapper multipath et la commande
dmraid
utilisent le mappeur de périphériques. L'interface d'application du mappeur de périphériques est l'appel système ioctl
. L'interface d'utilisateur est la commande dmsetup
.
LVM logical volumes are activated using the Device Mapper. Each logical volume is translated into a mapped device. Each segment translates into a line in the mapping table that describes the device. The Device Mapper supports a variety of mapping targets, including linear mapping, striped mapping, and error mapping. So, for example, two disks may be concatenated into one logical volume with a pair of linear mappings, one for each disk. When LVM2 creates a volume, it creates an underlying device-mapper device that can be queried with the
dmsetup
command. For information about the format of devices in a mapping table, see Section A.1, « Mappages de tables de périphériques ». For information about using the dmsetup
command to query a device, see Section A.2, « La commande dmsetup ».
A.1. Mappages de tables de périphériques
Un périphérique mappé est déterminé par une table qui spécifie comment mapper chaque partie des secteurs logiques, en utilisant un mappage de tables de périphériques pris en charge. La table périphérique mappé, est construite à partir d'une liste de lignes sous la forme suivante :
start length mapping
[mapping_parameters...
]
Sur la première ligne d'une table de Device Mapper, le paramètre
start
doit être égal à zéro. Les paramètres start
+ length
d'une ligne, doivent être égaux au paramètre start
de la lige suivante. Les paramètres de mappage spécifiés sur une ligne de table de mappage dépendent du type de mapping
spécifié sur la ligne.
Les tailles, dans le mappeur de périphérique, sont toujours spécifiées dans les secteurs (512 octets).
Quand un périphérique est spécifié en tant que paramètre dans mappeur de périphérique, il peut être connu sous le nom du périphérique dans le système de fichiers (par exemple,
/dev/hda
) ou par un nombre majeur ou mineur sous les formats suivants major
:minor
. Le format major:minor est le format que l'on préfère, car il évite les recherches de noms de chemins d'accès.
Ce qui suit montre un échantillon de table de mappage pour un périphérique. Dans cette table, il y a quatre cibles linéaires :
0 35258368 linear 8:48 65920 35258368 35258368 linear 8:32 65920 70516736 17694720 linear 8:16 17694976 88211456 17694720 linear 8:16 256
Les 2 premiers paramètres de chaque ligne correspondent au bloc de départ et à la longueur du segment. Le prochain mot-clé est la cible de mappage, qui, dans tous les cas de cet exemple, est
linear
(linéaire). Le reste de la ligne consiste en paramètres pour une cible linéaire
.
Les sous-sections suivantes décrivent le format des mappages suivants :
- linéaire
- par bandes
- miroir
- instantané et origine-instantané
- erreur
- zéro
- multivoies
- cryptage
A.1.1. La cible de mappage linéaire
Une cible de mappage linéaire mappe un ensemble de blocs contunus vers un autre périphérique bloc. Le format d'une cible linéaire est comme suit :
start length
lineardevice offset
start
- Blocs de départ en périphérique virtuel
length
- longueur de ce segment
device
- périphérique en bloc, référencé par le nom d'un périphérique dans le système de fichiers ou par les nombres mineurs ou majeurs sous les formats
major
:minor
offset
- démarrer le déport du mappage sur le périphérique
L'exemple suivant montre une cible linéaire avec un bloc de départ dans le périphérique virtuel de 0, une longueur de segment de 1638400, une paire de nombre majeur:mineur de 8:2, et un déport de départ de 41146992 pour le périphérique.
0 16384000 linear 8:2 41156992
L'exemple suivant montre une cible linéaire avec un paramètre de périphérique spécifié en tant que périphérique
/dev/hda
.
0 20971520 linear /dev/hda 384
A.1.2. La cible de mappage par bandes
La cible de mappage par bandes prend en charge le dénudage pour tous les périphériques physiques. Elle prend pour arguments le nombre de bandes et la taille de la tranche de la bande , suivi par une liste de paires de nom et secteur. Le format de la cible par bandes est le suivante :
start length
striped#stripes chunk_size device1 offset1 ... deviceN offsetN
Il y a un ensemble de paramètres de
device
(périphérique) et de offset
(déport) pour chaque bande.
start
- Blocs de départ en périphérique virtuel
length
- longueur de ce segment
#stripes
- nombre de bandes pour chaque périphérique virtuel
chunk_size
- le nombre de secteurs écrit pour chaque bande avant de passer à la prochaine, doit être à la puissance 2 au moins en taille par rapport à la page du noyau.
device
- périphérique en bloc, référencé par le nom du périphérique dans le système de fichiers ou par les nombres mineurs ou majeurs sous le format
major
:minor
. offset
- démarrer le déport du mappage sur le périphérique
L'exemple suivant montre une cible par bandes comprenant trois bandes et une taille de tranche de 128 :
0 73728 striped 3 128 8:9 384 8:8 384 8:7 9789824
- 0
- Blocs de départ en périphérique virtuel
- 73728
- longueur de ce segment
- par bandes 3 128
- bandes sur trois périphériques avec des tailles de tranches de 128 blocs
- 8:9
- Nombres majeurs:mineurs du premier périphérique
- 384
- démarrage du déport de mappage sur le premier périphérique
- 8:8
- Nombres majeurs:mineurs du second périphérique
- 384
- démarrage du déport de mappage sur le second périphérique
- 8:7
- Nombres majeurs:mineurs sur le troisième périphérique
- 9789824
- démarrage du déport du mappage sur le troisième périphérique
L'exemple suivant montre une cible pour 2 bandes comprenant 256 Kio, avec des paramètres de périphérique spécifiés par les noms de périphérique dans le système de fichiers plutôt que par les nombres majeurs ou mineurs.
0 65536 striped 2 512 /dev/hda 0 /dev/hdb 0
A.1.3. La cible de mappage en miroir
La cible de mappage en miroir prend en charge le mappage du périphérique logique en miroir. Le format de la cible en miroir est le suivant :
start length
mirrorlog_type #logargs logarg1 ... logargN #devs device1 offset1 ... deviceN offsetN
start
- Blocs de départ en périphérique virtuel
length
- longueur de ce segment
log_type
- Les types de log possibles et leurs arguments sont les suivants :
core
- Le miroir est local et le log de miroir est gardé dans la mémoire centrale. Ce type de log contient 1 - 3 arguments :regionsize [[
no
]sync
] [block_on_error
] disk
- Le miroir est local et le log du miroir est gradé sur le disque. Ce type de log contient 2 - 4 arguments :logdevice regionsize [[
no
]sync
] [block_on_error
] clustered_core
- Le miroir est clusterisé et le log de miroir est conservé dans la mémoire centrale. Ce type de log contient 2 - 4 arguments :regionsize UUID [[
no
]sync
] [block_on_error
] clustered_disk
- Le miroir est clusterisé et le log du miroir est conservé sur le disque. Ce type de log contient 3 - 5 arguments :logdevice regionsize UUID [[
no
]sync
] [block_on_error
]
LVM maintient un petit journal qui est utilisé pour garder la trace des régions qui sont synchrônisées avec le ou les miroirs. L'argument regionsize précise la taille de ces régions.Dans un environnement clusterisé, l'argument UUID est un identifiant unique, associé au périphérique du log du miroir, de façon à ce que l'état du log puisse être maintenu à travers le cluster.The optional[no]sync
argument can be used to specify the mirror as "in-sync" or "out-of-sync". Theblock_on_error
argument is used to tell the mirror to respond to errors rather than ignoring them. #log_args
- nombre d'arguments de logs qui seront spécifiés dans le mappage
logargs
- Les arguments de log du miroir, le nombre d'arguments de log fourni est spécifié par le paramètre
#log-args
et les arguments de log recevables sont déterminés par le paramètrelog_type
. #devs
- le nombre de branches du miroir; un périphérique et un déport (offset) sont spécifiés pour chaque branche.
device
- périphérique en bloc pour chaque branche du miroir, référencé par le nom du périphérique dans le système de fichiers ou par les nombres mineurs ou majeurs sous le format
major
:minor
. Un périphérique en bloc et un déport (offset) sont précisés pour chaque branche de miroir, comme indiqué par le paramètre#devs
. offset
- démarrage du mappage sur le périphérique. Un périphérique en bloc est un déport (offset) sont spécifiés pour chaque branche de miroir, comme indiqué par le paramètre
#devs
.
L'exemple suivant montre une cible de mappage en miroir pour un miroir clusterisé, accompagné d'un log de miroir attaché au disque.
0 52428800 mirror clustered_disk 4 253:2 1024 UUID block_on_error 3 253:3 0 253:4 0 253:5 0
- 0
- Blocs de départ en périphérique virtuel
- 52428800
- longueur de ce segment
- mirror clustered_disk
- cible en miroir avec un type de log spécifiant que le miroir est clusterisé et que le log en miroir est gardé sur le disque.
- 4
- 4 arguments de log en miroir vont suivre
- 253:2
- nombres majeur:mineur de périphériques de logs
- 1024
- taille de région que le log en miroir utilise pour garder la trace de ce qui est synchrônisé
UUID
- UUID du périphérique du log en miroir pour conserver l'information du log dans tout le cluster
block_on_error
- le miroir doit répondre aux erreurs
- 3
- nombres de branches du miroir
- 253:3 0 253:4 0 253:5 0
- les nombres majeur:mineur et les déports (offset) des périphériques constituent chaque branche du miroir
A.1.4. Les cibles de mappage de l'instantané et de l'instantané d'origine
Quand vous créez le premier instantané LVM d'un volume, on utilise quatre mappeurs de périphérique :
- Un périphérique comprenant un mappage
linéaire
contenant la table de mappage d'origine du volume de la source. - Un périphérique avec un mappage
linéaire
utilisé comme périphérique COW (de l'anglais copy-on-write ou copie-sur-écriture) pour le volume source, pour chaque écriture, les données d'origine sont sauvegardées dans le périphérique COW de chaque instantané pour garder son contenu visible inchangé (jusqu'à ce que le périphérique COW soit rempli). - Un périphérique contenant un mappage
instantané
combinant #1 et #2, qui est le volume d'instantanés visibles - The "original" volume (which uses the device number used by the original source volume), whose table is replaced by a "snapshot-origin" mapping from device #1.
On utilise un modèle de noms fixes pour créer ces périphériques. Par exemple, vous pourrez utiliser les commandes suivantes pour créer un volume LVM intitulé
base
et un volume d'instantané intitulé snap
bas. sur ce volume.
#lvcreate -L 1G -n base volumeGroup
#lvcreate -L 100M --snapshot -n snap volumeGroup/base
Cela produit quatre périphériques, que vous pouvez apercevoir par les commandes suivantes :
#dmsetup table|grep volumeGroup
volumeGroup-base-real: 0 2097152 linear 8:19 384 volumeGroup-snap-cow: 0 204800 linear 8:19 2097536 volumeGroup-snap: 0 2097152 snapshot 254:11 254:12 P 16 volumeGroup-base: 0 2097152 snapshot-origin 254:11 #ls -lL /dev/mapper/volumeGroup-*
brw------- 1 root root 254, 11 29 ago 18:15 /dev/mapper/volumeGroup-base-real brw------- 1 root root 254, 12 29 ago 18:15 /dev/mapper/volumeGroup-snap-cow brw------- 1 root root 254, 13 29 ago 18:15 /dev/mapper/volumeGroup-snap brw------- 1 root root 254, 10 29 ago 18:14 /dev/mapper/volumeGroup-base
Le format de la cible
instantané-d'origine
est le suivant :
start length
snapshot-originorigin
start
- Blocs de départ en périphérique virtuel
length
- longueur de ce segment
origin
- volume de base d'instantané
L'
instantané-d'origine
aura normalement un ou plusieurs instantanés basés dessus. Les lectures seront directement mappées sur le périphérique de sauvegarde. Pour chaque écriture, les données d'origine seront sauvegardées dans le périphérique COW de chaque instantané pour garder leur contenu visible inchangé, jusqu'à ce que le périphérique COW soit rempli.
Le format de la cible
instantané
est le suivant :
start length
snapshotorigin COW-device
P|Nchunksize
start
- Blocs de départ en périphérique virtuel
length
- longueur de ce segment
origin
- volume de base d'instantané
COW-device
- Périphérique stockant les morceaux de données modifiées
- P|N
- P (Persistant) ou N (Non persistant); indique si l'instantané survivra après le redémarrage. Pour les instantanés transitoires (N), on doit sauvegarder moins de metadonnées sur le disque. Ils peuvent être contenus dans la mémoire par le noyau.
chunksize
- Taille en sectuers de morceaux de données modifiées, qui seront stockés dans le périphérique COW
L'exemple suivant montre une cible
instantané-d'origine
avec un périphérique d'origine de 254:11.
0 2097152 snapshot-origin 254:11
L'exemple suivant montre une cible
instantané
avec un périphérique d'origine de 254:11 et un périphérique COW de 254:12. Ce périphérique d'instantané est persistant à travers les démarrages et la taille du morceau des données stockées sur le périphérique COW est de 16 secteurs.
0 2097152 snapshot 254:11 254:12 P 16
A.1.5. La cible de mappage d'erreurs
Avec une cible de mappage d'erreurs, toute opération E/S vers le secteur mappé échouera.
Une cible de mappage d'erreurs peut être utilisée pour tester. Pour tester comment un périphérique va se comporter en situation d'échec, vous pouvez créer un mappage de périphérique avec un mauvais secteur au milieu d'un périphérique, ou bien, vous pouvez échanger la branche du miroir par une cible d'erreur.
Une cible d'erreurs peut être utilisée à la place d'un périphérique défaillant, comme moyen d'éviter les timeouts et les nouvelles tentatives sur les périphériques. Elle peut servir en tant que cible intermédiaire tandis que vous réarrangez les métadonnées LVM en cas d'échec.
La cible de mappage
erreur
n'accepte pas de paramètres supplémentaires en dehors de start(démarrage) et de length (longueur).
L'exemple suivant montre une cible
erreur
.
0 65536 error
A.1.6. Le cible de mappage zéro
La cible de mappage
zero
est un périphérique en bloc équivalent à /dev/zero
. Toute opération lecture de ce mappage retourne des blocs de zéro. Les données inscrites sur ce mappage sont ignorées, mais les opérations écriture aboutissent à leur fin. La cible de mappage zero
n'accepte pas de paramètres supplémentaires en dehors de start (démarrage) et de length (longueur).
L'exemple suivant montre une cible
zéro
pour un périphérique de 16To.
0 65536 zero
A.1.7. La cible de mappage multivoies
La cible de mappage multivoies supporte le mappage d'un périphérique multivoies. Le format de la cible
multivoie
est la suivante :
start length
multipath
#features [feature1 ... featureN] #handlerargs [handlerarg1 ... handlerargN] #pathgroups pathgroup pathgroupargs1 ... pathgroupargsN
Il existe un ensemble de paramètres
pathgroupargs
pour chaque groupe de chemins d'accès.
start
- Blocs de départ en périphérique virtuel
length
- longueur de ce segment
#features
- Le nombre de fonctionnalités en multivoies, suivi par ces fonctionnalités. Si ce paramètre est zéro, alors il n'y a pas de paramètre
fonctionnalité
et le prochain paramètre de mappage de périphérique sera#handlerargs
. Actuellement, il existe une fonctionnalité multivoies prise en charge,#handlerargs
. Elle indique que ce périphérique multivoies est actuellement configuré pour empiler en liste d'attente des opérations E/S s'il n'y a pas de chemin disponible.Ainsi, si l'optionno_path_retry
du fichiermultipath.conf
a été configuré de façon à s'empiler en file d'attente des opérations E/S jusqu'à ce que tous les chemins d'accès aient été marqués 'failed' (échec) au bout d'un certain nombre de tentatives pour utiliser les chemins d'accès, le mappage apparaîtrait ainsi jusqu'à ce que tous les contrôleurs de chemin d'accès aient 'échoué' le nombre de contrôles spécifiés.0 71014400 multipath 1 queue_if_no_path 0 2 1 round-robin 0 2 1 66:128 \ 1000 65:64 1000 round-robin 0 2 1 8:0 1000 67:192 1000
Après que tous les contrôleurs aient échoué sur le nombre de contrôles spécifiés, le mappage ressemblerait à ce qui suit :0 71014400 multipath 0 0 2 1 round-robin 0 2 1 66:128 1000 65:64 1000 \ round-robin 0 2 1 8:0 1000 67:192 1000
#handlerargs
- Le nombre d'arguments de gestionnaires de matériel, suivi par ces arguments. Un gestionnaire de matériel spécifie un module qui sera utilisé pour effectuer des actions spécifiques à des matériels particuliers au moment des changements de chemins d'accès de groupes ou en cours de gestion des erreurs E/S. Si la configuration est 0, alors le prochain paramètre sera
#pathgroups
. #pathgroups
- Le nombre de groupes de chemins d'accès. Un groupe de chemins d'accès correspond à l'ensemble des chemins d'accès à partir duquel un périphérique multivoies effectuera l'équilibre de ses charges. Il existe un ensemble de paramètres
pathgroupargs
pour chaque pathgroup
- Le prochain groupe de chemins d'accès à essayer.
pathgroupsargs
- Chaque groupe de chemins d'accès consiste aux arguments suivants :
pathselector #selectorargs #paths #pathargs device1 ioreqs1 ... deviceN ioreqsN
Il existe un ensemble d'arguments de chemins d'accès pour chaque chemin dans un groupe de chemins d'accès.pathselector
- Précise l'algorithme qui est utilisé pour déterminer le chemin d'accès dans ce groupe de chemins d'accès, à utiliser pour la prochaine opération E/S.
#selectorargs
- Le nombre d'arguments de sélecteurs de chemins d'accès qui suivent cet argument, est le mappage multivoies. Actuellement, la valeur de cet argument est toujours 0.
#paths
- Le nombre de chemins d'accès dans ce groupe de chemins d'accès.
#pathargs
- Le nombre d'arguments de chemins d'accès spécifiés pour chaque chemin compris dans ce groupe. Actuellement, ce nombre est toujours de 1, l'argument
ioreqs
. device
- Le numéro de périphérique en bloc du chemin, référencé par les nombres majeurs et mineurs, sous le format
major
:minor
ioreqs
- Le nombre de requêtes E/S à diriger vers ce chemin avant de passer au prochain chemin du groupe en question.
Figure A.1, « Cible de mappage multivoies » shows the format of a multipath target with two path groups.
Figure A.1. Cible de mappage multivoies
L'exemple suivant montre une définition de cible en failover pure dans un même périphérique multivoies. Pour cette cible, il existe quatre groupes de chemins, dont un seul chemin ouvert par groupe de chemins, de façon à ce que le périphérique multivoies n'utilise qu'un seul chemin à la fois.
0 71014400 multipath 0 0 4 1 round-robin 0 1 1 66:112 1000 \ round-robin 0 1 1 67:176 1000 round-robin 0 1 1 68:240 1000 \ round-robin 0 1 1 65:48 1000
L'exemple suivant montre la définition d'une cible multibus complètement déployée, dans un même périphérique multivoies. Pour cette cible, il n'y a qu'un seul groupe de chemins, qui inclut tous les chemins. Dans cette installation, multivoies déploie la charge
0 71014400 multipath 0 0 1 1 round-robin 0 4 1 66:112 1000 \ 67:176 1000 68:240 1000 65:48 1000
Pour plus d'informations à propos de multivoies, consultez le document Using Device Mapper Multipath (Utiliser le mappeur de périphériques multivoies).
A.1.8. La cible de mappage de cryptage
La cible
crypt
cible la codification des données qui passent par le périphérique spécifié. Il utilise l'API Crypto du noyau.
Le format de la cible
crypt
est le suivant :
start length
cryptcipher key IV-offset device offset
start
- Blocs de départ en périphérique virtuel
length
- longueur de ce segment
cipher
- Cipher consiste en
cipher[-chainmode]-ivmode[:iv options]
.cipher
- Les ciphers disponibles sont listés dans
/proc/crypto
(par exemple,aes
). chainmode
- Toujours utiliser
cbc
. Ne pas utiliserebc
; qui n'utilise pas un Vecteur Initial (IV) (de l'anglais Initial Vector). ivmode[:iv options]
- IV est un vecteur initial qui est utilisé pour faire varier le cryptage. Le mode de IV est soit
plain
ou bienessiv:hash
. Univmode
de-plain
utilise le nombre de secteurs (plus IV offset) comme IV. Univmode
de-essiv
consistue un progrès par rapport au problème de filigrane numérique (watermark).
key
- Clé de cryptage, fournie en hex
IV-offset
- Initial Vector (IV) offset
device
- périphérique en bloc, référencé par le nom d'un périphérique dans le système de fichiers ou par les nombres mineurs ou majeurs sous les formats
major
:minor
offset
- démarrer le déport du mappage sur le périphérique
L'exemple suivant est un exemple d'une cible
crypt
.
0 2097152 crypt aes-plain 0123456789abcdef0123456789abcdef 0 /dev/hda 0