Страницы

суббота, 13 октября 2012 г.

Монтирование образа диска, с разделами. Mount dd-image

Монтирование образа диска с разделами, из командной строки, может быть не такой простой.

Создадим образ диска (например флешки), либо возьмем имеющийся, созданной какой-либо программой, например dd.

Для примера, можно потренироваться на простом образе:

Создадим файл-образ:
iam@mir:$ truncate --size=128MiB test.img
Это пустой файл.

Разметка образа в старую систему MBR (хотя можно также использовать GPT - gdisk).
iam@mir:$ fdisk test.img

Создадим 2 любых первичных раздела:

и посмотрим что получилось (первый раздел 64MiB, второй - что осталось):

iam@mir:$ fdisk -l test.img


Диск test.img: 134 МБ, 134217728 байт
255 головок, 63 секторов/треков, 16 цилиндров, всего 262144 секторов
Units = секторы of 1 * 512 = 512 bytes
Размер сектора (логического/физического): 512 байт / 512 байт
I/O size (minimum/optimal): 512 bytes / 512 bytes
Идентификатор диска: 0xdcf09775

Устр-во Загр     Начало       Конец       Блоки   Id  Система
test.img1            2048      127047       62500   83  Linux
test.img2          127048      262143       67548   83  Linux

Кстати видно, что утилита fdisk из последних версий, осуществляет выравнивание разделов, иначе бы, начало первого раздела было с сектора 63, а не 2048. 


Итак, основная идея - использование опции offset и sizelimit команд losetup и mount. Это потенциально позволит взять любой кусок из файла и примонтировать его.

Для получения смещения первого раздела, вычислим 2048 х 512 = 1048576
Для получения смещения второго раздела, вычислим 127048 х 512 = 65048576

Примонтируем первый раздел образа, как петлевое устройство /dev/loop7
iam@mir:$ sudo losetup --offset=1048576 --sizelimit=64MiB /dev/loop7 test.img

Посмотрим:
iam@mir:$ sudo losetup -a
/dev/loop7: [0804]:3823823 (/home/iam/test.img), offset 1048576, sizelimit 67108864

Сделаем файловую систему на разделе. Я предпочитаю UDF.
iam@mir:$ sudo mkudffs /dev/loop7
start=0, blocks=16, type=RESERVED 
start=16, blocks=3, type=VRS 
start=19, blocks=237, type=USPACE 
start=256, blocks=1, type=ANCHOR 
start=257, blocks=16, type=PVDS 
start=273, blocks=1, type=LVID 
start=274, blocks=32237, type=PSPACE 
start=32511, blocks=1, type=ANCHOR 
start=32512, blocks=239, type=USPACE 
start=32751, blocks=16, type=RVDS 
start=32767, blocks=1, type=ANCHOR

Можно отмонтировать петлевое устройство:
iam@mir:$ sudo losetup -d /dev/loop7

Проверяем, правильно ли всё сделали - монтируем:

root@mir:# mount test.img /mnt/udf -o loop,offset=1048576

Если всё правильно, в синтаксисе не ошиблись, то можно читать писать в каталог /mnt/udf

Отмонтируем наш 64MiB раздел:
root@mir:# sync && umount /mnt/udf

Со вторым разделом, можно проделать тоже самое.

Комментариев нет: