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


11

我一直在考虑文件系统的版本控制。这是一个杀手级功能,我研究了Wayback,ext3cow,zfs,fuse解决方案,或者只是cvs / svn / git叠加层。

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

它可以是瞬时的,也可以基于10s,30s,1m,5m,15m等间隔的快照。这可以有效地处理给定目录中的数千个文件,这些文件大小各异,大多数很小,但有些超过100m至1gb。

ZFS并不是真正的选择,因为我在Linux上(并且不希望通过保险丝使用它,因为我已经拥有要版本化的ext3设置,而不是新的东西)。

有什么解决方案?

Answers:


7

如果使用LVM包装文件系统,则可以使用基础逻辑卷层创建快照卷。这是一个非常简单的过程,并且对于标准的“快照”事件(例如备份和撤消rm -fr乌贼)而言出奇的有效。


感谢你的回答。不幸的是,我正在寻找可以应用于现有文件系统的东西。
Dale Forester

6

经过8年的搜索,我发现SVNFS马可河米兰(这是由同一个名字从旧的项目不同的约翰·麦登 [哪一个做不同的事情])。该SVNFS在r / w操作中透明地使用svn

我没有创建执行自己的版本控制的文件系统,而是使用了现有的版本控制工具subversion,并将其使用透明化。好处是,如果您知道Subversion,则此文件系统不需要您学习新工具

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

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

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

一切正常之后,您应该能够得到两个目录的清单,并看到内容相同。

现在,如果您在任一目录中创建(几乎)任何文件,该文件也将显示在围栏的另一侧。最大的区别是,如果在myfiles目录中创建文件,则该文件将自动置于版本控制下(反之则不成立)。

在示例中,SVNFS将单独的目录用于存储库。虽然我还没有测试过。为了我的需要,我想在我的工作目录中拥有存储库。


我还发现了4年前对Reiser4的版本控制功能的参考

请参阅Reiser4。文件是目录。

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

或访问属性

cat main.C/p/svn-eolstyle

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

似乎最好采用这种模型,因为主要的文件系统已经在采用这种方式。

-保罗·奎纳(Paul Querna)

但是我也没有检查过。


两年前,我去进一步搜索,找到了FiST项目,用于生成可堆叠的文件系统,并联系了教授。石溪大学的埃雷兹·扎多克Erez Zadok)很久以前是该项目的顾问/导师versionfs。报价单:

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

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

允许用户轻松高效地管理自己的版本。对于典型的类似用户的工作负载,Versionfs提供此功能的开销不超过4%。Versionfs允许用户分别通过保留策略和存储策略选择保留哪些版本以及如何存储它们。用户可以在空间和性能之间选择最能满足其个人需求的折衷方案:完整副本,压缩副本或块增量。尽管用户可以控制其版本,但管理员可以强制使用最小值和最大值,并为用户提供合理的默认值。

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

最后,Versionfs超越了过去系统所采用的简单的写时复制:我们实现了更改时复制。尽管起初我们希望新旧页面之间的比较过于昂贵,但我们发现系统时间的增加远远被与写入未更改块相关的I / O和CPU时间减少所抵消。当使用更昂贵的存储策略(例如压缩)时,按更改复制将更加有用。

这对我来说似乎很有趣,但与该项目的工作人员联系后发现,threre是其源代码的未知来源。教授本人在邮件中说:

Versionfs的代码现在很旧,并且仅在内核2.4中有效。如果仍然需要可堆叠的版本控制f / s,则必须从头开始编写它-可能基于wrapfs(请参阅wrapfs.filesystems.org/)。

因此,尽管可堆叠文件系统的概念对我来说非常好,但是这里没有任何可行的项目。任何人都想基于f 包装启动项目,请通知我:)


3

您可以检查gitfs。这是一个基于git的FUSE文件系统,非常稳定并且非常易于使用。

基本上,它是git的叠加层。每当您更新文件或目录时,它都会使用该更改创建一个提交(知道要批量提交,因此在解压缩存档时最终不会获得100个提交)。还知道使用“始终接受我的”策略来同步您的遥控器并合并冲突。

挂载它时,会为您带来两个目录:currenthistory ├── 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

可以在此页面上找到更多信息。


添加更多信息将改善此答案。
戴夫M


0

尝试rsnapshot-我自己没有使用过它,但是在查看@文件级重复数据删除系统时偶然发现了它。


那很有意思。我一定会调查一下。我担心它的io负载会导致系统停顿(我之前与rsync并没有类似之处,并且由于运行时其他控制台的停顿/停顿行为而停止使用它)。
Dale Forester 2010年

我看了一下rsnapshot,我喜欢它的想法,但是非常非常不幸,它需要快照快照的副本。不幸的是,有必要,我正在使用驱动器的极限,我想快照比剩余可用空间大很多的内容。
Dale Forester 2010年

1
困难在于您的要求。除了诸如 rsnapshot或LVM之类的东西外,ext2 / ext3还没有内置快照功能。您指出了ext3cow,但是您必须更改基础的文件系统。请注意,看起来您可以使用rsnapshot并将数据存储在另一台计算机上,我不知道您在谈论哪种类型的空间,但是将快照保留在另一台计算机上可能有意义吗?还请记住,任何类型的快照都需要磁盘空间。如果您的驱动器容量已接近极限,那么您还有多少空间可用于快照?
杰森

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.