我试图了解什么是文件级快照主机。任何人都知道哪些文件系统支持此功能,以便我可以尝试一下。
答案1
首先,欢迎并感谢您有兴趣为开源项目做出贡献。我不确定你是否已经看过https://ceph.com/irc/和https://ceph.com/contribute/如果没有的话,联系 Ceph 项目可能是个不错的起点。
那里的描述相当简略,但他们确实说明了用例是什么:Dropbox 风格的版本控制。Dropbox(不幸的是,它不是免费软件)会保留您上传到其中的文件的旧副本。因此,如果您编辑文件并犯了错误,您可以恢复出错前的版本。它类似于源代码版本控制,只是 Dropbox 会自动提交,而不是您手动执行的操作。
btrfs 具有类似的功能,通过在每个子卷级别(子卷可以是单个目录)拍摄快速、廉价的快照来实现。快照共享数据,只有被修改的块才会变得不共享(也称为写时复制)。鲷鱼我承认我从未使用过它,它是一个在此基础上构建的用户友好工具。 Reflink(该错误会阻止)是 btrfs 上的一个类似功能,它允许制作单个文件的写时复制副本。
几乎任何其他文件系统快照应该提供类似的功能,我相信 ZFS 也可以提供类似的功能。
我根本不了解 Ceph 的内部结构,但有一点警告——这个 bug 很可能是一项非常重要的任务。潜在的工作量不仅在于确保写入根据需要执行复制,还在于保持其高效;例如,您不希望重写一个 4GB 文件而导致整个设备上的一百万个 4K 块碎片化。
答案2
“文件版本控制”是 Ceph 问题所讨论内容的更常见术语。 Windows 10 中的文件历史记录功能和 Dropbox 中的版本控制功能是您以前可能遇到过的好例子(尽管它们都不是由文件系统完成的)。
至于实际实现此功能的文件系统:
- Files-11:经典的 Vax/VMS 和 OpenVMS 文件系统。文件版本控制是 VMS 设计的一个组成部分,因此它使用的主文件系统自然支持它。启用版本控制后,您可以通过使用文件路径的特殊语法来访问旧版本的文件。
- Fossil:贝尔实验室 200 年后 Plan 9 的主要文件系统。就像 files-11 一样,fossil 从一开始就是为版本控制而设计的,尽管访问旧版本的方式与 files-11 有所不同。 Fossil 还有一个附加功能,它可以将旧版本推送到外部存储系统(通常运行 Venti,一种归档 WORM 风格的文件系统)。 Plan 9 的原始文件系统也支持版本控制,并且同样可以将数据推送到档案存储,但当 Fossil 广泛使用时,它很快就不再使用。
- GitFS:GitFS 是一个特殊的基于 FUSE 的 git 版本控制系统接口。它允许您像本地文件系统一样安装 git 存储库,并自动提交您所做的任何更改。我也见过其他 VCS 软件的类似项目。官方存储库是这里。
这是我个人所知道的仅有的三个。我认为有些分布式文件系统也支持这一点,但我对此没有太多经验。
另外,值得注意的是,BTRFS 和 ZFS 实际上都不支持这一点。它们都具有快照支持,但它们无法对单个文件进行快照(两者的快照都以更高的粒度运行)。不过,它们都支持引用链接,这意味着您可以在它们之上实现此功能,但这不是它们本身所做的事情(OCFS2 和 XFS 也支持引用链接)。