Как смонтировать раздел LVM виртуальной машины на хосте KVM?

11

Если я пытаюсь сделать следующее на хосте 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

тогда я получаю / загрузочный раздел монтируется. Но я получаю сообщение об ошибке, если я набираю следующее:

# 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

Можно ли найти корневой раздел на гостевой и смонтировать его на хост-системе?

Evolver
источник
Полагаю, ваша ссылка на kvm101_img2 является опечаткой. Это должно быть _img1 вместо этого, верно?
Joechip
_img1 правильно монтируется с помощью описанного выше метода, но _img1 - это раздел / boot, эквивалентный / dev / hda1 в гостевой системе. Проблема заключалась в том, что я не смог смонтировать _img2, содержащий / dev / hda2 Linux LVM. Это расположение разделов по умолчанию для установщика CentOS.
Evolver
О, хорошо, я был выброшен ссылкой на KVM. Тогда в этом вопросе нет ничего специфичного для KVM, это просто одна структура LVM внутри другой.
Joechip

Ответы:

14

Кажется, я наконец понял, как делать то, что мне нужно. Вот что я сделал:

# 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.

Evolver
источник
Возможно, вам придется отредактировать fstab гостя, чтобы затем использовать VolGroupXX вместо VolGroup00.
Joechip
4

Я рад, что вы поняли это для вашей ситуации.

В более общем случае гостевой диск может иметь различные форматы, такие как qcow, qcow2 и т. Д., Поэтому вы не сможете работать с ними напрямую. В этом случае вы можете использовать что-то вроде на хосте:

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

Тогда вы можете получить доступ к / dev / nbd0 в качестве необработанного гостевого диска. Чтобы прекратить использование этого устройства, вы должны запустить:

# nbd-client -d /dev/nbd0

Если, с другой стороны, гостевой диск был в необработанном формате, вы бы использовали losttup:

# losetup -f file.raw

Это позволит найти и использовать первое доступное устройство цикла (например, / dev / loop0). Чтобы прекратить использовать его, запустите:

# losetup -d /dev/loop0

После этого вы сможете выполнить процедуру kpartx / vgscan / lvscan / mount, которую вы описали в своем ответе.

joechip
источник
2

Вы можете сделать это с помощью guestfish - http://libguestfs.org/guestfish.1.html

dyasny
источник
Спасибо за предложение, но, к сожалению, я даже не смог установить guestfish: я потратил часы на поиск и поиск в Google - все бесполезно, это не работает :( Может быть, есть какой-то другой способ смонтировать раздел Linux? Мне не нужно все в один инструмент для монтажа всего, только LVM
Evolver
1
попробуй бежать qemu-img info /path/to/image. если то, что вы видите в поле «Тип», не «RAW», то операционная система не сможет смонтировать этот образ как раздел, потому что он отформатирован как виртуальный диск, специфичный для qemu. Это то, с чем имеет дело guestfish, это не просто монтажный инструмент
dyasny
1

Это может быть проще просто использование guestfishиз libguestfs пакета , который должен работать все раздражающие детали для вас вместо того , чтобы пытаться сделать это вручную

TomH
источник