Post

Comment monter une image disque virtuel qcow2 contenant LVM sur une machine hôte KVM

Comment monter une image disque virtuel qcow2 contenant LVM sur une machine hôte KVM

Qemu KVM

Question : J’ai une image disque de type qcow2 qui est utilisée par une de mes VM invitées sur QEMU/KVM. Je veux modifier le contenu de l’image disque sans allumer la VM, et pour cela j’ai besoin de monter l’image disque quelque part.
Existe-t-il un moyen de monter une image disque qcow2 sous Linux ?

Lorsque vous exécutez une machine virtuelle (VM) invitée sur un hyperviseur, vous créez une ou plusieurs images de disque dédiées à la VM. En tant que volume de disque virtuel, une image de disque représente le contenu et la structure d’un périphérique de stockage (par exemple, un disque dur ou un lecteur flash) attaché à la VM. Si vous souhaitez modifier des fichiers dans l’image disque d’une VM sans mettre la VM sous tension, vous pouvez monter l’image disque. Vous pourrez alors modifier le contenu de l’image disque avant de la démonter. Sous Linux, il existe plusieurs façons de monter une image disque, et différents types d’images disques nécessitent différentes approches.

Méthode qemu-nbd

How to mount qcow2 disk image on Linux

Une méthode pour monter une image disque qcow2 consiste à utiliser qemu-nbd, un outil en ligne de commande qui exporte une image disque en tant que périphérique de bloc réseau (nbd).

Montage d’une partition à partir d’une image qcow2

Toutes les commandes se font en mod su

Nous allons utiliser qemu-nbd, qui permet d’utiliser le protocole NBD (network block device) pour partager l’image disque.

1
2
modprobe nbd max_part=16
qemu-nbd --connect=/dev/nbd0 /path/to/qcow2/image
  • La première commande charge le module du noyau nbd. L’option max_part=N spécifie le nombre maximum de partitions que nous voulons gérer avec nbd.
  • La seconde commande exporte l’image disque spécifiée en tant que périphérique réseau (/dev/nbd0). En tant que périphérique réseau, vous pouvez utiliser /dev/nbd0, /dev/nbd1, /dev/nbd2, etc. selon ce qui est inutilisé.

Quant à l’image disque, assurez-vous de spécifier son chemin complet.
Par exemple, pour exporter l’image xenserver.qcow2 sous /dev/nbd0 :

1
qemu-nbd --connect=/dev/nbd0 /var/lib/libvirt/images/xenserver.qcow2

Après cela, les partitions de disque existantes dans l’image disque seront mappées vers /dev/nbd0p1, /dev/nbd0p2, /dev/nbd0p3, etc.

Pour vérifier la liste des partitions mappées par nbd, utilisez fdisk :

1
fdisk /dev/nbd0 -l

Enfin, choisissez une partition (par exemple, /dev/nbd0p1) et montez-la sur un point de montage local (par exemple, /mnt).

1
mount /dev/nbd0p1 /mnt

Vous pourrez maintenant accéder et modifier le contenu de la partition montée de l’image disque via le point de montage /mnt.

Une fois que vous avez terminé, démontez-le, et déconnectez l’image disque comme suit.

1
2
umount /mnt
qemu-nbd --disconnect /dev/nbd0

Montage d’un disque virtuel contenant LVM

How to Mount Guest Qcow2 Virtual disk Image containing LVM on KVM Host Machine

On charge le module pour gérer 16 partitions

1
modprobe nbd max_part=16

On veut monter une image disque virtuelle contenant 2 partitions , part 1 - EFI et part 2 - LVM
Le disque virtuel : /home/yann/virtuel/KVM/endeavour-archlinux.qcow2

exporter l’image endeavour-archlinux.qcow2 sous /dev/nbd0

1
qemu-nbd --connect=/dev/nbd0 /home/yann/virtuel/KVM/endeavour-archlinux.qcow2

Liste des partitions

1
fdisk /dev/nbd0 -l
1
2
3
4
5
6
7
8
9
10
Disque /dev/nbd0 : 20 GiB, 21474836480 octets, 41943040 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : gpt
Identifiant de disque : 7864DCE0-89B1-41F2-B530-EFDB179BBA95

