Niveau :
Résumé : dmsetup
Maintenant que vous savez tout sur lvm, regardons sous le capot, pour voir comment ça tourne.
lvm
Lvm n'est en réalité qu'une surcouche à un système bien intégré dans linux et qui se nomme device-mapper ou dm en abrégé. Dm ne fait qu'une chose et il le fait bien : mapper (cartographier) un ou plusieurs périphériques de bloc sur un autre périphérique. Donc ce que fait lvm quand vous déclarez un nouveau lv, c'est uniquement déclarer à device mapper qu'un nouveau périphérique de bloc (le lv) correspond à telle et telle portion d'un périphérique physique (les pv).
Bon lvm fait un peu plus que ça puisqu'il sait faire tout ça tout seul au démarrage sans rien vous demander, il stocke ses informations au bon endroit sur les disques et tout marche de façon transparente. Mais supposons que nous voulions le faire nous-même à la main. C'est parfaitement possible avec la commande dmsetup :
# on crée un device nommé monlv, qui fait 10000 blocs et qui est mappé sur /dev/hda à partir du 1234e bloc $ echo 0 10000 linear /dev/hda 1234 | dmsetup create monlv
Si vous voulez savoir comment sont fait vos lv, il suffit simplement de le demander à dmsetup :
$ dmsetup table /dev/mapper/vg0-lv0 >0 1028160 linear /dev/hda 0 >1028160 3903762 linear /dev/hdb 0
dm
Maintenant, voyons plus loin que lvm, dm vous permet de faire beaucoup de choses (mais à la main). En fait la liste des choses que vous pouvez faire est disponible avec la commande suivante :
$ dmsetup targets >crypt v1.5.0 >snapshot-origin v1.6.0 >snapshot v1.6.0 >mirror v1.0.20 >multipath v1.0.5 >striped v1.1.0 >linear v1.0.2 >error v1.0.1
Cela liste les différentes formes de mapping disponibles dans dm. Vous y reconnaissez des fonctionnalités de lvm, mais aussi d'autres comme error (qui retourne des erreur, pratique surtout pour le développement) ou comme multipath (pour des périphériques auxquels ont peux accéder par des méthodes différentes (redondance)).
Une cible intéressante est crypt qui chiffre à la volée les périphériques de façon transparente. C'est l'utilitaire cryptsetup qui va vous aider à le configurer (hé oui, c'est rigolo à la main, mais c'est pas très pratique). Cet utilitaire vous permettra aussi de gérer différents formats de métadonnées (luks, cryptoloop ...).
Plus rigolo, avec device-mapper vous pouvez tout mélanger et tout superposer. On peut donc imaginer du chiffrement sur seulement la moitié du disque, superposer plusieurs chiffrements, un disque où on laisse des trous, etc.
Et enfin, imaginez que vous puissiez développer votre propre mapper, lequel feriez-vous ? Ne pensez pas que c'est très difficile, il suffit d'écrire 5 fonctions dans le noyau (dont une seule qui fera le mapping). Il est donc possible que si vous avez une bonne idée elle puisse être en développée rapidement. Je vous propose quelques suggestions :
- Un overlay en ram (lecture sur disque, écriture en ram), pratique pour transformer un fs en lecture seule en lecture/écriture temporaire (déja faisable avec des snapshot et des ramdisk, a la main)
- Support des qcow et autres format de disque des machines virtuelles
- Un périphérique avec des checkpoint permettent d'annuler ou de commiter les modifications depuis le dernier checkpoint (plus ou moins jouable avec les snapshot et lvmerge)
- Un périphérique avec une légère redondance pour récupérer les erreurs du medium (par exemple avec par2)
- Un système de statistiques sur le périphérique
Et notez une dernière mauvaise idée : faire de la compression. Faire de la compression au niveau périphérique est extrêmement compliqué car cela implique d'avoir des blocs de taille variable et des périphériques de taille variable, ceci n'est actuellement géré ni au niveau des périphériques ni au niveau des systèmes de fichier. La compression est donc bien mieux gérée au niveau du système de fichier.
Comments