我一直在尝试更好地理解 Linux 文件系统的工作原理,查看日志、索引节点和访问控制列表。在研究这个问题时,我遇到了一些文件系统,它们的行为似乎与我期望的文件系统的行为不同,例如 glusterfs 和 mergefs。它们不是像如何mkfs.ext3
或将那样写入硬盘驱动器mkfs.xfs
,而是在其他文件系统之上运行。因此 ext3 和 mergefs(或 glusterfs)都可以在同一驱动器上使用,这似乎很奇怪,因为据我所知,不能在同一分区上定义两个文件系统。
我对文件系统的理解是错误的,还是 mergefs/glusterfs 系统有什么特殊之处可以将它们与 ext3 或 xfs 区分开来?
答案1
“文件系统”这个词有点重载,我认为这可能会让您感到困惑。从某种意义上说,“文件系统”是将文件写入某些介质(例如磁盘上的分区)的格式。在另一种意义上,“文件系统”(或更具体地说,“虚拟文件系统”)是操作系统提供的抽象,它呈现一组文件(常规文件、目录等)。操作系统可以读取磁盘上的文件系统并呈现文件系统抽象。
文件系统抽象中呈现的文件可以存储在磁盘上(例如,ext4)、网络上的其他主机(例如,cifs、nfs)或其他地方。像 mergefs 这样的东西需要多个文件源并将它们呈现为就好像它是单个源一样。从他们的网站来看,“mergerfs 在逻辑上将多个路径合并在一起。想想集合的并集。”
看看合并网站,他们对它的作用有很好的描述。
答案2
分布式网络文件系统更像是数据库而不是文件系统,并且通常位于常规文件系统内以避免复杂/重复的代码。
答案3
对于网络附加存储文件系统,更准确地说,文件系统正在使用底层文件系统来实现自身,或者更准确地说,它使用操作系统虚拟文件系统(VFS),该系统可以使用许多不同的方式将数据存储在磁盘上。 -磁盘文件系统。
当您通过操作系统挂载 Samba 或 NFS 时,这也是如此。然而,glusterfs 还具有在其后端将许多网络附加存储组合在一起的功能。我将其称为网络/联合 FS,但他们使用的术语是横向扩展。
Unionfs、mergerfs、aufs和overlayfs是联合挂载的实现,作为文件系统存在于Linux的VFS中,但不存在于磁盘上。它们的功能是组合来自多个底层文件系统的文件,并将它们呈现为 VFS 上的另一个文件系统。它们可以通过 mount 或 fstab 传递,但不会出现在磁盘上的 fs 超级块中。
因此,任何磁盘上的文件系统都不会作为您提到的文件系统的多个存在。尽管讽刺的是这样的文件系统是存在的。例如 ext3 文件系统是ext4 文件系统,直到使用 ext4 特定功能。