Как подмонтировать KVM/Xen диск вне гостевой OS
Задача: Нужен доступ к диску гостевой ОС, без захода в саму ОС. Есть образ диска в виде файла.
Итак, пробуем, как говорит man, делаем loopback устройство и монтируем в нужную папку.
Смотрим какие loopback устройства у нас и какое свободное мы можем использовать для своих целей. Следующая команда даст вам на это ответ:
# losetup –a
/dev/loop0: [0903]:98317 (/vm/vps1.img)
/dev/loop1: [0903]:98314 (/vm/vps2.img)
/dev/loop10: [0903]:98316 (/vm/vps3.img)
/dev/loop11: [0903]:98312 (/vm/vps4.img)
/dev/loop12: [0903]:98318 (/vm/vps5.img)
/dev/loop13: [0903]:98315 (/vm/vps6.img)
/dev/loop14: [0903]:98313 (/vm/vps7.img)
/dev/loop15: [0903]:98311 (/vm/vps8.vm)
Итак, мы можем использовать 16 устройство или выше, они свободны.
Создаем устройство:
# losetup /dev/loop16 /vm/vps5_1.img
Пробуем подмонтировать устройство:
# mount /dev/loop16 /mnt/vps5/
mount: you must specify the filesystem type
Система выдает ошибку, пробуем указать тип файловой системы:
#mount -t ext2 /dev/loop16 /mnt/vps5/
mount: wrong fs type, bad option, bad superblock on /dev/loop16,
missing codepage or other error
In some cases useful info is found in syslog — try
dmesg | tail or so
Все равно ошибка, в чем же дело? Все просто, ваш файл явно разбит на несколько устройств, поэтому система не понимает, что вы от нее хотите. Проверяем это утверждение следующей командой:
#fdisk -l /dev/loop16
Disk /dev/loop16: 20.9 GB, 20971520000 bytes
255 heads, 63 sectors/track, 2549 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/loop16p1 * 1 65 522081 83 Linux
/dev/loop16p2 66 130 522112+ 82 Linux swap / Solaris
/dev/loop16p3 131 2549 19430617+ 83 Linux
Так и есть, как же нам добраться к 3-му разделу? Поглядим документацию к losetup и найдем в ней опцию «-o offset», тоесть смещение. Второй вопрос, как нам высчитать это смещение? Тоже просто, используем команду fdisk для этого.
Итак:
# fdisk -ul /dev/loop16
Disk /dev/loop16: 20.9 GB, 20971520000 bytes
255 heads, 63 sectors/track, 2549 cylinders, total 40960000 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/dev/loop16p1 * 63 1044224 522081 83 Linux
/dev/loop16p2 1044225 2088449 522112+ 82 Linux swap / Solaris
/dev/loop16p3 2088450 40949684 19430617+ 83 Linux
Из данных видим, что один сектор занимает 512 байт, а сместится нам нужно на 2088450 (поле Start у третьей партиции).
Итого получаем: 512 x 2088450 = 1069286400
Эту цифру мы будем использовать при создании блочного устройства. Итак:
#losetup –d /dev/loop16
#losetup –o 1069286400 /dev/loop16 /vm/vps5_1.img
#mount –t ext3 /dev/loop16 /mnt/vps5/
Дело сделано!











