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.
Flux RSS 2.0