Como montar a partição LVM da máquina virtual no host KVM?

11

Se eu estiver tentando fazer o seguinte no 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

então eu estou recebendo / partição de inicialização montada. Mas estou recebendo um erro se digitar o seguinte:

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

Aqui está um layout do fdisk na máquina convidada:

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

É possível encontrar uma partição raiz no convidado e montá-la no sistema host?

Evolver
fonte
Suponho que sua referência a kvm101_img2 seja um erro de digitação. Deve ser _img1, certo?
joechip
_img1 é montado corretamente com o método acima, mas _img1 é uma partição / boot, equivalente a / dev / hda1 no convidado. O problema era que eu não conseguia montar _img2 contendo o / dev / hda2 Linux LVM. Esse layout de partição é o padrão para o instalador do CentOS.
Evolver
Ah, ok, fiquei chocado com a referência ao KVM. Não há nada específico da KVM nessa questão, é simplesmente uma estrutura LVM dentro de outra.
31811 joechip

Respostas:

14

Parece que finalmente descobri como fazer as coisas de que precisava. Aqui está o que eu fiz:

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

se os nomes do VolGroup forem idênticos nos sistemas convidado e host, será necessário renomear o VolGroup convidado

# vgrename <uuid> VolGroupXX

uuid de VolGroups você pode fazer check-in vgdisplay. Portanto, o truque está na ativação do VolGroup convidado:

# lvscan
# vgchange -ay VolGroupXX
# lvscan

Depois disso, é facilmente montado:

# mount /dev/VolGroupXX/LogVol00 /mnt

Finalmente, o processo atrasado é:

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

O último comando limpa o cache do LVM e remove o volume físico criado pelo kpartx do LVM.

Evolver
fonte
Pode ser necessário editar o fstab do convidado para usar o VolGroupXX em vez do VolGroup00.
31811 joechip
4

Estou feliz que você tenha descoberto isso para a sua situação.

No caso mais geral, a unidade convidada pode estar em vários formatos, como qcow, qcow2, etc., para que você não possa trabalhar neles diretamente. Nesse caso, você pode usar algo como no host:

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

Em seguida, você pode acessar / dev / nbd0 como a unidade de convidado bruto. Para parar de usar este dispositivo, você deve executar:

# nbd-client -d /dev/nbd0

Se, por outro lado, a unidade convidada estivesse no formato bruto, você usaria losetup:

# losetup -f file.raw

Isso encontraria e usaria o primeiro dispositivo de loop disponível (por exemplo, / dev / loop0). Para parar de usá-lo, execute:

# losetup -d /dev/loop0

Depois disso, você poderá executar o procedimento kpartx / vgscan / lvscan / mount que você descreve na sua resposta.

união
fonte
2

você pode fazer isso usando guestfish - http://libguestfs.org/guestfish.1.html

dyasny
fonte
Obrigado pela sugestão, mas infelizmente eu não conseguia nem instalar o guestfish: passei horas pesquisando e pesquisando - tudo inútil, não funciona :( Talvez exista outra maneira de montar a partição linux? uma ferramenta para montar tudo, apenas LVM.
Evolver
1
tente correr qemu-img info /path/to/image. se o que você obtiver na caixa Tipo não for "RAW", não há como um sistema operacional montar esta imagem como uma partição, pois ela está formatada como um disco virtual específico do qemu. Isto é o que guestfish trata, não é apenas uma ferramenta de montagem simples
dyasny
1

Pode ser mais fácil usar guestfisho pacote libguestfs , que deve resolver todos os detalhes irritantes para você, em vez de tentar fazê-lo manualmente.

TomH
fonte