Parfois, une VM ne démarre pas, et on a besoin d'accéder à ses filesystems pour corriger le problème. Parfois, on veut juste accéder au contenu de l'image sans démarrer la VM. Pour tout le reste, il y a mastercard, mais pour accéder à notre image disque, il y a un peu plus de travail.

Dans l'exemple suivant, nous allons accéder aux volumes logiques LVM contenus dans une image brute (type="raw"), sur un hyperviseur KVM.

Montage des volumes

Attention : ne pas réaliser cette opération alors que la VM est active (ou a minima en s'assurant que tout montage se fait en read-only, et soyez prudents avec cette tronçonneuse, ça coupe).

Dans l'état initial, je n'ai qu'un seul vg visible sur l'hyperviseur :

# vgs VG #PV #LV #SN Attr VSize VFree hypervg 1 3 0 wz--n- 247.22G 146.19G

Regardons maintenant quel est le premier device loopback disponible, et associons notre image disque à ce device :

# losetup -f /dev/loop0 # losetup /dev/loop0 virtual-vdisk

Il faut maintenant détecter le partitionnement interne du fichier image pour le faire reconnaître par l'hyperviseur :

# kpartx -av /dev/loop0 add map loop0p1 : 0 256977 linear /dev/loop0 63 add map loop0p2 : 0 33559785 linear /dev/loop0 257040 add map loop0p3 : 0 33559785 linear /dev/loop0 33816825 add map loop0p4 : 0 2216970 linear /dev/loop0 67376610

La couche LVM de l'hyperviseur peut maintenant détecter le (ou les) VG contenu(s) dans l'image disque :

# vgs VG #PV #LV #SN Attr VSize VFree hypervg 1 3 0 wz--n- 247.22G 146.19G virtualvg 1 7 0 wz--n- 16.00G 7.50G

Si par hasard ce n'était pas visible directement, la commande "vgscan" force un rescan.

Il ne reste qu'à activer le VG pour pouvoir accéder aux LV :

# vgchange -ay virtualvg 7 logical volume(s) in volume group "virtualvg" now active # mount /dev/virtualvg/rootfs /mnt

On peut monter de la même manière tous les LV de tous les VG contenus dans la VM. On peut également accéder à des partitions physiques directes, par exemple pour accéder au /boot de la VM qui correspond à la première partition :

# mount /dev/mapper/loop0p1 /mnt

Démontage des volumes

Le démontage, c'est à peu près la même chose à l'envers.

# umount /mnt # vgchange -an virtualvg # kpartx -dv /dev/loop0 del devmap : loop0p1 del devmap : loop0p2 del devmap : loop0p3 del devmap : loop0p4 # vgs VG #PV #LV #SN Attr VSize VFree hypervg 1 3 0 wz--n- 247.22G 146.19G # losetup -d /dev/loop0

Autres types de fichiers images

Ce genre d'opération est également possible avec d'autres types de fichiers images, voir par exemple cet article pour le montage d'images au format qcow2.