Accéder au contenu d’une image disque KVM depuis l’hyperviseur
Posted by Daniel on 25 Juil 2011 at 09:00 | Tagged as: linux
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.