![循环安装文件与安装目录](https://linux22.com/image/94403/%E5%BE%AA%E7%8E%AF%E5%AE%89%E8%A3%85%E6%96%87%E4%BB%B6%E4%B8%8E%E5%AE%89%E8%A3%85%E7%9B%AE%E5%BD%95.png)
我正在读书难以理解安装的概念并发现了这个解释:
通过使用
mount -t iso9660 /dev/cdrom /media/cdrom
,您告诉系统:“获取 中的这个很长的字节串/dev/cdrom
,将其解释为格式的目录树iso9660
,并允许我在该位置下访问它/media/cdrom
”
以及其他类似的答案。这是有道理的,从这个逻辑来看,我明白安装本质上是情侣一个设备的文件系统,它以内核可以将其放入现有文件系统层次结构的方式解释设备的内容。
如果确实如此,为什么需要环形安装?
由于 amount -o loop
在技术上与操作的mount
目的相同:读取文件并在文件系统的上下文中解释其内容,为什么我们不能在不创建特殊设备的情况下推广挂载操作?
编辑:据我所知,循环设备为文件提供了块设备 API。然而,我的问题更为笼统。从常规文件(iso
或类似的磁盘映像格式)读取与从特殊文件读取有何不同,如果它们包含相同的数据?
我的工作原理的思维模型mount
是这样的:给定文件公开的任意一组字节/dev/device
,这些字节随后由文件系统驱动程序解释(ext4
例如),该mount
命令将其与根层次结构关联起来,以便它对最终用户来说是透明的。
然而,这组任意字节可以出现在任何地方。如果由文件系统驱动程序解释,它们应该被识别为有效的文件系统。什么限制文件系统驱动程序读取仅有的来自特殊文件而不是常规文件?
答案1
块设备不是普通文件,它们允许诸如 mount 之类的程序对其执行正确工作所需的特殊功能。
循环设备是一个转换设备,它将块文件调用转换为对特定文件的正常文件系统调用。您可以使用它losetup
来创建由文件支持的完全成熟的环回设备(将显示为/dev/loopX
然后将它们视为普通块设备,或者传递-o loop
给 mount 来告诉它透明地创建块设备。您还可以使用它losetup
来检查环回设备及其内容得到支持。
请注意,使用现代安装,它将尝试检测正常文件并自动为您创建环回设备。所以你不需要将loop
选项传递给它。
另外,从技术上讲绑定挂载是将目录重新挂载到新位置的位置(因此会挂载两次)。这可以通过要安装的标志来完成--bind
。我明白你的意思,但这个词可能会让人困惑绑定在安装方面具有特定的含义。
编辑:您的心理模型实际上是正确的,但是您可以将循环设备视为抽象层,它允许挂载与任何文件进行通信,就好像它是块设备一样,而不必了解读/写文件系统或原始块设备 - 内核处理所有这些。 mount需要知道的是如何要求内核设置循环设备,然后将其视为块设备;这使得低级代码更简单,并允许任何可以与块设备通信的东西与文件通信而不需要修改。
答案2
模糊地描述为,循环安装将安装重定向为“循环设备”。
“循环设备”有效地代表物理分区(通常代表顺序设备块),但必须通过映像所在的文件系统进行解释潜在地碎片状态。
与物理分区不同,每个块读取都必须咨询底层文件系统。它的效率较低,但更方便,并且允许不同文件系统类型的嵌套文件系统。
Amount -o loop
是不是 技术上mount
与用于swapon
交换文件的 操作相同与swapon
用于交换分区的操作相同。
在实际分区上,读取和写入仅限于物理分区/柱面边界。分区的文件系统会混淆碎片。
在循环图像中,碎片隐藏在显然顺序安装。底层文件系统处理文件碎片并呈现顺序“分区”。
这在加密或压缩磁盘映像(例如squashfs
.在这种情况下,通过底层文件系统访问所述图像块,然后通过适用的压缩(或加密)API 进行处理,以呈现一组明显连续的设备块。
简而言之,“块设备”应该是“设备块”的顺序列表。这特殊装置由一个创建环路安装假装不同大小的潜在非顺序设备块是预定大小的顺序设备块。