是否存在一个文件系统只保留文件的一个副本,而其他副本仅作为引用?

是否存在一个文件系统只保留文件的一个副本,而其他副本仅作为引用?

这个问题可能不太准确,所以我将尝试更详细地解释它。

由于种种原因,我有很多同一个文件在我的 Linux 文件系统上。其中许多文件都相当大。

假设我有这个文件和/path/to/some.file的副本。我想知道是否有一个文件系统可以让其中两个文件作为原始文件的引用。当然,如果用户修改其中一个文件,那么它们就会成为独立文件。/other/path/file.name/yet/another/path/third.copy

PS. 我知道这可以通过使用链接(部分)实现。但我希望我上面尝试解释的这个功能能够由文件系统透明地处理。

答案1

此功能称为重复数据删除。没有一个流行的 Linux 文件系统 (ext*) 支持它,但显然,ZFS 部分支持它。还有一个文件系统表列出了重复数据删除等,但似乎没有任何流行的选择 - 不过,它是 Btrfs 的计划功能。

我猜想定期检查你的文件系统并创建适当的硬链接是你目前能做的最好的事情,尽管这并不意味着写时复制。

答案2

您要查找的主要关键字是“写时复制”。BTRFS 确实有一个克隆操作,可以完全按照您的要求执行,并且cp --reflink只要您的系统具有足够现代的内核和 coreutils 7.5,它就会执行您正在寻找的操作。 维基来源还,床铺是一个可以合并整个卷上的重复项的工具。如果我没记错的话,CoW 也是 btrfs 快照技术背后的驱动功能。

答案3

有一个在线文件系统3QL语言专为具有大容量重复数据删除功能的备份而设计。

答案4

Zfs、btrfs、ext3cow、bcachefs(据我所知,但有可能尚未实现)。微软曾开发过一个,但由于未知原因停止了。

相关内容