I've long thought about versioning file systems. This is a killer feature and I've looked at Wayback, ext3cow, zfs, fuse solutions, or just cvs/svn/git overlays.
I consider ext3cow the model for my requirements. Transparent, efficient, but I can do without the extra ls abc@timestamp
feature. As long as I somehow get automated, transparent versioning of my files.
It could be instantaneous or it could be based on snapshots on intervals of 10s, 30s, 1m, 5m, 15m, etc. Just something that will efficiently deal with thousands of files in a given directory all of various sizes, most small, but some upwards of 100m to 1gb.
ZFS isn't really an option as I'm on linux (and would prefer not to use it through fuse as I already have an ext3 setup I want to version, not something new).
What solutions are out there?
If you wrap your file systems using LVM, then you can create a snapshot volume using the underlying logical volume layer. It's a pretty simple process and surprisingly effective for standard "snapshotty" things, such as backup and undoing
rm -fr
oopsies.After 8 years of searching I found the SVNFS by Marco R. Gazzetta (which is different from older project with the same name by John Madden [which one does different things]). This SVNFS uses svn transparently in r/w operations:
It's written in Python and uses FUSE:
In the example SVNFS uses separate directory for the repo. Although I haven't tested it. For my needs I'd like to have repository right in my working dir.
I also have found reference to Reiser4's versioning capabilities 4 years ago:
But I haven't checked it too.
Two years ago I went for searching further, found project FiST for generating stackable file systems and contacted prof. Erez Zadok of Stony Brook University who was adviser / mentor for the project called versionfs long ago. Quoting:
http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/
http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf
It seemed very interesting to me but contacting the guys who worked on the project revealed that threre is no known place of it's source code. Professor himself stated in mail:
So there is no working project here though concept of stackable filesystems seems very nice to me. Would anyone like to start project based onf wrapfs, notify me please:)
You can check gitfs. It's a FUSE filesystem based on git, pretty stable and super easy to use.
Basically, it's an overlay over git. Whenever you update a file or directory it create a commit with that change (knows to batche the commits so you don't end up with 100 commits when you unzip an archive). Also knows to sync your remote and merge the conflicts using 'always accept mine' strategy.
When you mount it, it brings you two directories: current and 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
More information can be found on this page.
bup looks promising.
Older discussion of it here: http://lwn.net/Articles/380983/
Try rsnapshot -- I have not used it myself, but I stumbled upon it while looking @ file-level deduplication systems.
Take a look at Hot Copy from R1Soft.
http://www.r1soft.com/tools/linux-hot-copy/
This is a kernel module that provides copy-on-write snapshots for standard systems without using LVM. It's worked fairly well for me and I can install it without a reboot.
Also see: http://www.r1soft.com/tools/linux-hot-copy/hcp-tips/