如何使 mergefs 的行为就像我对 aufs 的行为一样:只将所有新的或修改的内容(包括路径、所有内容..)写入单个可写文件夹?

如何使 mergefs 的行为就像我对 aufs 的行为一样:只将所有新的或修改的内容(包括路径、所有内容..)写入单个可写文件夹?

我需要这种行为,因为我需要知道使用合并文件夹的应用程序将执行什么操作,以便我可以通过小型备份正确且一致地对其进行备份。

我需要强制它像我对 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,该错误都会再次发生。有人知道为什么吗?

另外,我仅使用单个分区/媒体/驱动器/磁盘(所有文件夹共享同一分区)进行此合并,因此我不知道多分区/磁盘会发生什么。

相关内容