Февраль 2012
Пн Вт Ср Чт Пт Сб Вс
« Июл    
 12345
6789101112
13141516171819
20212223242526
272829  
Рубрики

Записи с меткой ‘mount’

Как подмонтировать 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/

Дело сделано!