研究案例:
通过 OpenVPN 来自所有家庭成员的自动备份系统。
许多文件(尤其是照片)在家庭成员之间是常见的。
所以,我用一个脚本用硬链接替换了相同的文件。
那么问题就来了:如果一个用户改变了它的文件,那么所有用户的文件都会改变。删除文件不成问题,重命名也不成问题。仅更改文件内容。
因此,我希望当用户更改其硬链接文件时,消除硬链接并使用应用更改创建原始文件的副本。
任何文件系统或任何黑客或功能都可以做到这一点吗?
研究案例:
通过 OpenVPN 来自所有家庭成员的自动备份系统。
许多文件(尤其是照片)在家庭成员之间是常见的。
所以,我用一个脚本用硬链接替换了相同的文件。
那么问题就来了:如果一个用户改变了它的文件,那么所有用户的文件都会改变。删除文件不成问题,重命名也不成问题。仅更改文件内容。
因此,我希望当用户更改其硬链接文件时,消除硬链接并使用应用更改创建原始文件的副本。
任何文件系统或任何黑客或功能都可以做到这一点吗?
您正在寻找 2009 年引入的reflink功能。它仅适用于某些文件系统——目前是 Btrfs、XFS(显然?)和 OCFS2。
reflink=auto
将成为下一个 coreutils 版本中的默认选项。另一种方法是文件系统重复数据删除,它由 Btrfs 和 ZFS 等支持。它允许在文件“下方”合并相同的块。在 ZFS 中,这是同步发生的(一旦文件被写入),而在 Btrfs 中,它是在之后作为批处理作业完成的。
最后,一些备份工具本身会执行重复数据删除。Restic 和 Borg 使用的存档格式是内容寻址的(很像 Git),因此相同的块将自动在每个存储库中存储一次,即使它们出现在单独的文件中。