mount和mount -o loop有什么区别


28

我有一个名为的iso文件ubuntu.iso

我可以mount将其与命令:mount ubuntu.iso /mnt。挂载后,我可以从命令df -h:的外面看到它/dev/loop0 825M 825M 0 100% /mnt

但是,如果执行命令mount -o loop ubuntu.iso /mnt,我将得到相同的结果。

据我所知,循环设备允许我们将iso文件作为设备来访问,我认为这就是为什么我们添加option的原因-o loop。但是即使我只执行我也可以访问我的iso文件mount ubuntu.iso /mnt

所以我看不出之间的差异mountmount -o loop


同样重要的是,有时mount不能设置具有适当结构的环回设备。例如:mount ubuntu.iso /mnt它不设置只读环回设备,mount /image.squashfs /mnt也不设置DIOlosetup --direct-io=on)环回设备。
文盲

Answers:


46

两种版本都使用循环设备,并产生相同的结果。简短的版本依赖mount于近年来添加的“聪明” 。明确mount -o loop告知mount要使用循环设备;它将循环设备本身mount保留为,它将查找可用的设备,进行设置并使用它。(您也可以使用指定设备 mount -o loop=/dev/loop1。)

聪明之处在于,当给定要挂载的文件时,mount它将在必要时自动使用循环设备来挂载它- ,未指定文件系统,或libblkid确定文件系统仅在块设备上受支持(因此,需要使用循环设备将文件转换为块设备)。

mount手册页的循环设备部分提供了更多详细信息。


1
并非很早以前,挂载中也没有“ -o loop”选项,您将不得不使用lostup命令手动创建循环设备。
Edheldil

@Edheldil取决于您的“很久以前” ;-)概念。util-linux2.11 mount -o loop在2001年得到支持,我认为2.10至少在一年前也有支持。
斯蒂芬·基特

是的,但是2001年常用的稳定发行版是否已经使用util-linux 2.11?
rackandboneman's

2
@rackandboneman我进行了更多的挖掘,结果发现-o looputil-linux2.4和2.5j 之间增加了对的支持。Debian 1.1 具有后者,并于1996年6月发布。因此,此选项在发行版中已有20多年的历史了。
斯蒂芬·基特

这种聪明之处在于:如果/当XFS开发人员的新“直接文件安装”功能(不需要循环设备)到达内核时,mount将能够透明地切换到该机制(至少在开始的15分钟内)。事实证明,它破坏了某人的shellscript,并且每个人都必须返回到循环设备),与mount -o loop此不同的是,它仍然明确要求使用旧的(当前)机制。
grawity

9

loop设备主要与控制losteup命令。因此losetup -a,您可以大致了解所使用的回路设备和附件。该mount命令只能安装块设备。循环设备可以从文件(字符设备)创建虚拟块设备。

实际上,这些命令之间存在很大差异,因为在较旧的Linux系统上mount,无法将文件识别为要挂载的正确设备,但是在挂载命令完成期间,它具有很多功能,因此它现在可以自行决定尝试调用lostup命令并装入结果。但是,如果您获得的整个磁盘映像不是iso格式,而是例如开头为MBR,则mount命令无法识别它,您必须找到可用的分区(例如,使用parted disk_image.raw unit B print命令)yoursef,然后使用完整选项的mount comman挂载它。如下:

mount disk_image.raw /mntpoint/ -o loop,offset=${OFFSET_of_PARTITION}

在这句法loop设备没有指定是,它是假定该系统选择第一个免费的(/dev/loop0/dev/loop1等)在mount命令的其他新功能是,你不需要指定的安装块设备的文件系统类型(在你的情况-t iso9660)如果已安装文件系统支持。


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.