Alex Schuster <wo...@wonkology.org> wrote:

> 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.
 
I have a question -- where would lvm put a snapshot and how could I pass
some list of excludes to rdiff-backup.  I have an lvm which is taking
all the PEs and a snapshot would take up lots of disk space -- or would
it.  Would I need some free pes to put the snapshot?

Thanks.

-- 
Your life is like a penny.  You're going to lose it.  The question is:
How do
you spend it?

         John Covici
         cov...@ccs.covici.com

Reply via email to