aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Reisner <d@falconindy.com>2010-01-11 21:13:41 -0500
committerDave Reisner <d@falconindy.com>2010-01-11 21:13:41 -0500
commit2d07f84e4b2f261e9421d2246b995fecda67b700 (patch)
treebd64b29ea80c626b7cead47398f7a38caca06a0b
parent2b4d557f0d8804e8cf8bd9e95b0e335ef01d1b01 (diff)
downloadsquashfu-2d07f84e4b2f261e9421d2246b995fecda67b700.tar.gz
Merge todo, install, doc, and bugs into README
-rw-r--r--README97
1 files changed, 97 insertions, 0 deletions
diff --git a/README b/README
new file mode 100644
index 0000000..26a511b
--- /dev/null
+++ b/README
@@ -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...
+