Jak zamontować partycję LVM maszyny wirtualnej na hoście KVM?

11

Jeśli próbuję wykonać następujące czynności na hoście 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

następnie instaluję partycję / boot. Ale pojawia się błąd, jeśli napiszę:

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

Oto układ fdisk na maszynie gościa:

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

Czy można znaleźć partycję root na gościu i zamontować ją na systemie hosta?

Evolver
źródło
Przypuszczam, że twoje odniesienie do kvm101_img2 to literówka. Zamiast tego powinien to być _img1, prawda?
joechip,
_img1 montuje się poprawnie przy użyciu powyższej metody, ale _img1 jest partycją / boot, równoważną / dev / hda1 na gościu. Problem polegał na tym, że nie mogłem zamontować _img2 zawierającej / dev / hda2 Linux LVM. Taki układ partycji jest domyślny dla instalatora CentOS.
Evolver,
Och OK, zostałem wyrzucony przez odniesienie do KVM. W tym pytaniu nie ma nic specyficznego dla KVM, jest to po prostu jedna struktura LVM w drugiej.
joechip

Odpowiedzi:

14

Wygląda na to, że w końcu wymyśliłem, jak robić rzeczy, których potrzebowałem. Oto co zrobiłem:

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

jeśli nazwy VolGroup są identyczne w systemach-gościach i hostach, musisz zmienić nazwę gościa na VolGroup

# vgrename <uuid> VolGroupXX

Uuid z VolGroups, w których możesz się zameldować vgdisplay. Sztuką jest aktywacja gościa VolGroup:

# lvscan
# vgchange -ay VolGroupXX
# lvscan

Następnie można go łatwo zamontować:

# mount /dev/VolGroupXX/LogVol00 /mnt

Wreszcie proces wsteczny to:

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

Ostatnie polecenie czyści pamięć podręczną LVM i usuwa wolumin fizyczny utworzony przez kpartx z LVM.

Evolver
źródło
Być może trzeba będzie edytować plik fstab gościa, aby użyć VolGroupXX zamiast VolGroup00.
joechip
4

Cieszę się, że wymyśliłeś to dla swojej sytuacji.

W bardziej ogólnym przypadku dysk gościa może być w różnych formatach, takich jak qcow, qcow2 itp., Więc nie będzie można bezpośrednio nad nimi pracować. W takim przypadku możesz użyć czegoś takiego jak na hoście:

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

Następnie możesz uzyskać dostęp do / dev / nbd0 jako surowy dysk gościnny. Aby przestać używać tego urządzenia, należy uruchomić:

# nbd-client -d /dev/nbd0

Z drugiej strony, jeśli dysk gościa byłby w formacie surowym, użyłbyś losetup:

# losetup -f file.raw

Spowoduje to znalezienie i użycie pierwszego dostępnego urządzenia pętli (np. / Dev / loop0). Aby przestać go używać, uruchom:

# losetup -d /dev/loop0

Po tym będziesz mógł wykonać procedurę kpartx / vgscan / lvscan / mount opisaną w odpowiedzi.

joechip
źródło
2

możesz to zrobić za pomocą guestfish - http://libguestfs.org/guestfish.1.html

dyasny
źródło
Dzięki za sugestie, ale niestety nie mogłem nawet zainstalować Guestfisha: spędziłem godziny na wyszukiwaniu i badaniu - wszystko bezużyteczne, to nie działa :( Może jest jakiś inny sposób na zamontowanie partycji linux? Nie potrzebuję wszystkiego jedno narzędzie do montażu wszystkiego, tylko LVM.
Evolver,
1
spróbuj uciec qemu-img info /path/to/image. jeśli to, co dostajesz w polu Typ, nie jest „RAW”, system operacyjny nie może zamontować tego obrazu jako partycji, ponieważ jest sformatowany jako dysk wirtualny specyficzny dla qemu. Właśnie tym zajmuje się guestfish, nie jest to tylko proste narzędzie montażowe
dyasny,
1

To może być łatwiejsze do zastosowania tylko guestfishz libguestfs opakowania, które powinny działać wszystkie irytujących szczegółów, zamiast próbować zrobić to ręcznie

TomH
źródło