This shows you the differences between two versions of the page.
— |
soft:burp [2019/07/14 13:42] (current) phil created |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Burp - backup and restore program ====== | ||
+ | [[https:// | ||
+ | |||
+ | ===== backup lvm snapshots ===== | ||
+ | |||
+ | |||
+ | I backup virtual machines from hypervisors using burp and lvm (thin) snapshots. | ||
+ | |||
+ | |||
+ | <file conf / | ||
+ | backup_script_pre=/ | ||
+ | backup_script_post=/ | ||
+ | </ | ||
+ | |||
+ | **/ | ||
+ | |||
+ | <file bash / | ||
+ | #!/bin/sh | ||
+ | |||
+ | set -e | ||
+ | MNT=/ | ||
+ | PATH=/ | ||
+ | SUFFIX=_burp | ||
+ | MNT=/ | ||
+ | |||
+ | snapshot() { | ||
+ | vg=$2 | ||
+ | lv=$3 | ||
+ | lvsnap=${4: | ||
+ | mnt=$MNT/ | ||
+ | partition=$5 | ||
+ | |||
+ | if test -z " | ||
+ | echo "bad params: $@" 1>&2 | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | if [ " | ||
+ | mkdir -p $mnt | ||
+ | thin=$(lvs $vg/$lv | tail -n 1 | awk '{ print $5 }') | ||
+ | if [ -n " | ||
+ | lvcreate -kn -n $lvsnap -s $vg/$lv | ||
+ | else | ||
+ | lvcreate -L2G -s -n $lvsnap $vg/$lv | ||
+ | fi | ||
+ | #lvchange -ay -K $vg/$lvsnap | ||
+ | sleep 1 | ||
+ | if test -n " | ||
+ | kpartx -avs / | ||
+ | dev=/ | ||
+ | else | ||
+ | dev=/ | ||
+ | fi | ||
+ | mount $dev $mnt | ||
+ | elif [ " | ||
+ | umount -f $mnt || true | ||
+ | if test -n " | ||
+ | kpartx -d / | ||
+ | fi | ||
+ | lvremove -f $vg/$lvsnap || true | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | script=$(basename $0) | ||
+ | if [ " | ||
+ | action=pre | ||
+ | elif [ " | ||
+ | action=post | ||
+ | else | ||
+ | echo "bad invocation $0" 1>&2 | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | while IFS= read -r line; do | ||
+ | echo " | ||
+ | test -z " | ||
+ | snapshot $action $line | ||
+ | done < " | ||
+ | |||
+ | </ | ||
+ | |||
+ | The file reads its config from **/ | ||
+ | |||
+ | <file conf / | ||
+ | # VGNAME LVNAME (MNT_NAME) (PARTITION) | ||
+ | vg0 root | ||
+ | vg0 vm_build build 1 | ||
+ | vg0 vm_k2 k2 1 | ||
+ | vg0 vm_k2_data k2_data | ||
+ | vg0 vm_db db 1 | ||
+ | vg0 vm_db_postgres db_postgres | ||
+ | vg0 vm_db_mysql db_mysql | ||
+ | vg0 vm_db_logs db_logs | ||
+ | </ | ||
+ | |||
+ | Then on server side, just **include=** mountpoint from **/ |