#!/bin/bash #author: Thomas Roehm #version: 1.2 BACKUPDIR="/mnt/backup/raspberrypi/backup" LOGFILE="${BACKUPDIR}/`hostname -f`/backup.log" mkdir ${BACKUPDIR} 2> /dev/null #echo "mounting share to backup-server" ########################################################################################## #mount backup-device###################################################################### ########################################################################################## #mount -t cifs -o lfs //hostname.local/linux_images ${BACKUPDIR} -o username=tmade #if [ $? -ne "0" ] #then # echo "mounting device failed!" # exit 1 #else # echo "device on backup-server mounted" #fi ########################################################################################### #create backup-folder###################################################################### ########################################################################################### FILE=${BACKUPDIR}/`hostname -f` if [ -d $FILE ] then echo "Backup of host '`hostname -f`' already exists." echo "Rename it to '`hostname -f`.old'" mv ${BACKUPDIR}/`hostname -f` ${BACKUPDIR}/`hostname -f`.old #else #echo "'$FILE' does not exist." fi mkdir ${BACKUPDIR}/`hostname -f`/ 2> /dev/null cd ${BACKUPDIR}/`hostname -f`/ ############################################################################################ #backup partition table (sd*-devices)####################################################### ############################################################################################ #fdisk -l 2> /dev/null |grep GB |cut -f2 -d ' ' |cut -f1 -d ':' |grep -v "/dev/dm" |grep -v "/dev/mapper" > hd fdisk -l 2> /dev/null |grep -E '(G|i)B' |cut -f2 -d ' ' |cut -f1 -d ':' |grep -v "/dev/dm" |grep -v "/dev/mapper" |grep -v "loop" > hd HDCOUNT=`cat hd |wc -l` for ((i=1; i <=$HDCOUNT; i++)) do j=0 hdarray=($(sed -n "$i"p hd)) echo "Device = ${hdarray[$j]}" temp=${hdarray[$j]} echo $temp | sed 's/\/dev\/sd/dev_sd/g' t=`echo $temp | sed 's/\/dev\/sd/dev_sd/g'` sfdisk -d ${hdarray[$j]} > ${t}_part_table ((j++)) done ############################################################################################ #backup partition table (/dev/cciss/c0d*-devices)########################################### ############################################################################################ HDCOUNT=`cat hd |wc -l` for ((i=1; i <=$HDCOUNT; i++)) do j=0 hdarray=($(sed -n "$i"p hd)) echo "Device = ${hdarray[$j]}" temp=${hdarray[$j]} echo $temp | sed 's/\/dev\/cciss\/c0d/dev_cciss_c0d/g' t=`echo $temp | sed 's/\/dev\/cciss\/c0d/dev_cciss_c0d/g'` sfdisk -d ${hdarray[$j]} > ${t}_part_table ((j++)) done ############################################################################################ #backup partition table (/dev/mmcblk*-devices)########################################### ############################################################################################ HDCOUNT=`cat hd |wc -l` for ((i=1; i <=$HDCOUNT; i++)) do j=0 hdarray=($(sed -n "$i"p hd)) echo "Device = ${hdarray[$j]}" temp=${hdarray[$j]} echo $temp | sed 's/\/dev\/mmcblk/dev_mmcblk/g' t=`echo $temp | sed 's/\/dev\/mmcblk/dev_mmcblk/g'` sfdisk -d ${hdarray[$j]} > ${t}_part_table ((j++)) done rm hd ########################################################################################### #pv_setup################################################################################## ########################################################################################### pv_setup () { echo "start function pv_setup" ########################################################################################### #lvm-backup################################################################################ ########################################################################################### echo "creating lvm-backup" vgcfgbackup --file ${BACKUPDIR}/`hostname -f`/%s_vgcfgbackup.bku ########################################################################################### #count lvm-vg's############################################################################ ########################################################################################### VG_COUNT=`ls -al *vgcfgbackup.bku | wc -l` ########################################################################################### #check LVM mounts/ lv's#################################################################### ########################################################################################### /bin/ls *vgcfgbackup.bku | sed 's/_vgcfgbackup.bku//g' > temp_vg echo ###################################################################################### echo "following volume groups found on system:" echo "" cat temp_vg echo ###################################################################################### for ((i=1; i <=$VG_COUNT; i++)) do VG=`sed -n "$i"p temp_vg` sed -n -e '/logical_volumes/,$p' ${VG}_vgcfgbackup.bku |grep -B 1 "id" |grep -v "id" |cut -f1 -d '{' |grep -v "-" |cut -f3 > lvm_mounts_vg_${VG} done rm temp_vg } ########################################################################################### #tar backup################################################################################ ########################################################################################### backup () { cd ${BACKUPDIR}/`hostname -f`/ echo "" pwd echo "" echo "creating tar-backup of all mountpoints" echo "" echo "creating root-backup:" echo "" tar -czf root.tgz --one-file-system / && EXIT=$(echo $?) || EXIT=$(echo $?) if [ $EXIT -eq "0" ] then echo "root-backup created" >> summary else if [ $EXIT -eq "1" ] then echo "root-backup created with exit code \"$EXIT\" (files changed)" >> summary else echo "root-backup failed!" >> summary fi fi #tar -czf root.tgz --ignore-failed-read --warning='no-file-ignored' --warning=no-file-changed --one-file-system --exclude '/opt/InteProxy-SERVER-1.0.4/*' / && echo "root-backup created" >> summary || echo "root-backup failed!" >> summary echo "" echo "creating var-backup:" echo "" tar -czf var.tgz --one-file-system --exclude '/var/splunk/*' --exclude '/var/oldlogs' /var && EXIT=$(echo $?) || EXIT=$(echo $?) if [ $EXIT -eq "0" ] then echo "var-backup created" >> summary else if [ $EXIT -eq "1" ] then echo "var-backup created with exit code \"$EXIT\" (files changed)" >> summary else echo "var-backup failed!" >> summary fi fi echo "" echo "creating boot-backup:" echo "" tar -czf boot.tgz --one-file-system /boot && EXIT=$(echo $?) || EXIT=$(echo $?) if [ $EXIT -eq "0" ] then echo "boot-backup created" >> summary else if [ $EXIT -eq "1" ] then echo "boot-backup created with exit code \"$EXIT\" (files changed)" >> summary else echo "boot-backup failed!" >> summary fi fi echo "creating data-backup:" echo "" tar -czf data.tgz --one-file-system /data && EXIT=$(echo $?) || EXIT=$(echo $?) if [ $EXIT -eq "0" ] then echo "data-backup created" >> summary else if [ $EXIT -eq "1" ] then echo "data-backup created with exit code \"$EXIT\" (files changed)" >> summary else echo "data-backup failed!" >> summary fi fi echo "summary:" echo "`date +%d.%m.%Y_%H.%M.%S`" | tee -a $LOGFILE cat summary | tee -a $LOGFILE rm summary } ########################################################################################### #check if lvm-devices are available######################################################## ########################################################################################### #pvscan > pv_temp pvscan 2> /dev/null > pv_temp grep PV pv_temp if [ $? -ne "0" ] then echo "no physical volumes found" rm pv_temp backup else echo "physical volumes found" rm pv_temp pv_setup backup fi