如何在ext3 / 4上获得透明,高效的文件系统快照或版本控制?

我一直在考虑版本化文件系统。 这是一个杀手级的function,我已经看过Wayback,ext3cow,zfs,保险丝解决scheme,或只是cvs / svn / git覆盖。

我认为ext3cow模型符合我的要求。 透明,高效,但是我可以不用额外的ls abc@timestampfunction。 只要我以某种方式获得自动化,我的文件的透明版本。

它可以是瞬间的,也可以基于10s,30s,1m,5m,15m等间隔的快照。只要能够有效地处理给定目录中的数千个文件的东西都是各种大小,最小的,但是一些超过100米到1GB。

ZFS是不是真正的select,因为我在Linux上(并且宁愿不使用它通过保险丝,因为我已经有一个我想版本的ext3设置,而不是新的东西)。

那里有什么解决scheme?

如果使用LVM打包文件系统,则可以使用基础逻辑卷层创build快照卷。 这是一个非常简单的过程,对于标准的“快照”,比如备份和撤销rm -fr oopsies,这是一个非常有效的方法。

经过8年的search,我find了Marco R. GazzettaSVNFS (与John Madden同名的老项目不同)。 这个SVNFS在r / w操作中透明地使用svn

我没有创build一个自己的版本控制的文件系统,而是使用了一个现有的版本控制工具,颠覆,并使其透明。 好处是这个文件系统不需要你学习一个新的工具,如果你知道颠覆

它是用Python编写的,使用FUSE:

现在通过调用附加的脚本启动版本控制文件系统:

 python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles 

一旦一切正常,你应该能够得到这两个目录的清单,并看到内容是相同的。

现在,如果您在任一目录中创build(几乎)任何文件,它也会出现在围栏的另一侧。 最大的区别是,如果你在myfiles目录下创build一个文件,它将被自动置于版本控制之下(反之亦然)。

在这个例子中, SVNFS使用单独的目录作为回购。 虽然我没有testing过。 为了我的需要,我想在我的工作目录中存储库。


4年前,我还发现了Reiser4的版本控制function:

请参阅Reiser 4.文件是目录。

例如: diff -u main.C main.C/r/123

或者访问属性

 cat main.C/p/svn-eolstyle echo "foobar" > main.C/p/my-property 

看来最好遵循这个模式,因为一个主要的文件系统已经走了这条路线。

– Paul Querna

但是我也没有检查。


两年前,我进一步search,发现项目FiST生成可堆叠文件系统,并联系教授。 石溪大学的 Erez Zadok是这个项目的顾问/导师,很久以前就叫做versionfs 。 引用:

http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/

http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf

允许用户轻松高效地pipe理自己的版本。 Versionfs为典型的类似用户的工作负载提供了不超过4%的开销。 Versionfs允许用户分别通过保留策略和存储策略来select保留哪些版本以及如何存储它们。 用户可以select最符合其个人需求的空间和性能之间的折衷scheme:完整副本,压缩副本或块增量。 虽然用户可以控制他们的版本,pipe理员可以强制执行最小值和最大值,并为用户提供合理的默认值。

另外,通过使用libversionfs,未修改的应用程序可以检查,操作和恢复版本。 用户可以简单地运行熟悉的工具来访问以前的文件版本,而不是要求用户学习单独的命令,或者要求系统pipe理员重新安装文件系统。 没有libversionfs,以前的版本是完全隐藏的用户。

最后,Versionfs超越了以前系统所使用的简单写时复制:我们实现了复制时的拷贝。 尽pipe起初我们预计新旧页面之间的比较将会过于昂贵,但是我们发现系统时间的增加被写入不变块的I / O和CPU时间减less所抵消。 当使用更昂贵的存储策略(例如压缩)时,“即时复制”function甚至更有用。

这对我来说似乎很有意思,但是联系那些在这个项目上工作的人,显示出threre并不是它的源代码。 教授本人在邮件中表示:

Versionfs的代码现在已经很老了,而且只能在内核2.4中运行。 如果你仍然想要一个可堆栈的版本控制f / s,那么你必须从头开始编写 – 可能是基于wrapfs(请参阅wrapfs.filesystems.org/)。

所以这里没有任何工作项目,虽然可堆栈文件系统的概念对我来说似乎非常好。 任何人都喜欢启动项目的基础上wrapf ,请通知我:)

你可以检查gitfs 。 这是一个基于git的FUSE文件系统,非常稳定和超级简单易用。

基本上,这是覆盖git。 每当你更新一个文件或目录时,它会创build一个提交,并提交这个更改(知道如何提交提交,所以当你解压缩一个文件时,最终不会有100次提交)。 也知道要同步您的远程并使用“始终接受我的策略”合并冲突。

当你挂载它,它会带给你两个目录: 当前历史├── 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

更多信息可以在这个页面find。

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/