据我所知,Linux 有一个所有文件系统的抽象层,该层是虚拟FS。如果我创建一个新的文件系统,我应该遵循 VFS 制定的规则(请参阅“Linux虚拟文件系统交换机剖析“了解更多信息)。在创建了这个新文件系统后,我将把它挂载到目录层次结构中。但是我这里有一个问题:Linux 操作系统如何知道我的文件系统?
实际上,Linux 中可以有很多文件系统。其中一些已安装,可以通过命令找到mount
,其他一些未安装,但您可以随时安装它们。这些未安装的记录是否记录在操作系统的某个位置?我知道有两个文件/etc/fstab
,/etc/filesystems
可能与我的问题有关,但我不确定。
答案1
目前无法访问未安装的文件系统。您可以通过间接方式修改它们,例如直接访问底层设备(对于存储在本地磁盘上的文件系统)或从另一台计算机访问它们(对于网络文件系统)。但除此之外,就操作系统而言,未安装的文件系统并不存在。鉴于网络文件系统(以及其他文件系统)的存在,未挂载的文件系统(每个目录上的每个目录)都会源源不断地供应。
将该文件/etc/fstab
视为命令的配置文件mount
。它包含快捷方式,以便您可以调用mount /path/to/mount/point
或mount /dev/device_name
并将mount
在中搜索匹配的行,/etc/fstab
并使用设备名称或安装点、文件系统类型和安装选项来完成命令行。如果某个条目有该选项user
,则任何用户都可以调用mount
该条目上的命令(一般情况下,mount
保留给 root 用户)。
此外,还/etc/fstab
列出了启动时安装的文件系统。该文件中没有该noauto
选项的所有条目都会在引导时使用提供的选项进行安装。通常还有本文件中未提及的其他文件系统由引导脚本挂载(在典型的 Linux 系统上,这包括/dev
、/dev/pts
、/proc
、/sys
等)。
/etc/filesystems
是 Linux 下 mount 的一个很少使用的功能,它允许您在不传递文件系统类型或传递 时自定义其行为auto
。如果没有此文件,mount 将尝试 中列出的文件系统类型/proc/filesystems
。按顺序尝试文件系统类型:如果第一个条目安装失败,则mount
尝试第二个条目,依此类推。
答案2
简短的回答是它不知道。
但有一些方法可以给出提示。从历史上看,这是通过分区表中的标签固定磁盘的。但这仍然只是对其中文件系统的提示 - 一些工具将依赖于此提示(例如 mkfs - 这只是 mkfs.umsdos、mkfs.ext3、mkfs.reiserfs 的简单前端......)
另一种方法是尝试通过从原始分区读取字节来嗅探文件系统类型(mount 这样做是为了在不同的 MSDOS 兼容类型之间进行选择)。或者保留已知设备标识符上的文件系统数据库。
鉴于文件系统的多样性,不存在始终准确的统一方法。
因此系统将使用管理员告诉它使用的文件系统类型(或至少系列)。