Comment monter la partition LVM de la machine virtuelle sur l'hôte KVM?

11

Si j'essaie de faire ce qui suit sur l'hôte KVM:

# kpartx -av /dev/VolGroup00/kvm101_img
add map kvm101_img1 : 0 208782 linear /dev/VolGroup00/kvm101_img 63
add map kvm101_img2 : 0 125612235 linear /dev/VolGroup00/kvm101_img 208845
# mount /dev/mapper/kvm101_img1 /mnt

alors je reçois la partition / boot montée. Mais je reçois une erreur si je tape ensuite:

# mount /dev/mapper/kvm101_img2 /mnt
mount: you must specify the filesystem type

Voici une disposition fdisk sur la machine invitée:

# fdisk -l
Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14        7832    62806117+  8e  Linux LVM

Est-il possible de trouver une partition racine sur l'invité et de la monter sur le système hôte?

Evolver
la source
Je suppose que votre référence à kvm101_img2 est une faute de frappe. Ce devrait être _img1 à la place, non?
joechip
_img1 se monte correctement avec la méthode ci-dessus, mais _img1 est une partition / boot, équivalente à / dev / hda1 sur l'invité. Le problème était que je ne pouvais pas monter _img2 contenant / dev / hda2 Linux LVM. Cette disposition de partition est par défaut pour le programme d'installation de CentOS.
Evolver
Oh OK, j'ai été renversé par la référence à KVM. Il n'y a donc rien de spécifique au KVM dans cette question, c'est simplement une structure LVM à l'intérieur d'une autre.
joechip

Réponses:

14

Il semble que j'ai enfin compris comment faire les choses dont j'avais besoin. Voici ce que j'ai fait:

# kpartx -av /dev/VolGroup00/kvm101_img
# vgscan

si les noms VolGroup sont identiques dans les systèmes invité et hôte, vous devez renommer VolGroup invité

# vgrename <uuid> VolGroupXX

uuid de VolGroups, vous pouvez vous enregistrer vgdisplay. Donc, l'astuce consiste à activer VolGroup invité:

# lvscan
# vgchange -ay VolGroupXX
# lvscan

Après cela, il est facilement monté:

# mount /dev/VolGroupXX/LogVol00 /mnt

Enfin, le processus en arrière est:

# umount /mnt
# vgchange -an VolGroupXX
# kpartx -dv /dev/VolGroup00/kvm101_img
# pvscan

La dernière commande nettoie le cache LVM et supprime le volume physique créé par kpartx de LVM.

Evolver
la source
Vous devrez peut-être modifier le fstab de l'invité afin d'utiliser VolGroupXX au lieu de VolGroup00.
joechip
4

Je suis content que vous ayez compris votre situation.

Dans le cas plus général, le lecteur invité peut être dans une variété de formats tels que qcow, qcow2, etc., vous ne pourrez donc pas travailler directement sur eux. Dans ce cas, vous pouvez utiliser quelque chose comme sur l'hôte:

# modprobe nbd
# kvm-nbd -c /dev/nbd0 file.qcow2

Ensuite, vous pouvez accéder à / dev / nbd0 en tant que lecteur invité brut. Pour arrêter d'utiliser cet appareil, vous devez exécuter:

# nbd-client -d /dev/nbd0

Si, en revanche, le lecteur invité était au format brut, vous utiliseriez losetup:

# losetup -f file.raw

Cela permettrait de trouver et d'utiliser le premier périphérique de boucle disponible (par exemple, / dev / loop0). Pour arrêter de l'utiliser, exécutez:

# losetup -d /dev/loop0

Après cela, vous pourrez effectuer la procédure kpartx / vgscan / lvscan / mount que vous décrivez dans votre réponse.

joechip
la source
2

vous pouvez le faire en utilisant guestfish - http://libguestfs.org/guestfish.1.html

Dyasny
la source
Merci pour la suggestion, mais malheureusement je n'ai même pas pu installer guestfish: j'ai passé des heures à googler et à enquêter - tout cela est inutile, cela ne fonctionne pas :( Peut-être qu'il y a une autre façon de monter la partition linux? Je n'ai pas besoin de tout-en-un un seul outil pour tout monter, juste LVM
Evolver
1
essayez de courir qemu-img info /path/to/image. si ce que vous obtenez dans la zone Type n'est pas "RAW", il n'y a aucun moyen pour un système d'exploitation de monter cette image en tant que partition, car elle est formatée en tant que disque virtuel spécifique à qemu. C'est ce dont s'occupe guestfish, ce n'est pas seulement un simple outil de montage
dyasny
1

Il pourrait être plus facile de l' utilisation guestfishdu libguestfs package qui devrait fonctionner tous les détails ennuyeux pour vous au lieu d'essayer de le faire manuellement

TomH
la source