Я знаю, как смонтировать диск, имеющий соответствующий файл устройства в/dev, но я не знаю, как это сделать для образа диска, который не представляет физическое устройство и не имеет аналога в /dev (например, файл ISO или образ дискеты). Я знаю, что могу сделать это в Mac OS X, дважды щелкнув значок образа диска в Finder, что автоматически установит диск, но я хотел бы иметь возможность сделать это с терминала. Я не уверен, существует ли общий способ Unix для этого или он зависит от платформы.
Если бы это был образ жесткого диска с таблицей разделов MBR, я бы fdisk образа, чтобы найти смещение раздела, который мне нужно смонтировать.
fdisk - lu/path/disk.img
Тогда я бы смонтировал его, передав смещение.
mount -o loop, offset = xxxx/path/disk.img/mnt/disk.img.partition
Значение смещения указывается в байтах, тогда как fdisk
показывает количество блоков , поэтому вам следует умножить значение из столбца «Begin» или «Start» вывода fdisk
на 512
(или любой другой размер блока) на получить смещение для монтирования.
1
В большинстве современных систем GNU с этим справляется команда mount
:
mount -o loop file.iso/mnt/dir
для размонтирования вы можете просто использовать команду umount
umount/mnt/dir
Если в вашей ОС нет этой опции, вы можете создать устройство цикла:
losetup -f # это напечатает первое доступное устройство цикла, например:/dev/loop0losetup/dev/loop0/path/file.iso #associate loop0 с указанным filemount/dev/loop0/mnt/dir #It может потребоваться указать тип (-t iso9660)
для подключения, вы можете использовать -d
:
umount/mnt/dirlosetup -d/dev/loop0
Если файл имеет разделы, например HD-изображение, вы можете использовать - P
(в зависимости от вашей ОС), он отобразит разделы в содержимом файла:
losetup -P/dev/loop0/path/file.iso # создаст/dev/loop0 ls/dev/loop0p * # разделы в формате/dev/loop0pX
3
losetup -P
автоматизация для образов с несколькими разделами
Как смонтировать образ диска из командной строки? | В Unix и Linux Stack Exchange упоминается losetup -P
, и вот несколько удобных функций Bash для дальнейшей автоматизации. Использование:
$ los my. img/dev/loop0/mnt/loop0p1/mnt/loop0p2 $ ls/mnt/loop0p1/something/files/youhave/there $ sudo losetup -lNAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO/dev/loop1 0 0 0 0/full /path/to/my.img$ # Очистка. $ losd 0 $ ls/mnt/loop0p1 $ ls/dev | grep loop0loop0
Источник:
los () (img = "$ 1" dev = "$ (sudo losetup --show -f -P "$ img") "echo" $ dev "для части в" $ dev "? *; делать, если [" $ part "=" $ {dev} p * "]; then part =" $ {dev " } "fi dst ="/mnt/$ (basename "$ part") "echo" $ dst "sudo mkdir -p" $ dst "sudo mount" $ part "" $ dst "done) losd () (dev =" /dev/loop $ 1 "для части в" $ dev "? *; do if [" $ part "=" $ {dev} p * "]; then part =" $ {dev} "fi dst ="/mnt/ $ (basename "$ part") "sudo umount" $ dst "done sudo losetup -d" $ dev ")
Попробуйте:
mount -o loop/path/to/ file.iso/mnt
После цикла
вы можете добавить:
-
-t msdos
для дискеты -
-t iso9660
для образа компакт-диска
Linux обычно пытается угадать тип файла.
iv>
Как смонтировать образ диска?
У меня есть образ диска myimage.disk
, который содержит таблицу разделов и основной раздел (т. е. файловая система FAT32). Считайте это изображением USB-ручки.
Я хочу смонтировать основной раздел в локальный каталог. Я знаю, как смонтировать образ раздела с помощью утилит цикла, но здесь у меня есть образ диска. Я предполагаю, что мне нужно смонтировать образ, «пропуская» таблицу разделов, но как я могу это сделать?
Инструмент kpartx упрощает это. Он создает устройства цикла в/dev/mapper для каждого раздела вашего образа. Затем вы можете смонтировать устройство петли, соответствующее желаемому разделу, без необходимости вычислять смещение вручную.
Например, чтобы смонтировать первый раздел образа диска:
kpartx -a -v myimage.diskmount/dev/mapper/loop0p1/mnt/myimage
Когда вы закончите с изображением, удалите цикл устройства:
umount/mnt/myimagekpartx -d -v myimage.disk
В качестве альтернативы, если вы если у вас последнее ядро и передать loop.max_part = 63 при загрузке (если цикл встроен) или в modprobe (если цикл является модулем), вы можете сделать это следующим образом:
losetup/dev/loop0 myimage. diskpartprobe/dev/loop0 # Перечитать таблицу разделов, если/dev/loop0 использовался с другим образом до монтирования/dev/loop0p1/mnt/myimage
Когда вы закончите с цикл:
losetup -d/dev/loop0
Нашел это:
, который кажется именно тем, что я искал.
Вот ключевая часть:
mount -o loop, ro, offset = 32256 hda.img/mnt/rabbit
, где значение смещения указано в байтах. Предлагаемый способ получить смещение — указать parted
на изображении, затем на единицу B для байтов и взять начальное значение из вывода на печать. В качестве альтернативы, если у вас есть дисковое пространство, сделайте очевидное: как только у вас есть смещение и размер, просто используйте dd
для извлечения каждого раздела в отдельный файл.
3
В настоящее время вы можете минимизировать свою работу, используя udisks
. Решение от ArchWiki: udisks — Подключите устройства цикла
Чтобы легко смонтировать образы ISO, используйте следующую команду:
udisksctl loop -setup -r -f image.iso
Это создаст устройство цикла и покажет готовый к монтированию образ ISO. После размонтирования петлевое устройство будет прервано udev.
-r
для параметра только для чтения.
0
local_image_file =/var/tmp /image.imgfirst_byte=$(parted -m $ {local_image_file} unit B print | grep Linux | cut --fields 2 --delimiter ':' | sed 's/.$//') loop_file =/var/tmp/ loopmkdir -p $ {loop_file} mount -o loop, ro, offset = $ {first_byte} $ {local_image_file} $ {loop_file}
1