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


39

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


1
您是说要在OS X的命令行上执行此操作吗?您提到了它,但是如果问题是特定于某个操作系统的,则最好将其明确。另外,您指的是哪种类型的磁盘映像?.iso?
ilkkachu

Answers:


42

如果它是带有MBR分区表的硬盘驱动器映像,则我将对映像进行fdisk查找,以找到需要挂载的分区的偏移量。

fdisk -lu /path/disk.img

然后我将其安装通过偏移量。

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

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



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对于磁盘映像,这基本上是(环回!)。
与莫妮卡(Monica)进行的轻量级比赛,2016年

2
losetup并且mount -o loop特定于Linux。它将在GNU分布使用不同的内核不工作(如赫德,Illumos的或kFreeBSD虽然Illumos的和FreeBSD将有一个不同的语法等效)
斯特凡Chazelas


6

尝试:

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

您可以在loop以下位置添加:

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

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"
)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.