Предположим, у вас есть том LVM / dev / vg0 / mylv. Вы представили его как виртуальный диск виртуальной или эмулированной гостевой системе. Во время установки гостевая система видит его как / dev / sda, разбивает его на / dev / sda {1,2,5,6} и завершает установку. Теперь в какой-то момент вам нужно получить доступ к этим файловым системам из хост-системы, не запуская гостевую систему. fdisk прекрасно видит эти разделы:
# fdisk -l /dev/vg0/mylv
Device Boot Start End Blocks Id System
/dev/vg0/mylv1 2048 684031 340992 83 Linux
/dev/vg0/mylv2 686078 20969471 10141697 5 Extended
/dev/vg0/mylv5 686080 8290303 3802112 83 Linux
/dev/vg0/mylv6 8292352 11980799 1844224 83 Linux
Однако таких устройств, как / dev / vg0 / mylv1, на самом деле не существует. Я предполагаю, что, поскольку они находятся внутри LV, ОС по умолчанию не распознает этот тип вложенности. Могу ли я как-нибудь настроить Linux так, чтобы появился / dev / vg0 / mylv1 или его эквивалент и, таким образом, стал монтируемым в хост-системе?
Я понимаю, что это возможно с qemu-nbd, и при необходимости воспользуюсь этим. Однако я надеялся на что-то более прямое, если возможно, а не на моделирование сетевого блочного устройства и его подключение.
Я считаю, что инструмент, который вы ищете, kpartx
.
Общая процедура:
Перечислить разделы в образе диска:
kpartx -l /dev/vg0/mylv
Добавьте разделы в device-mapper:
kpartx -a /dev/vg0/mylv
Смонтируйте интересующий раздел:
mount -o ro /dev/mapper/loop0p5 /mnt
Вы можете получить доступ к разделенным файловым системам через петлю, используя смещения. Умножьте начало сектора на размер сектора.
mkdir /mnt/mylv{1,5,6}
mount -o ro,loop,offset=$((512*2048)) /dev/vg0/mylv /mnt/mylv1
mount -o ro,loop,offset=$((512*686080)) /dev/vg0/mylv /mnt/mylv5
mount -o ro,loop,offset=$((512*8292352)) /dev/vg0/mylv /mnt/mylv6