Table des matières

Xen: DomU et LVM en dedans

J'ai fait un rêve: embarqué la gestion d'une partition LVM dans un DomU .

Dans mon idée, ça me permet d'isoler un Dom0 gérant plusieurs partitions.

Mais il y a quelques contraintes a respecter:

  1. le Dom0 doit ignorer cette partition LVM
  2. en cas de sinistre, le Dom0 doit pouvoir monter cette partition LVM

~~READMORE~~

Pourquoi tant de stress ? Parce que plusieurs machines qui gèrent simultanément la même partition c'est extrêmement dangereux, et qu'aucun “garde fou” n'existe au niveau du système.

Donc, il ne peut y avoir qu'une machine qui utilise la partition LVM: soit le Dom0, soit un des DomU.

Ensuite, l'une des raisons d'exister des DomU, c'est qu'en cas de sinistre, de pouvoir arrêter cette VM, et d’accéder ces données à partir du Dom0.

Isoler par filtre

Soit le disk /dev/sda qui est comme cela:

# parted /dev/sda unit s print                                                     
Model: DELL PERC H800 (scsi)
Disk /dev/sda: 19513999360s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start         End           Size          File system  Name     Flags
 1      34s           14648437500s  14648437467s               primary  lvm
 2      14648475648s  19513999326s  4865523679s                primary  lvm
/dev/sda1 Partition LVM du Dom0
/dev/sda2 Partition LVM dédié à un DomU

Mais pour être complet, il y a aussi /dev/sdb2 qui est une partition dédié au Dom0 .

Pour ne pas que la couche LVM du Dom0 voit la partition dans /dev/sda2 j'ai modifié le paramètre filter dans le fichier /etc/lvm/lvm.conf , ainsi:

# TJ -----------
#filter = [ "a/.*/" ]
filter = [ "a|^/dev/sda1$|" , "a|^/dev/sdb2$|", "r/.*/" ]
# --------------

Ça dit à LVM (du Dom0) : “Cherche des partitions LVM que dans /dev/sda1 et /dev/sdb2 , et rejette le reste.

Ainsi la commande pvscan ignore tout autre partition, y compris /dev/sda2 bien sur.

De même, lvs et lvscan resteront ignorante.

:!: FIXME Lorsque je jouais avec le filter , je me suis aperçu que LVM voyait la partition /dev/sda2 sous plusieurs forme, notamment dans : /dev/block/ et /dev/disk/ .
Comme je sais qu'un disk peut changer d'emplacement en cours de boot (par exemple, /dev/sde peut devenir /dev/sda ) , je ne sais pas si un “filter” trop strict peut nuire au démarrage du système.

DomU et sa partition LVM

Maintenant, il convient d'ajouter cette partition LVM au DomU.

Rien de plus simple, j'ajoute un disk virtuel xvdb pointant sur cette partition.

Par exemple, dans la configuration de ce DomU , j'ai ajouté:

disk      = [
                'phy:/dev/vg0/domu-with-lvm-disk,xvda2,w',
                'phy:/dev/vg0/domu-with-lvm-swap,xvda1,w',
                'phy:/dev/sda2,xvdb,w',
            ]

Aprés boot de ce DomU, voici ce que j'ai fait:

:!: J'insiste: je suis dans l'environnement du DomU

D'abord, forcer le filter pour ne voir que xvdb . Donc, dans /etc/lvm/lvm.conf j'ai changé ça pour ça :

filter = [ "a|^/dev/xvdb$|" , "r/.*/" ]

Mis à jour LVM.

# pvscan

Ensuite, créé normalement:

# pvcreate /dev/xvdb 
Physical volume "/dev/xvdb" successfully created
# pvs
PV         VG   Fmt  Attr PSize    PFree   
/dev/xvdb       lvm2 a-   1023,98g 1023,98g
:!: créé un nom de Volume Group qui n'existe pas sur le Dom0 !
# vgcreate vgdata /dev/xvdb
Volume group "vgdata" successfully created
# pvs
PV         VG     Fmt  Attr PSize    PFree   
/dev/xvdb  vgdata lvm2 a-   1023,98g 1023,98g

Ensuite créé les “Logical Volume” a volonté.

# lvcreate .... etc...

Voila.

En cas de besoin

Maintenant, on arrête le DomU et donc plus aucune machine n'utilise la partition /dev/sda2 .

Activer

Voila comment le Dom0 peut voir la partition LVM et monter les “VL” présents.

D'abord, ajouter /dev/sda2 au paramètre filter dans /etc/lvm/lvm.conf. Par exemple:

filter = [ "a|^/dev/sda1$|" , "a|^/dev/sdb2$|", "a|^/dev/sda2$|", "r/.*/" ]

Relancer la commande pvscan : la partition LVM en /dev/sda2 doit apparaître dans la liste retournée.

Par contre, la commande lvscan prétend que les partitions sont inactive !
Exemple:

# lvscan
ACTIVE            '/dev/vg0/system' [18,62 GiB] inherit
ACTIVE            '/dev/vg0/swap' [1,00 GiB] inherit
ACTIVE            '/dev/vg0/x-storage-1-swap' [1,00 GiB] inherit
ACTIVE            '/dev/vg0/x-storage-1-disk' [10,00 GiB] inherit
ACTIVE            '/dev/vg0/domu-with-lvm-swap' [1,00 GiB] inherit
ACTIVE            '/dev/vg0/domu-with-lvm-disk' [5,00 GiB] inherit
inactive          '/dev/vgdata/warez-data' [300,00 GiB] inherit
ACTIVE            '/dev/vg1/x-storage-1-data' [5,97 TiB] inherit

En fait, il convient, maintenant, d'activer le “Volume Group” :

# vgchange -a y vgdata
1 logical volume(s) in volume group "vgdata" now active

De l'intérêt d'avoir un nom de “Volume Group” unique.

Ensuite, procédé comme d'habitude pour monter les partitions LVM.

Voila.

Désactiver

Il suffit de faire l'opération inverse a ci-dessus.

Demounter toutes les partitions associés au “Volume Group” “vgdata”.

Éventuellement , désactiver le “Volume Group” par un:

# vgchange -a n vgdata

Puis retirer du paramètre filter ( dans /etc/lvm/lvm.conf ) le disk /dev/sda2 .

Relancer pvscan pour vérifier qu'il a disparu.

Voila.