Périphérique  Début      Fin Secteurs Taille Type
/dev/nbd0p1    2048   616447   614400   300M Données de base Microsoft
/dev/nbd0p2  616448 21587967 20971520    10G LVM Linux

Le périphérique /dev/nbd0p2, est LVM donc vous devrez localiser les nouvelles PVs/VGs et LVs dans la machine hôte KVM.

1
pvscan
1
2
3
4
5
  PV /dev/sdb3        VG vg-nas-one      lvm2 [<3,64 TiB / 1,95 TiB free]
  PV /dev/nvme0n1p3   VG nvme1tb         lvm2 [930,71 GiB / 425,71 GiB free]
  PV /dev/nbd0p2      VG eos             lvm2 [<10,00 GiB / 1020,00 MiB free]
  PV /dev/sda1        VG ssd-512         lvm2 [<476,94 GiB / 0    free]
  Total: 4 [5,02 TiB] / in use: 4 [5,02 TiB] / in no VG: 0 [0   ]

Dans le cas où le PV/VG n’est pas vu, rafraîchissez le cache du volume physique pour que la machine hôte reconnaisse le nouveau PV avec la commande pvscan --cache

1
vgscan
1
2
3
4
  Found volume group "vg-nas-one" using metadata type lvm2
  Found volume group "nvme1tb" using metadata type lvm2
  Found volume group "eos" using metadata type lvm2
  Found volume group "ssd-512" using metadata type lvm2
1
lvscan
1
2
3
4
5
6
7
8
9
  ACTIVE            '/dev/vg-nas-one/sav' [500,00 GiB] inherit
  ACTIVE            '/dev/vg-nas-one/iso' [200,00 GiB] inherit
  ACTIVE            '/dev/vg-nas-one/lvm-sav' [1,00 TiB] inherit
  ACTIVE            '/dev/nvme1tb/rootnvme' [60,00 GiB] inherit
  ACTIVE            '/dev/nvme1tb/homenvme' [100,00 GiB] inherit
  ACTIVE            '/dev/nvme1tb/medianvme' [300,00 GiB] inherit
  ACTIVE            '/dev/nvme1tb/rooteos' [45,00 GiB] inherit
  inactive          '/dev/eos/rooteos' [9,00 GiB] inherit
  ACTIVE            '/dev/ssd-512/virtuel' [<476,94 GiB] inherit

Activer les OS invités VG

1
vgchange -ay
1
2
3
4
3 logical volume(s) in volume group "vg-nas-one" now active
4 logical volume(s) in volume group "nvme1tb" now active
1 logical volume(s) in volume group "ssd-512" now active
1 logical volume(s) in volume group "eos" now active
1
lvscan
1
2
3
4
5
6
7
8
9
  ACTIVE            '/dev/vg-nas-one/sav' [500,00 GiB] inherit
  ACTIVE            '/dev/vg-nas-one/iso' [200,00 GiB] inherit
  ACTIVE            '/dev/vg-nas-one/lvm-sav' [1,00 TiB] inherit
  ACTIVE            '/dev/nvme1tb/rootnvme' [60,00 GiB] inherit
  ACTIVE            '/dev/nvme1tb/homenvme' [100,00 GiB] inherit
  ACTIVE            '/dev/nvme1tb/medianvme' [300,00 GiB] inherit
  ACTIVE            '/dev/nvme1tb/rooteos' [45,00 GiB] inherit
  ACTIVE            '/dev/eos/rooteos' [9,00 GiB] inherit
  ACTIVE            '/dev/ssd-512/virtuel' [<476,94 GiB] inherit

Créer le dossier

1
mkdir -p /mnt/vm-eos/root

Montage

1
mount /dev/eos/rooteos /mnt/vm-eos/root

Liste

1
ls /mnt/vm-eos/root/
1
bin  boot  dev	etc  home  lib	lib64  lost+found  mnt	opt  proc  root  run  sbin  srv  sys  tmp  usr	var

Supprimez le pilote du noyau NBD

A la fin des opérations

1
rmmod nbd
Cet article est sous licence CC BY 4.0 par l'auteur.