我随机阅读了有关联合文件系统的内容,该系统使用户能够同时在另一个文件系统之上安装多个文件系统。
然而,我在决定使用哪一个(Unionfs、Aufs、Overlayfs、mhddfs)时遇到了困难,为什么我没有在任何地方找到有关该主题的具体信息。我知道,例如,overlayFS 已被主流 Linux 内核采用,这意味着它可能会得到更广泛的采用。如果有人能给我一些观点,我将不胜感激。
另外,我找不到任何联合文件系统比 LVM 之类的用例(正如用户推荐的那样)单独的问题)或 RAID 设置,但 LVM 需要格式化所有驱动器,如果驱动器上已经有有价值的数据,这可能是不可取的。
答案1
这里有一些想法 - 我仍在学习这一点,并将随时更新。
如何选择联合文件系统
有两种方法可以看待这个问题:
- 每一种的特点如何比较?
- 对于一些常见的用例,我应该选择哪一种?
我将比较 unionfs/unionfs-fuse/overlayfs/aufs/mergerfs,后者是 mhddfs 的替代品。
各有各的特点
发展现状
发行版/内核支持
有内核模式和用户系统模式文件系统,后者运行在 FUSE 上。内核模式的开销较小(当代码在用户空间和内核空间之间切换时有开销),但唯一的一个目前支持在Linux内核中是覆盖文件系统。用户模式文件系统更容易让发行版打包。
- 联盟和奥夫斯需要内核补丁
- 联盟不是由 Debian 分发的(其余都是)
- UnionFS熔断器和合并文件系统基于FUSE,因此不需要在内核中添加额外的模块
- 覆盖文件系统自 3.18 起已成为内核的一部分 (Debian Stretch)
写入时复制
这与以下 Live CD 用例相关:
- 合并文件系统没有写入副本
- 其他人则这样做
用例
只读根/Live CD 用例
这个想法是拥有一个Linux系统的只读CD-ROM/分区。联合文件系统使用户看起来像是一个读写系统,以便他们可以进行更改。有一个读写文件系统(例如,tmpfs RAM 磁盘),它存储用户所做的任何更改的“增量”,但不存储完整快照。
在这里,除了 mergefs 之外的任何联合文件系统都可以(缺乏牛支持)。
Docker 用例
我知道这是一个主要用例,但不知道详细信息 - 有人可以提供这方面的指导吗?
合并硬盘
例如,您可能/home
在不同的文件系统上有两组目录。或者您可能正在用第二个硬盘升级您的家用计算机,并且需要单个逻辑卷。
这是您实际上不需要写时复制的地方,因此 mergefs 可能是最佳选择。
用于磁盘池的联合文件系统与 LVM
我将列出一些可以使用联合文件系统而不是 LVM 实现的用例:
如果您要使用第二个磁盘升级现有系统,诸如 mergefs 之类的东西可能会更好,因为 LVM 会要求您重新格式化第一个硬盘,从而破坏其上的数据。联合文件系统可以避免这一步。
LVM 可能会将一个文件分割到两个物理硬盘上(假设 RAID 0),因此如果一个硬盘出现故障,您就会丢失该文件。
例如,某些用户可能喜欢将/home
目录保存在可以带走的 USB 记忆棒上。
在两个物理磁盘上一个虚拟分区的用例中,使用 LVM,您无需担心文件是否保存在一个磁盘上或另一个磁盘上。使用 mergefs,系统可以根据可用空间的大小自动为您选择哪一个。
答案2
鲍勃的回答作为入门/概述非常有帮助,我想从用户的角度添加我自己对这种情况的结论。
从历史上看,联合挂载文件系统的概念可以追溯到更早的联合坐骑。然后在 2000 年代初出现了 unionfs,它的受欢迎程度比 aufs 黯然失色,但最终被内核维护者拒绝,转而支持覆盖文件系统。 Overlayfs 似乎是唯一一个在内核中提供相对简单(最多一个读写层)的联合文件系统的游戏,并且被 docker 等广泛使用。
原来的unionfs好像是更有特色比overlayfs(例如允许多个读写层等)。如今这种复杂性主要由保险丝基于联合文件系统,如 unionfs-fuse(来自 unionfs 的独立项目)和合并文件系统。
合并似乎是撰写本文时的最佳选择,并且可以实现复杂的设置,例如组合多个普通硬盘以及在不同的策略中选择如何在这些磁盘之间传播新文件/写入的创建。
就其本身而言,mergerfs 可以用作基于简单磁盘 (JBOD) 的替代方案,以替代使用 LVM/RAID0/BTRFS(single) 将磁盘组合到单个文件系统中,其主要优点是弹性。一块失效的磁盘显然不会导致整个文件系统瘫痪。 Mergerfs 还可以很好地结合快照为用户提供 RAID5/6 左右的设置(snapraid 存储奇偶校验信息,因此允许重建磁盘,但请参阅文档以了解与 RAID 的差异)。
TLDR:使用overlayfs 进行简单分层,在“顶部”有一个RW 层,mergerfs 作为LVM/RAID0 的替代方案,用于将多个磁盘组合到一个逻辑文件系统中,以实现媒体集合之类的功能。