¿Cómo montar la partición LVM de la máquina virtual en el host KVM?

11

Si intento hacer lo siguiente en el host 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

entonces estoy haciendo / partición de arranque montado. Pero recibo un error si luego escribo lo siguiente:

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

Aquí hay un diseño de fdisk en la máquina invitada:

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

¿Es posible encontrar una partición raíz en el invitado y montarla en el sistema host?

Evolver
fuente
Supongo que su referencia a kvm101_img2 es un error tipográfico. Debería ser _img1 en su lugar, ¿verdad?
joechip
_img1 se monta correctamente con el método anterior, pero _img1 es una partición / boot, equivalente a / dev / hda1 en el invitado. El problema era que no podía montar _img2 que contenga / dev / hda2 Linux LVM. Ese diseño de partición es el predeterminado para el instalador de CentOS.
Evolver
Oh, ok, la referencia a KVM me arrojó. Entonces no hay nada específico de KVM sobre esta pregunta, es simplemente una estructura LVM dentro de otra.
joechip

Respuestas:

14

Parece que finalmente descubrí cómo hacer las cosas que necesitaba. Aquí esta lo que hice:

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

Si los nombres de VolGroup son idénticos en los sistemas huésped y host, debe cambiar el nombre de VolGroup invitado

# vgrename <uuid> VolGroupXX

uuid de VolGroups puede registrarse vgdisplay. Entonces, el truco está en activar VolGroup invitado:

# lvscan
# vgchange -ay VolGroupXX
# lvscan

Después de eso se monta fácilmente:

# mount /dev/VolGroupXX/LogVol00 /mnt

Finalmente, el proceso hacia atrás es:

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

El último comando limpia el caché de LVM y elimina el volumen físico creado por kpartx de LVM.

Evolver
fuente
Es posible que tenga que editar la fstab del invitado para usar VolGroupXX en lugar de VolGroup00.
joechip
4

Me alegra que te hayas dado cuenta de tu situación.

En el caso más general, la unidad de invitado podría estar en una variedad de formatos como qcow, qcow2, etc., por lo que no podría trabajar en ellos directamente. En este caso, puede usar algo como en el host:

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

Entonces podría acceder a / dev / nbd0 como la unidad de invitado sin procesar. Para dejar de usar este dispositivo, debe ejecutar:

# nbd-client -d /dev/nbd0

Si, por otro lado, la unidad de invitado estuviera en formato sin formato, usaría losetup:

# losetup -f file.raw

Esto buscaría y usaría el primer dispositivo de bucle disponible (por ejemplo, / dev / loop0). Para dejar de usarlo, ejecute:

# losetup -d /dev/loop0

Después de esto, podrá realizar el procedimiento kpartx / vgscan / lvscan / mount que describe en su respuesta.

joechip
fuente
2

puedes hacerlo usando guestfish - http://libguestfs.org/guestfish.1.html

dyasny
fuente
Gracias por su sugerencia, pero desafortunadamente ni siquiera pude instalar guestfish: pasé horas buscando en Google e investigando, todo inútil, no funciona :( ¿Tal vez hay alguna otra forma de montar la partición de Linux? No necesito todo incluido una herramienta para montar todo, solo LVM.
Evolver
1
Intenta correr qemu-img info /path/to/image. si lo que obtienes en el cuadro Tipo no es "RAW", entonces no hay forma de que un sistema operativo pueda montar esta imagen como una partición, porque está formateada como un disco virtual específico de qemu. Esto es lo que trata guestfish, no es solo una simple herramienta de montaje
dyasny
1

Puede ser más fácil usarlo guestfishdesde el paquete libguestfs , que debería resolver todos los detalles molestos para usted en lugar de intentar hacerlo manualmente

TomH
fuente