创建两个目录的并集,同时仅写入其自己的原始目录

创建两个目录的并集,同时仅写入其自己的原始目录

我想创建两个目录的联合,并且当我在联合文件夹内移动文件时,我希望它保留在它原来的文件夹中(见下文)。

我该如何实现这个目标?我尝试过 unionfs,但它总是遵循文件夹顺序,例如,如果我在第一个位置挂载一个 RW 文件夹,所有写入都将转到该文件夹​​,我想要以下行为,如下所述:

我想要 2 个 RW 文件夹和一个联合文件夹

RW - driveA
RW - driveB
Unioned - mergeDrive

基本上,当我移动文件时(我只能通过触摸文件mergeDrive,我希望每个文件都在自己的文件夹内移动。

例如,

mv /mnt/mergeDrive/subFolderA/fileA.csv /mnt/mergeDrive/subFolderB/fileA.csv

FileA的原始路径:

/mnt/driveA/subFolderA/fileA.csv

移动后的预期路径:

/mnt/driveA/subFolderB/fileA.csv

然后我希望能够做到:

mv /mnt/mergeDrive/subFolderA/fileB.csv /mnt/mergeDrive/subFolderB/fileB.csv

FileB的原始路径:

/mnt/driveB/subFolderA/fileB.csv

移动后的预期路径:

/mnt/driveB/subFolderB/fileB.csv

因此,无论文件的根文件夹来自何处,它在移动时都会保留在该根文件夹中,即使它是通过移动的/mergeDrive/。您可以设置 unionfs(或类似的东西)来执行此操作吗?

答案1

你的怀疑是有道理的。我已经测试过了unionfs-fuse。它在某种程度上尝试不在分支之间移动文件。

例如,如果目标目录仅存在于下部分支中,并且我移动位于下部分支中的文件,那么它们将留在该分支中。

另一方面,如果我故意在两个都分支,则较低分支的文件将在合并挂载点内移动时移动到较高分支。我明白这正是你想要的避免

aufs我还没有测试过overlayfs

但是我已经测试过了mhddfs。 它是用户空间中的文件系统(FUSE)(看有关 FUSE 的安全问题)。mhddfs 似乎按照您希望的方式工作。请注意,我的测试有限,我还没有阅读代码来了解其算法,因此无法完全确定。我认为你应该自己测试一下。基本语法:

mhddfs /mnt/driveA/ /mnt/driveB/ /mnt/mergeDrive/

本文有一句评论:

如果某个驱动器在写入过程中用完了可用空间(假设您尝试在其上创建一个非常大的文件),则写入过程不会失败;mhddfs只会将已写入的数据传输到另一个驱动器(具有更多可用空间)并在那里继续写入。

起初我以为“已写入的数据”可能指的是另一个文件,该文件将被转移以给正在写入的文件腾出空间。我想这对你来说会很糟糕。我试图触发这种行为,但失败了。现在我认为“已写入的数据”仅指正在写入的确切文件。

事实上,在我的测试中,我从未观察到mhddfs在两个分支之间传输文件的情况。即使目标目录仅存在于其他分支中,该工具也会将目录树的必要部分复制到文件所在的分支,因此它们可以更改路径而无需传输到另一个分支。

要清楚:我说的是涉及普通的测试mv。很明显,如果你cp在合并的挂载点中的另一个目录中,那么生成的副本可能最终进入另一个分支,而不是原来的分支。请记住有些程序会就地修改文件,有些则会创建副本

另请注意有一个错误在版本中0.1.39。用户报告降级到0.1.38帮助。或者你可以尝试这个分支:mhddfs-nosegfault

相关内容