Iain Buchanan writes: > On Thu, 2010-04-29 at 16:44 +0200, Alex Schuster wrote:
> > using this script, adapted to their needs, I started to rewrite it in > > a way that it reads a config file, and no modification of the script > > itself is necessary. If anyone is interested, send me an email. > > interested! So is it on sourceforge yet ;) Sorry, it took a little longer. I was ill, and then these scripts tend to grow and grow until I am satisfied with them. It's still not perfect, but I think at the moment it does what it should do. Still not on sourceforge, but here: http://www.wonkology.org/utils/snackup The name is silly, but I kinda like it now. A backup utilizing LVM snapshots... snapshot backup... snackup! It needs a config file that is looked up in some default locations, or can be specified with the -c option. Use option -T to generate a template that has information on the syntax and some examples. In short: The config file defines targets you give as arguments to snackup. So 'snackup home' backs up your /home partition, 'snackup etc' creates a .tgz file of your /etc. The config file is sourced, so you can put any bash stuff you want into there, like some shell functions you want to have executed. For example, I want my /var/log/portage/*.log files to be compressed before I backup my /var partition. A target is started by a colon, followed by name, type, source and destination (and optionally more), separated by one or more tab characters. Type can be 'cp', 'dd', 'tar', 'rsync' or 'rdiff'. I only tested dd, tar and rdiff so far, though. The source directory may be prefixed by the volume group and LVM of that partition in order to create an lvm snapshot first. You may add a LUKS key if the partition is encrypted. The source may contain wildcards. In that case, all matching files are backed up to the destination. If the type has a * appended, all matching files are backed up individually. Some examples: : tar kde .kde* /backup/kde.%s Target 'kde' will backup all your .kde* directories to /backup/kde.tar (the %s is replaced by a suffix, usually tar). You need to be in your home directory, otherwise the path will not be found. This is not necessary if you use ~//.kde* instead. : kernels tar* /usr/src//linux-* /backup/src/%f.%s -j - lsf Target 'kernels' will backup your /usr/src/linux-* directories individually - one tar file for each (note the * appendended to the tar target type). The -z option will be passed to the tar command, and the suffix is changed to tgz accordingly. The // denotes that the backup should be done locally from the directory left to the //. Otherwise, the full path would be included in the tar file. : tar etc /etc /backup/etc_%d.%s -j Target 'etc' will tar your /etc directory, compressed with bzip2. The %d will be replaced by the current date. You can change the date format by re-defining a date() shell function. You will get a message about tar removing the leading /, you can avoid it by replacing /etc by ///etc, meaning that your local directroy will be /. : boot dd /dev/sda5 /dev/sdb5 bs=32M Target 'boot' will backup a boot partition with dd. Options like the bs=32M are added directly to the dd command. : home rsync system/home::. /backup/home/ Target 'home' will create a LVM snapshot of the /dev/system/home logical volume, mount it and back it up with rdiff-backup. The '.' could also be a / or left off. : var rsync system/var::/ /backup/var/ - ziplog Similar, but the command ziplog will be executed before the backup, compressing some log files. It must be defined in the config file. The script has some options: -c file location of config file -C clear destination first -d dummy mode, just show what would be done -f force backup (the initial rdiff-backup may need this) -h show this help -l output to log file, too -L log file (default:/home/wonko/log/snackup.log); may be a directory (add a trailing slash) to create target-specific logs -n l use nice level l (default:10, 0 to turn off) -N l use ionice level l (default:3, 0 to turn off) -o extra options that will added to the actual backup command -s size size of LVM snapshot (default:2G) -S char replace tab as delimiter for targets in config file -T output config file template -v verbose output; may be given multiple times 1: some extra output; 2: add -v to commands; 3: set -xv -V output version information and exit Most important are: -c to specify the location of the config file -d to output what would be done, you will see the final tar / rdiff- backup / whatever command with all its options. -T to see a template. Save it with snackup -T > ~/.snackup and then modify your ~/.snackup file. -o to add whichever options you like to the final command. These (and -j and -z) override options already defined in the config file. Too complicated? Overkill? Maybe. But I like it, and now I do not have to write another script for every system I want to backup. And I like the LVm snapshotting to be done automatically. It's not that hard, but it's annoying to do it by hand, even more as all my volumes are encrypted. These are my own targets: : boot dd /dev/boot /dev/sdb5 - - - : backup rdiff weird/backup::/etc/key::. /backup/weird/backup - - - : local rdiff weird/local::/etc/key::. /backup/weird/local - - - : home rdiff weird/home::/etc/key::. /backup/weird/home - - - : med rdiff weird/med::/etc/key::. /backup/weird/med - - - : mp3 rdiff weird/mp3::/etc/key::. /backup/weird/mp3 - - - : mpeg rdiff weird/mpeg::/etc/key::. /backup/weird/mpeg - - - : opt rdiff weird/opt::/etc/key::. /backup/weird/opt - - - : root rdiff weird/root::/etc/key::. /backup/weird/root - - - : usr rdiff weird/usr::/etc/key::. /backup/weird/usr - - - : var rdiff weird/var::/etc/key::. /backup/weird/var - zipLog - : etc tar ///etc /backup/conf/etc/etc_%d.%s -z - lsf : kernels tar* /usr/src//linux-* /backup/weird/src/%f.%s -j - lsf : portage rsync /var/portage/packages /backup/weird/portage - - - : kde tar ~//.kde* /backup/wonko/home/kde-%d.%s -z - lsf : dot tar ~//.??* /backup/extern/dot-%d.%s -z - lsf At last, the disclaimer: Use it at your own risk! This is a script of some 800 lines of bash code some guy wrote, it messes around with LVM stuff, creates and removes temporary directories and even has an option to wipe the destination completely. I'm quite confident that no harm will be done, and I do not suggest you to take a backup before daring to try this script, but anyway. Use the -d option first to test what actually would be going on, before you do a real backup! Hope this is of good use to someone. For me it is, I will be using it on several systems, and now I only have to make little changes in the config file for each system, but not at the script. Suggestions and bug reports are welcome of course. Wonko