Feather - non-redundant encrypted storage engine

What is this, why is it useful?

Feather is what I currently use to do my backups and offline archives, I can access any version of the backups, and since they are all burned on write once media I do not throw away old versions.

each new backup does not store data that has been stored in a previous backup (or stored in the archives), so the amount of new media required for each backup is much less than the total size of data being backed up.

once a backup is complete and at least one copy of each block exists on offline media I only have about 200 bytes of data to make sure is available, the base tag of the whole backup. This is also the size of any sub-tree in the backup, so an old 1G log file can be moved offline and a reference to it kept in a 200 byte file.

This also has been useful as a cheap version control system, since only new data is actually saved, it does not help for concurrent updates, but diff can be used for that. If full version control is needed, this does not do that.

Why "Feather"?

The name of the project came from an old joke, there are plenty of things you can do to files, but you can't tar and feather them, well now you can (but it doesn't lead to very much redundancy, so don't do it yet)

$ tar -f - / | feather

Where the ideas came from

The Freenet Project talks about the non-redundancy properties of their data store, so I extended the idea to permanent storage, and dropped the anonymous P2P part (at least for now).

The file format does not match up exactly with the one used on Freenet, but it is based on it.

The Code

My PGP key is listed in my contact information.

revision history

data formats

postgresql database schema description

Installation

quoted from INSTALL in the source package:

** needed stuff:

Gentoo packages:

>=dev-perl/DBD-SQLite-1.09 (1.09)
>=dev-lang/perl-5.8 (5.8.6-r5)
app-cdr/cdrtools (cdrtools-ossdvd-2.01)
dev-perl/libwww-perl (5.800)
cpan: Mcrypt (2.4.8.2)
cpan: Digest-SHA2 (1.1.0)

** To install:

install the code

$ make PREFIX=/usr/local
$ make PREFIX=/usr/local install

create yourself a configuration file, for example

-- BEG ~/.feather.conf --
# feather client setup
client=Service_Local
client.index=Index_SQLite
client.index.dsn=dbi:SQLite:/var/spool/feather/index.db
client.index.volume_sets=2
client.index.volume_sets.1=onsite
client.index.volume_sets.2=offsite
client.store=Store_Files
client.store.dir=/var/spool/feather/
client.store.min_free=10000000
client.store.space_want=1000000
-- END ~/.feather.conf --

make sure the directories named in the configuration file exist

and finally initialize the database tables

$ feather --create-tables client.index

** If perl is not at /usr/bin/perl
there are three "#!/usr/bin/perl -w" lines, "translate", "src/feather",
"src/featherd.fcgi", so those would need to be changed.

License

GPL

Command Usage

see the feather pod.

Future plans

The things that I plan to do to this as time goes on, in rough order of priority...

Current Scale

cache size
27.3 GiB (103123 blocks)
volume sets
2 (onsite, offsite)
volume count
323 DVD (163 onsite, 160 offsite)
blocks on volumes
3901021 blocks
approximate volume data size
640 GiB unique data, 1292 GiB total data

Final Words

Good luck, I have been able to use it, but that is no guarantee that you will be able to.

I can try to offer help via email <sarah_happy at fastmail dot fm> but don't expect a quick response, some day there will be a mailing list.