如何从命令行挂载磁盘映像?

use*_*544 58 mount disk-image

我知道如何挂载在 /dev 中具有相应设备文件的驱动器,但我不知道如何为不代表物理设备且在 /dev 中没有类似物的磁盘映像执行此操作(例如ISO 文件或软盘映像)。我知道我可以在 Mac OS X 中通过双击 Finder 中的磁盘映像图标来执行此操作,这将自动安装驱动器,但我希望能够从终端执行此操作。我不确定是否有通用的 Unix 方式来执行此操作,或者这是否是特定于平台的。

jc_*_*c__ 62

如果它是一个带有 MBR 分区表的硬盘驱动器映像,我会 fdisk 映像以找到我需要安装的分区的偏移量。

fdisk -lu /path/disk.img
Run Code Online (Sandbox Code Playgroud)

然后我会通过偏移量安装它。

mount -o loop,offset=xxxx /path/disk.img /mnt/disk.img.partition
Run Code Online (Sandbox Code Playgroud)

偏移值以字节为单位,而fdisk显示块计数,因此您应该将fdisk输出的“开始”或“开始”列中的值乘以512(或任何块大小)以获得要安装的偏移量。

  • `losetup -P` 通常比这种方法更方便:https://unix.stackexchange.com/a/316407/32558 (12认同)

小智 51

在大多数现代 GNU 系统上,该mount命令可以处理:

mount -o loop file.iso /mnt/dir
Run Code Online (Sandbox Code Playgroud)

卸载你可以只使用umount命令

umount /mnt/dir
Run Code Online (Sandbox Code Playgroud)

如果您的操作系统没有此选项,您可以创建一个循环设备

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)
Run Code Online (Sandbox Code Playgroud)

卸载你可以使用-d

umount /mnt/dir
losetup -d /dev/loop0
Run Code Online (Sandbox Code Playgroud)

如果文件有分区,例如高清图像,您可以使用该-P参数(取决于您的操作系统),它将映射文件内容中的分区:

losetup -P /dev/loop0 /path/file.iso # will create /dev/loop0 
ls /dev/loop0p* #the partitions in the format /dev/loop0pX
Run Code Online (Sandbox Code Playgroud)

  • `losetup` 和 `mount -o loop` 是 Linux 特有的。它不适用于使用不同内核的 GNU 发行版(例如 hurd、illumos 或 kFreeBSD,尽管 illumos 和 FreeBSD 将具有不同语法的等效项) (2认同)

Cir*_*郝海东 9

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
Run Code Online (Sandbox Code Playgroud)

来源:

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"
)
Run Code Online (Sandbox Code Playgroud)


Arc*_*mar 6

尝试:

mount -o loop /path/to/file.iso /mnt
Run Code Online (Sandbox Code Playgroud)

您可能会在以下内容之后添加loop

  • -t msdos 软盘用
  • -t iso9660 用于 CD-ROM 映像

Linux 通常会尝试猜测文件类型。