25

У меня есть образ диска myimage.disk который содержит таблицу разделов и основной раздел (то есть файловую систему FAT32). Думайте об этом как об изображении ручки USB.

Я хочу смонтировать основной раздел в локальный каталог. Я знаю, как смонтировать образ раздела, используя утилиты цикла, но здесь у меня есть образ диска. Я предполагаю, что мне нужно смонтировать образ, "пропуская" таблицу разделов, но как я могу это сделать?

4 ответа4

44

Инструмент kpartx делает это проще. Он создает петлевые устройства в /dev /mapper для каждого раздела в вашем изображении. Затем вы можете установить петлевое устройство, которое соответствует вашему желаемому разделу, без необходимости вычислять смещение вручную.

Например, чтобы смонтировать первый раздел образа диска:

kpartx -a -v myimage.disk
mount /dev/mapper/loop0p1 /mnt/myimage

Когда вы закончите с изображением, удалите устройства петли:

umount /mnt/myimage
kpartx -d -v myimage.disk

В качестве альтернативы, если у вас последнее ядро, и передайте loop.max_part = 63 при загрузке (если цикл встроен) или в modprobe (если loop это модуль), то вы можете сделать это следующим образом:

losetup /dev/loop0 myimage.disk
partprobe /dev/loop0             # Re-read partition table if /dev/loop0 was used with a different image before
mount /dev/loop0p1 /mnt/myimage

Когда вы закончите с циклом:

losetup -d /dev/loop0
4

Нашел это:

http://www.andremiller.net/content/mounting-hard-disk-image-including-partitions-using-linux

что кажется именно то, что я искал.

Вот ключевая часть:

mount -o loop,ro,offset=32256 hda.img /mnt/rabbit

где значение смещения в байтах. Предлагаемый способ получить смещение - указать parted изображение на изображение, затем на единицу B для байтов и взять начальное значение из вывода на печать. В качестве альтернативы, если у вас есть место на диске, сделайте очевидное: если у вас есть смещение и размер, просто используйте dd для извлечения каждого раздела в отдельный файл.

2
local_image_file=/var/tmp/image.img
first_byte=$(parted -m ${local_image_file} unit B print | grep Linux | cut --fields 2 --delimiter ':' | sed 's/.$//')
loop_file=/var/tmp/loop
mkdir -p ${loop_file}
mount -o loop,ro,offset=${first_byte} ${local_image_file} ${loop_file}
2

В настоящее время вы можете минимизировать свою работу, используя udisks . Решение от ArchWiki: udisks - Монтирование петлевых устройств

Чтобы легко смонтировать образы ISO, используйте следующую команду:

udisksctl loop-setup -r -f image.iso

Это создаст устройство цикла и покажет ISO-образ, готовый к монтированию. После размонтирования устройство цикла будет прервано udev.

-r там только для чтения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .