我一直在考虑对文件系统进行版本控制。这是一个杀手级功能,我看过 Wayback、ext3cow、zfs、fuse 解决方案,或者只是 cvs/svn/git 覆盖。
我认为 ext3cow 是满足我要求的模型。透明、高效,但我可以不用额外的ls abc@timestamp
功能。只要我以某种方式对我的文件进行自动化、透明的版本控制。
它可以是瞬时的,也可以基于 10 秒、30 秒、1 米、5 米、15 米等间隔的快照。只是可以有效处理给定目录中的数千个文件大小各异的东西,大多数很小,但有些100m 以上至 1gb。
ZFS 并不是一个真正的选项,因为我在 linux 上(并且不希望通过 fuse 使用它,因为我已经有一个我想要版本的 ext3 设置,而不是新的东西)。
有哪些解决方案?
如果使用 LVM 包装文件系统,则可以使用底层逻辑卷层创建快照卷。这是一个非常简单的过程,并且对于标准的“快照”事物(例如备份和撤消
rm -fr
oopsies)非常有效。经过 8 年的搜索,我找到了Marco R. Gazzetta的SVNFS (这与John Madden的同名旧项目不同[后者做不同的事情])。此SVNFS在 r/w 操作中透明地使用svn :
它是用 Python 编写的并使用 FUSE:
在示例中, SVNFS为 repo 使用单独的目录。虽然我没有测试过。为了我的需要,我想在我的工作目录中有存储库。
我还发现了4 年前对 Reiser4 的版本控制功能的参考:
但我也没有检查过。
两年前,我进一步搜索,找到了用于生成可堆叠文件系统的项目FiST并联系了教授。石溪大学的Erez Zadok,很久以前是versionfs项目的顾问/导师。报价:
http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/
http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf
这对我来说似乎很有趣,但联系参与该项目的人发现它的源代码不为人知。教授本人在邮件中说:
因此,尽管可堆叠文件系统的概念对我来说似乎非常好,但这里没有工作项目。有人想开始基于 onf wrapfs的项目吗,请通知我:)
你可以检查gitfs。这是一个基于 git 的 FUSE 文件系统,非常稳定且超级易用。
基本上,它是对 git 的覆盖。每当您更新文件或目录时,它都会使用该更改创建一个提交(知道批量提交,因此当您解压缩档案时不会有 100 个提交)。还知道使用“始终接受我的”策略来同步您的遥控器并合并冲突。
当你挂载它时,它会给你带来两个目录:current和history。
├── current │ ├── test1.md │ ├── test2.md │ ├── test3.md -> current/test2.md │ ├── test4.md │ └── test_directory └── history ├── 2014-11-23 │ ├── 20-00-21-d71d1579a7 │ │ └── testing.md │ └── 20-42-32-7d09611d83 │ ├── test2.md │ └── testing.md ├── 2014-12-08 │ ├── 16-38-30-6d6e71fe47 │ │ ├── test2.md │ │ └── test1.md
更多信息可以在这个页面上找到。
bup 看起来很有希望。
较早的讨论在这里: http: //lwn.net/Articles/380983/
试试rsnapshot——我自己没有使用过,但是在查看@文件级重复数据删除系统时偶然发现了它。
看看 R1Soft 的 Hot Copy。
http://www.r1soft.com/tools/linux-hot-copy/
这是一个内核模块,它在不使用 LVM 的情况下为标准系统提供写时复制快照。它对我来说效果很好,我可以在不重新启动的情况下安装它。
另见:http ://www.r1soft.com/tools/linux-hot-copy/hcp-tips/