难以理解安装的概念

难以理解安装的概念

两本都读过Linux 中挂载设备是什么意思?将“挂载”理解为操作系统中的一个概念,我有一个问题,它指出

所有可访问的存储都必须在此单个目录树中具有关联的位置。这与 Windows 不同,在 Windows 中(在最常见的文件路径语法中)每个存储组件(驱动器)有一个目录树。挂载是将存储设备关联到目录树中的特定位置的行为。

但是 /dev/cdrom 下已经有一个可访问的位置,例如 cdrom 驱动器,它显然位于目录层次结构中。那么为什么需要在 /media/cdrom 下创建一个单独的“挂载点”呢?为什么无法直接从/dev/cdrom 访问?我听说设备节点文件就像普通文件一样。读取和写入它们就像普通文件一样。那么这是否意味着如果我们从/dev/cdrom 访问cdrom 中的文件系统将不可用。当我们“挂载”它时,文件系统层次结构(在 CDROM 内)“活跃起来”?

答案1

您可以读取或写入 /dev/cdrom (例如,使用ddcat),但是当您这样做时,您只是读取或写入设备的原始字节。这在各种情况下都很有用(例如克隆分区),但通常我们希望查看设备上存储的目录和文件。

当您安装设备时,您基本上是在告诉内核使用软件层(文件系统驱动程序)将这些原始字节转换为实际的文件系统。因此安装设备关联文件系统在该设备上的目录层次结构。

答案2

我是这样考虑的:mount是一个告诉系统将某些文件的内容解释为目录树的工具。

  • 文件系统有目录和文件,每个文件都是一些字节字符串的标签。
  • /dev/cdrom是一个文件,它代表存储在CD上的字节串。
  • 您可以直接读取这个很长的字符串,但是除了特殊目的(例如创建完整的磁盘映像)之外,这不是很实用。
  • 这个长字符串有额外的内部结构:它包含一个文件系统,其中包含有关存储哪些目录和文件以及在这个很长的字符串中的位置的信息。
  • 通过使用mount -t iso9660 /dev/cdrom /media/cdrom,您告诉系统:“获取 中的这个很长的字节串/dev/cdrom,将其解释为 iso9660 格式的目录树,并允许我在该位置下访问它/media/cdrom”。
  • 事实上,这也适用于常规文件。您可以创建一个包含磁盘映像的常规文件,然后用于mount访问它。尝试这个:
dd if=/dev/zero of=fs-image bs=1M 计数=50
mke2fs fs 图像
sudo 安装 fs-image /some/mount/point

(前两个命令仅在第一次准备图像文件时才需要。)

答案3

/dev/cdrom指的是设备文件。这是不是您可能希望插入光驱的任何光盘的内容,而是对硬件位的引用(可能还有软件驱动程序)以便您可以打电话给您看。当你mount /dev/cdrom到树中的某个路径时,你会附加它的内容给你的文件系统

问题是——我真的想不出另一种方法来做到这一点。即使在 Windows 中 - 尽管它是不那么明显- 仍然存在文件系统抽象\\?\volumename\。我花了一分钟才想起那是什么样子,然后我发现了这个谷歌搜索它:

...卷名称只是一个符号链接,指向真实的卷设备,通常采用\Device\HarddiskVolume23. MS-DOS 设备的另一个例子是驱动器号。如果您的卷具有 C: 驱动器号,则您将有一个名为\\?\C: 的符号链接,它指向该\Device\HarddiskVolumeXX格式的真实卷。

所以也许这并没有那么不同——尽管我认为没那么复杂——这只是更明显, 我认为。它们不是同一个系统,但也没有本质上的不同。

/dev/device和之间最重要的区别可能/path/to/its/mount是,在后一个路径中,文件系统(旨在以有组织的方式处理数据的一些软件)正在解释前者的内容。你不能只读取磁盘——必须有人读给你听。文件系统解释设备的内容。

答案4

除了上面提到的项目之外,驱动程序或其他程序还可以缓存来自设备的数据。在读写设备(例如硬盘或拇指驱动器)上,写入设备的数据可能尚未写入。日志文件系统还可能需要在不再看到设备之前刷新日志。然后你就有了覆盖其他文件系统的文件系统,例如 cryptfs,它需要知道底层文件系统何时不再可用。

当然,对于只读设备来说,这没有多大意义,但它仍然适用。

相关内容