Как смонтировать образ диска из командной строки?

40

Я знаю, как смонтировать диск с соответствующим файлом устройства в / dev, но я не знаю, как это сделать для образа диска, который не представляет физическое устройство и не имеет аналога в / dev (например, Файл ISO или образ дискеты). Я знаю, что могу сделать это в Mac OS X, дважды щелкнув значок образа диска в Finder, который автоматически подключит диск, но я бы хотел сделать это с терминала. Я не уверен, есть ли общий способ Unix сделать это, или это зависит от платформы.

user628544
источник
1
Вы имеете в виду, что вы хотите сделать это в командной строке на OS X? Вы упомянули об этом, но, возможно, было бы лучше, если бы вопрос был конкретным для определенной ОС. Кроме того, какой тип образа диска вы имеете в виду? .iso?
ilkkachu

Ответы:

43

Если бы это был образ жесткого диска с таблицей разделов MBR, я бы fdisk образа, чтобы найти смещение для раздела, который мне нужно смонтировать.

fdisk -lu /path/disk.img

Тогда я бы установил его, передав смещение.

mount -o loop,offset=xxxx /path/disk.img /mnt/disk.img.partition

Значение смещения fdiskуказывается в байтах, тогда как показывает количество блоков, поэтому вы должны умножить значение из столбца «Начало» или «Начало» fdiskвывода 512(или независимо от размера блока), чтобы получить смещение для монтирования.

jc__
источник
6
losetup -Pкак правило, более удобно, чем этот метод: unix.stackexchange.com/a/316407/32558
Сиро Сантилли 新疆 事件 中 at 法轮功 六四 事件
35

В большинстве современных систем GNU mountкоманда может справиться с этим:

mount -o loop file.iso /mnt/dir

для размонтирования вы можете просто использовать umountкоманду

umount /mnt/dir

Если ваша ОС не имеет этой опции, вы можете создать петлевое устройство :

losetup -f # this will print the first available loop device ex:/dev/loop0
losetup /dev/loop0 /path/file.iso #associate loop0 with the specified file
mount /dev/loop0 /mnt/dir #It may be necessary specify the type (-t iso9660)

для размонтирования вы можете использовать -d:

umount /mnt/dir
losetup -d /dev/loop0

Если в файле есть разделы, например образ HD, вы можете использовать -Pпараметр (в зависимости от вашей ОС), он отобразит разделы в содержимом файла:

losetup -P /dev/loop0 /path/file.iso # will create /dev/loop0 
ls /dev/loop0p* #the partitions in the format /dev/loop0pX
a0f3dd13
источник
Это в основном localhost(loopback!) Для образов дисков.
Легкость гонок с Моникой
2
losetupи mount -o loopспецифичны для Linux. Он не будет работать на дистрибутивах GNU, использующих другое ядро ​​(например, hurd, illumos или kFreeBSD, хотя illumos и FreeBSD будут иметь эквивалент с другим синтаксисом)
Стефан Шазелас
Вот некоторые функции для дальнейшей автоматизации losetup: unix.stackexchange.com/a/430415/32558
Сиро Сантилли 新疆 事件 中 at 法轮功 六四 事件
6

Пытаться:

mount -o loop /path/to/file.iso /mnt

Вы можете добавить после loop:

  • -t msdos для дискеты
  • -t iso9660 для образа CD-ROM

Linux обычно пытается угадать тип файла.

Archemar
источник
6

losetup -P автоматизация для нескольких разделов изображений

Как смонтировать образ диска из командной строки? | Упоминаются Unix и Linux Stack Exchangelosetup -P , и вот несколько удобных функций Bash для дальнейшей автоматизации. Использование:

$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2

$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there

$ sudo losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                                                                      DIO
/dev/loop1         0      0         0  0 /full/path/to/my.img

$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0

Источник:

los() (
  img="$1"
  dev="$(sudo losetup --show -f -P "$img")"
  echo "$dev"
  for part in "$dev"?*; do
    if [ "$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"
  for part in "$dev"?*; do
    if [ "$part" = "${dev}p*" ]; then
      part="${dev}"
    fi
    dst="/mnt/$(basename "$part")"
    sudo umount "$dst"
  done
  sudo losetup -d "$dev"
)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник