diff options
author | Dave Reisner <d@falconindy.com> | 2010-01-11 21:13:41 -0500 |
---|---|---|
committer | Dave Reisner <d@falconindy.com> | 2010-01-11 21:13:41 -0500 |
commit | 2d07f84e4b2f261e9421d2246b995fecda67b700 (patch) | |
tree | bd64b29ea80c626b7cead47398f7a38caca06a0b | |
parent | 2b4d557f0d8804e8cf8bd9e95b0e335ef01d1b01 (diff) | |
download | squashfu-2d07f84e4b2f261e9421d2246b995fecda67b700.tar.gz |
Merge todo, install, doc, and bugs into README
-rw-r--r-- | README | 97 |
1 files changed, 97 insertions, 0 deletions
@@ -0,0 +1,97 @@ +SquashFu - an alternative backup solution +=================================================================== +WARNING: EXTREMELY ALPHA. MAY SET YOUR CAT ON FIRE. + +If you don't care about your cat... +=================================================================== +Requirements: aufs, aufs2-util, squashfs-tools, rsync, bc + +Goal: To create a backup solution which provides incremental backups and compression, + and which also provides an easy way to roll back. + +Design: + A directory structure is created as follows (with some terminology included): + backup_root/ + |- seed.sfs <-- squash, or seed + |- .bin.list <-- bin inventory list (or binventory) + |- ro/ <-- squash mount point + |- rw/ <-- union mount point + |- .bins/ <-- incrementals + |-1/ + | ..... + | ..... + | ..... + | ..... + | ..... + |-n/ + + seed.sfs is created from an initial backup and compressed using SquashFS, which is + simply a filesystem which focuses on compression, but is read only. It's mounted, + using a loopback device, on ro/. Using aufs2, a union mount is formed by ro/ and each + of the numbered bins, each corresponding to an incremental backup. + + At the time of the backup, the next available bin is created and logged to an inventory + sheet with a timestamp. A union is created with all the available bins, mounted in + reverse chronological order on top of the seed (newest to oldest) on rw/. At this point, + the union represents the state of your files at the end of the last backup. The newest + branch is marked as read/write, and rsync is called. Because this top branch is the + only writable location in the union, the files rsync generates with the -u (update) + flag are placed into this branch. The backup finishes, and the union and seed are + unmounted. + + At this point, Squashfu ensures compliance with the user's settings of MAX_BINS. If + the current number of used bins exceeds this value, a new seed is generated. The + number of old incrementals merged into the new seed is determined by the difference + between MAX_BINS and MIN_BINS in the config file. In this way, you always have + MIN_BINS available to roll back to, but you're not forced to recompress your seed + at every backup -- an operation that may take a long time depending on how big + your backup source is. + + If and when you want to roll back, execute Squashfu with the -R action, and supply + the number of bins you want to roll back. The bins are ordered chronologically, + and the oldest "number_of_bins - bins_to_rollback" are mounted on the union mount + point. + +WARNING: + You should not, under any circumstances, add or remove files contained in the bins, + nor should you alter your binventory's time stamps. Doing so can result in non-recoverable + damage to the integrity of the backups. + +Further reading: + http://en.wikipedia.org/wiki/Aufs + http://en.wikipedia.org/wiki/UnionFS + http://aufs.sourceforge.net/ + http://en.wikipedia.org/wiki/SquashFS + http://en.wikipedia.org/wiki/Rsync + + +INSTALL +------------------------------------- +-Put etc/squashfu in /etc/squashfu +-Make a backup directory somewhere where you want your files +-READ OVER /etc/squashfu.conf and set it the way you want +-Run manually with 'squashfu -B' +-If everything goes well, make a cron job to run this bad boy at the time you want +-Hang onto ya nuts. As this is still an alpha, I take no responsibility for + loss of data, and I likely don't care much about bug reports. + + +KNOWN BUGS +------------------------------------ +1/11/2010 (Kernel: 2.6.32.3) + Issue: Aufs takes a long time to unmount. + Fix: If using Ext4, mount with the 'nobarrier' option. No resolution known + at this time for other FS's. + + +TODO +--------------------------------------- +In no particular order.... + +- Create dispatchers for actions +- Create options parser (and determine options) +- Implement rollback functions +- Add debug statements + +probably more... + |