examples/backup
changeset 137 dd11d1262b6c
parent 136 a5d087334439
child 138 790ac145bccc
equal deleted inserted replaced
136:a5d087334439 137:dd11d1262b6c
     1 #! /bin/bash -e
       
     2 
       
     3 # just a simple(!) example, not intended for production use
       
     4 # without supervision!
       
     5 
       
     6 export TMPDIR=/var/tmp
       
     7 export LC_ALL=C
       
     8 
       
     9 SNAPSIZE=1G
       
    10 DST=${1?need destination folder}
       
    11 VG=`hostname`
       
    12 DEV=/dev/sda1
       
    13 NICE=
       
    14 
       
    15 NAGIOS_NSCA=nagios.net.schlittermann.de
       
    16 NAGIOS_HOST=gentoo-chemnitz/wintraken
       
    17 NAGIOS_SVC=BACKUP
       
    18 NAGIOS_MSG="failed ($DST)"
       
    19 NAGIOS_STATUS=2
       
    20 
       
    21 
       
    22 now=`date +%s`
       
    23 tmp=`mktemp`
       
    24 snaps=`mktemp`
       
    25 
       
    26 send_nsca() {
       
    27         /usr/lib/nagios/plugins/send_nsca \
       
    28                 -H $NAGIOS_NSCA \
       
    29                 -c /etc/nagios/send_nsca.cfg "$@"
       
    30 }
       
    31 
       
    32 
       
    33 _lvremove() {
       
    34 	local dev=$1
       
    35 	local vg=${dev%/*}
       
    36 	local lv=${dev#*/}
       
    37 
       
    38 	udevadm settle || true
       
    39 	lvremove -f "$dev" || {
       
    40 		dmsetup remove /dev/$vg/$lv \
       
    41 		&& udevadm settle \
       
    42 		&& dmsetup remove /dev/$vg/$lv-cow \
       
    43 		&& udevadm settle \
       
    44 		&& lvremove -f "$dev" || true
       
    45 	}
       
    46 }
       
    47 
       
    48 cleanup() {
       
    49 
       
    50 	while read lvm dev orig cleanup; do
       
    51 		udevadm settle
       
    52 		test -e "$dev" && test "$cleanup" || continue
       
    53 		eval $cleanup || true
       
    54 	done < $snaps
       
    55 
       
    56 	rm -f $tmp $snaps
       
    57 
       
    58 	echo "$NAGIOS_HOST:$NAGIOS_SVC:$NAGIOS_STATUS:$NAGIOS_SVC $NAGIOS_MSG" | send_nsca -d :
       
    59 
       
    60 }
       
    61 
       
    62 trap cleanup EXIT INT
       
    63 
       
    64 for dev in $DEV; do
       
    65 	if mount -o remount,ro $dev; then
       
    66 		echo "- $tmp - rm -fv $tmp" >>$snaps
       
    67 		cp -v $dev $tmp
       
    68 		mount -o remount,rw $dev
       
    69 		file -s $tmp | egrep -q "ext[234] filesystem" && e2fsck -C0 -f -y $tmp || true
       
    70 		imager save --now=$now -z $tmp:$dev $DST
       
    71 		rm -f $tmp
       
    72 	fi
       
    73 done
       
    74 
       
    75 
       
    76 lvs -o vg_name,lv_name,origin --noheadings $VG | while read vg lv origin; do
       
    77 	# LVM-name DEV-name ORIG-name (cleanup)
       
    78 
       
    79 	orig="$vg/$lv"
       
    80 	if test "$origin"; then
       
    81 		dev="/dev/$vg/$lv"
       
    82 		echo "$vg/$lv $dev $dev" >>$snaps
       
    83 		continue
       
    84 	fi
       
    85 	snap="$vg/$lv.snap.$now"
       
    86 	dev="/dev/$vg/$lv.snap.$now"
       
    87 	lvcreate -s -L $SNAPSIZE -n "$snap" "$orig"
       
    88 	echo "$snap $dev /dev/$vg/$lv _lvremove $snap" >>$snaps
       
    89 done
       
    90 
       
    91 udevadm settle
       
    92 
       
    93 while read snap dev name cleanup; do
       
    94 	test "$snap" = "-" && continue
       
    95 	for a in 1 2 3; do
       
    96 		file -s `readlink -f $dev` | egrep -q "ext[234] filesystem" && $NICE fsck -y "$dev" && break
       
    97 		case $? in
       
    98 			32)	exit;;
       
    99 			*)	true;;
       
   100 		esac
       
   101 	done
       
   102 	if test $? = 0; then
       
   103 		$NICE imager save --now=$now -z $dev:$name $DST 
       
   104 		case `lvs -o snap_percent --noheadings "$snap"` in
       
   105 			100*)	echo "****************** $snap is full!";;
       
   106 		esac
       
   107 	fi
       
   108 	test "$cleanup" && eval $cleanup || true
       
   109 done <$snaps
       
   110 date
       
   111 date  >/var/log/backup.done
       
   112 
       
   113 NAGIOS_MSG="done ($DST)"
       
   114 NAGIOS_STATUS=0