Доброго времени суток.
Заметка о том, как монтировать разделы с "сырых" образов дисков (англ. raw images), используемых, в том числе, эмулятором QEMU.
Итак, дано: Образ Debian GNU/Hurd, взятый отсюда. Цель: подмонтировать корневой раздел с образа диска к файловой системе рабочей ОС с помощью mount.
Положим, что мы уже находимся в каталоге с образом диска, а монтировать собираемся первый раздел с него в /mnt/hurd. Имя файла образа: debian-hurd-20130504.img
Первое, что нужно сделать -- посмотреть расположение разделов в образе диска (иными словами, с какого сектора диска начинается каждый из разделов). Это можно сделать как минимум двумя способами: с помощью file и с помощью fdisk. Рассмотрим оба способа.
Утилита file, как я уже как-то раз писал, умеет показывать информацию не только о простых файлах, но и о всяких чудных штуках вроде сохранённой в файл Главной Загрузочной Записи (Master Boot Record, MBR). А сейчас эта утилита поможет нам получить информацию о разделах, запечатанных внутри образа диска:
$ file debian-hurd-20130504.img | fmt
debian-hurd-20130504.img: ; partition 1: ID=0x83, starthead 32,
startsector 2048, 5785600 sectors; partition 2: ID=0x5, starthead 99,
startsector 5789694, 354306 sectors
.
Здесь утилита fmt используется, дабы уместить вывод команды file в 75 столбцов.
Посмотрим же на вывод команды. Видно, что первый раздел (partition 1) начинается с 2048-го сектора диска (startsector 2048). Это как раз то, что нам нужно.
Попробуем теперь получить эту же информацию с помощью утилиты fdisk:
$ su -
# fdisk -l debian-hurd-20130504.img
Disk debian-hurd-20130504.img: 3146 MB, 3146776576 bytes, 6146048 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: 0x00053020
Устр-во Загр Начало Конец Блоки Id Система
debian-hurd-20130504.img1 2048 5787647 2892800 83 Linux
debian-hurd-20130504.img2 5789694 6143999 177153 5 Расширенный
debian-hurd-20130504.img5 5789696 6143999 177152 82 Linux своп / Solaris
Видим то же самое -- начало первого раздела находится на 2048-м секторе. Разница лишь в подробности вывода и в том, что нам нужно быть суперпользователем для использования fdisk, а утилита file может быть запущена от имени обычного пользователя.
Теперь посмотрим на то, как использовать имеющиеся данные. fdisk показывает данные в секторах, которые по-умолчанию равны 512 байтам. Соответственно, чтобы получить смещение первого раздела на диске в байтах, нужно умножить количество секторов на 512. Сделаем это:
$ echo $((2048 * 512))
1048576
Осталось только передать полученное значение команде mount:
$ su -
# mount -o loop,offset=1048576 debian-hurd-20130504.img /mnt/hurd
Ручного копирования посчитанного значения можно избежать, используя подстановку вывода команды:
# mount -o loop,offset=`echo $((2048 * 512))` \
debian-hurd-20130504.img /mnt/hurd
Полюбуемся результатом:
$ df -h | grep hurd
/dev/loop0 2,8G 804M 1,8G 31% /mnt/hurd
И последнее: согласно документации, необходимо отмонтировать образ диска прежде, чем загружать его в QEMU -- иначе можно повредить данные на подмонтированных разделах образа диска.
Использованные источники:
- Артём