![如何使 mergefs 的行为就像我对 aufs 的行为一样:只将所有新的或修改的内容(包括路径、所有内容..)写入单个可写文件夹?](https://linux22.com/image/206363/%E5%A6%82%E4%BD%95%E4%BD%BF%20mergefs%20%E7%9A%84%E8%A1%8C%E4%B8%BA%E5%B0%B1%E5%83%8F%E6%88%91%E5%AF%B9%20aufs%20%E7%9A%84%E8%A1%8C%E4%B8%BA%E4%B8%80%E6%A0%B7%EF%BC%9A%E5%8F%AA%E5%B0%86%E6%89%80%E6%9C%89%E6%96%B0%E7%9A%84%E6%88%96%E4%BF%AE%E6%94%B9%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%88%E5%8C%85%E6%8B%AC%E8%B7%AF%E5%BE%84%E3%80%81%E6%89%80%E6%9C%89%E5%86%85%E5%AE%B9..%EF%BC%89%E5%86%99%E5%85%A5%E5%8D%95%E4%B8%AA%E5%8F%AF%E5%86%99%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F.png)
我需要这种行为,因为我需要知道使用合并文件夹的应用程序将执行什么操作,以便我可以通过小型备份正确且一致地对其进行备份。
我需要强制它像我对 aufs 所做的那样,因为我正在迁移使用 aufs 的脚本,但不仅仅是因为这个。对于我创建的并且运行良好的层来说,这种行为是强制性的。
我的所有工作分支(目录)都是同一文件夹(即放置合并文件夹的位置)的子文件夹,因此共享相同的可用空间。
这些选项效果很好:
defaults,allow_other,use_ino,category.action=ff,category.create=ff,category.search=ff
但如果我修改合并文件夹中的一个文件,它将从原始文件夹中删除该文件:O并在找到的第一个文件夹上创建/更新修改后的文件:(,
它不应该触及原始文件夹文件:(。
如果有多个覆盖,它会将它们全部删除,仅在第一个文件夹上留下最后的修改:O,我知道这很好,但不适用于我的脚本/用例。
如果我将所有分支的文件夹和子文件夹设为只读,这将防止删除文件,因此所有更新都将转到第一个文件夹。但是,我仍然需要将每个分支(子文件夹和文件)设为 RW,更改其中的内容,并且不要忘记再次将其设置为 RO,否则事情会变得混乱。
所以我仍然无法让它像 AUFS 那样表现。它很接近,但不相等。
PS.:ubuntu22.04 不再有 aufs,所以没有回头路了
答案1
你不能。 mergefs 不是一个overlay/CoW 文件系统。
https://github.com/trapexit/mergerfs#how-it-works
mergefs 不支持 aufs 和 overlayfs 中的写时复制 (CoW) 或whiteout 行为。您无法挂载只读文件系统并对其进行写入。但是,在创建新文件时,mergerfs 将忽略只读驱动器,因此您可以混合读写和只读驱动器。它还不会跨驱动器分割数据。它不是 RAID0/条带化。它只是其他文件系统的联合。
答案2
我正在使用这个:
mergerfs -o "defaults,allow_other,use_ino,category.action=ff,category.create=ff,category.search=ff" "FolderWriteHere:Folder1:Folder2" FinalMergedFolder
现在我需要将所有合并的文件夹(Folder1、Folder2 等)设为只读!
但是,如果“mergerfs”给出此错误“设备上没有剩余空间”,则在尝试在 FinalMergedFolder 写入文件时,您需要确保FolderWriteHere 上至少有 4.2GB 的可用空间(至少对于 mergefs 2.33.3 我有这个限制),这意味着,在任何时候可用空间低于 4.2GB,该错误都会再次发生。有人知道为什么吗?
另外,我仅使用单个分区/媒体/驱动器/磁盘(所有文件夹共享同一分区)进行此合并,因此我不知道多分区/磁盘会发生什么。