Иногда возникает ситуация, когда требуется смонтировать раздел из образа потушенной виртуальной машины. В моем случае, образ виртуальной машины содержал раздел с lvm, из которого мне нужно было смонтировать отдельный том. Звучит запутанно, но на деле все не так и сложно.
Для того, чтобы использовать файл в качестве блочного устройства, есть утилита losetup. Обычно она используется для монтирования шифрованных дисков, но можно и обычные образы цеплять.
Для начала ищем доступное loop-устройство командой
loop /dev/loopN
где N — цифра от 0 и выше.
Если мы получаем ответ такого вида:
loop: can't get info on device /dev/loop55: No such device or address
значит устройства такого loop-диска еще нет и мы можем занять это имя.
losetup /dev/loop55 /xen/VPS123.img
Чтобы проверить, что мы сможем работать с диском, выполним такую команду:
fdisk -ul /dev/loop55
Disk /dev/loop55: 257.7 GB, 257698037760 bytes
255 heads, 63 sectors/track, 31330 cylinders, total 503316480 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0007d98c
Device Boot Start End Blocks Id System
/dev/loop55p1 * 2048 1026047 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/loop55p2 1026048 503316479 251145216 8e Linux LVM
Если ответ содержит названия разделов, как в примере, значит мы можем продолжать. Если же нет, возможно образ поврежден или у него какой-то своеобразный формат.
Для того, чтобы с этими разделами работать, нужно создать файлы устройств, которые указывают на нужные области на диске.
kpartx -a /dev/loop55
После этого в директории /dev/mapper появятся файлы устройств loop55p1 и loop55p2
Теперь можно подцеплять LVM-том
# pvscan PV /dev/dm-1 VG vg_vps2138 lvm2 [239.51 GiB / 0 free] Total: 1 [239.51 GiB] / in use: 1 [239.51 GiB] / in no VG: 0 [0 ] # vgchange -a y 3 logical volume(s) in volume group "vg_vps2138" now active
Вот и все. LVM-подцеплен и разделы доступны для монтирования.