在我对 fs 级别的文件版本控制、快照和相关想法的研究中,我查看了硬链接以及它们到底是什么以及它们的行为方式。使用 rsync,您可以在本身不支持它的文件系统上启动并运行一个非常漂亮的穷人快照系统。
但是,你能在 ext3/4 或任何其他文件系统上获得不可变的硬链接吗?
我对不可变硬链接的定义是:一个硬链接,当在一个位置更改时,它会成为常规副本,而不再是硬链接。
我想要这个,因为它可以使源数据的快照使用来链接而不是数据的副本(在 rsync 快照技术的情况下)。
由于空间限制,我有千兆字节的数据无法复制,但如果我可以智能地对单个更改的文件进行快照,其余的文件链接到源而不是副本,我就有足够的空间。
考虑到这一切,我真的在寻找其他一些技术、功能或技术吗?
有人提议添加一个新的系统调用
reflink()
,这将完全按照您的意愿进行。到目前为止,还没有被接受;但是,ocfs2
(自 2.6.32 起)已经将其作为 ioctl([1] [2])。2009 年 5 月关于该主题的几篇文章:
这个想法的一个旧变体被称为COW Links。
在我看来,您正在寻找WAFL风格的快照。它并不完全使用“不可变硬链接”语义,但非常接近它。
http://blog.interlinked.org/tutorials/rsync_time_machine.html http://rsnapshot.org/
两者都适用于 ext3/ext4。
它们不完全是快照,但会创建一个新目录,其中包含指向上一代的硬链接。删除上一代将保留新目录中的正确文件。