Як змонтувати зображення диска з командного рядка?


39

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


1
Ви маєте на увазі, що хочете це зробити в командному рядку в OS X? Ви згадуєте про це, але, можливо, буде краще бути явним, якщо питання стосується певного ос. Також, який тип образу диска ви маєте на увазі? .iso?
ilkkachu

Відповіді:


42

Якби це зображення жорсткого диска з таблицею розділів MBR, я б перейшов на зображення, щоб знайти зсув для розділу, який мені потрібно встановити.

fdisk -lu /path/disk.img

Тоді я би встановив його, передаючи зміщення.

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

Значення зміщення знаходиться в байтах, тоді як fdiskпоказує кількість блоків, тому слід помножити значення з стовпця "Почати" або "Старт" на fdiskвихід 512(або будь-який розмір блоку), щоб отримати зміщення для монтажу.


6
losetup -Pяк правило, зручніше, ніж цей метод: unix.stackexchange.com/a/316407/32558
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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

Це в основному localhost(петля!) Для зображень на диску.
Гонки легкості з Монікою

2
losetupі mount -o loopє специфічними для Linux. Він не працюватиме на дистрибутивах GNU, використовуючи інше ядро ​​(наприклад, hurd, illos або kFreeBSD, хоча iOS і FreeBSD матимуть еквівалент з іншим синтаксисом)
Stéphane Chazelas

Ось кілька функцій для подальшої автоматизації losetup: unix.stackexchange.com/a/430415/32558
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

6

Спробуйте:

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

Ви можете додати після loop:

  • -t msdos для дискети
  • -t iso9660 для зображення з компакт-дисків

Linux зазвичай намагається відгадати тип файлу.


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"
)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.