Если я пытаюсь сделать следующее на хосте 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
Затем я монтирую раздел / boot. Но я получаю сообщение об ошибке, если наберу следующее:
# mount /dev/mapper/kvm101_img2 /mnt
mount: you must specify the filesystem type
Вот макет fdisk на гостевой машине:
# fdisk -l
Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 7832 62806117+ 8e Linux LVM
Можно ли найти корневой раздел в гостевой системе и смонтировать его в хост-системе?
Кажется, я наконец понял, как делать то, что мне нужно. Вот что я сделал:
# kpartx -av /dev/VolGroup00/kvm101_img
# vgscan
если имена VolGroup идентичны в гостевой и хост-системе, то вам необходимо переименовать гостевую VolGroup
# vgrename <uuid> VolGroupXX
uuid VolGroups вы можете проверить vgdisplay
. Итак, фокус в том, чтобы активировать гостевую VolGroup:
# lvscan
# vgchange -ay VolGroupXX
# lvscan
После этого легко монтируется:
# mount /dev/VolGroupXX/LogVol00 /mnt
Наконец, обратный процесс:
# umount /mnt
# vgchange -an VolGroupXX
# kpartx -dv /dev/VolGroup00/kvm101_img
# pvscan
Последняя команда очищает кеш LVM и удаляет физический том, созданный kpartx, из LVM.
Я рад, что ты понял это для своей ситуации.
В более общем случае гостевой диск может быть в различных форматах, таких как qcow, qcow2 и т. Д., Поэтому вы не сможете работать с ними напрямую. В этом случае вы можете использовать на хосте что-то вроде:
# modprobe nbd
# kvm-nbd -c /dev/nbd0 file.qcow2
Затем вы можете получить доступ к / dev / nbd0 как к необработанному гостевому диску. Чтобы прекратить использование этого устройства, вы должны запустить:
# nbd-client -d /dev/nbd0
Если бы, с другой стороны, гостевой диск был в необработанном формате, вы бы использовали losetup:
# losetup -f file.raw
Это позволит найти и использовать первое доступное устройство цикла (например, / dev / loop0). Чтобы прекратить его использование, выполните:
# losetup -d /dev/loop0
После этого вы сможете выполнить процедуру kpartx / vgscan / lvscan / mount, которую описываете в своем ответе.
вы можете сделать это с помощью guestfish - http://libguestfs.org/guestfish.1.html
Может быть проще просто использовать guestfish
из libguestfs пакет, который должен проработать все раздражающие детали вместо того, чтобы пытаться сделать это вручную