Zálohovací skript na pásku

Následující skript zálohuje vybrané adresáře přímo na pásku. Lze nastavit tak, aby rotoval dvě (nebo více) pásek.

Scénář zálohování

  • každé pondělí vyzve e-mailem k založení pásky KOMPLETNÍ ZÁLOHA
  • v úterý ráno proběhne kompletní záloha a vyzve k založení pásky označené jako PŘÍRŮSTKOVÁ ZÁLOHA
  • v dalších dnech probíhá přírůstková záloha na jednu pásku
  • v neděli navíc pošle e-mail vyzývající o založení pásky s kompletní zálohou

Pásky jsou po založení vždy smazány. Doporučuji rotovat několik pásek pro kompletní zálohu (a jednu kopii odnášet mimo serverovnu). Toto chování lze vypnout volbou SWAPPING a zálohovat pouze na jednu pásku (toto není otestováno, možná tam bude chybka).

#!/bin/bash
# BAckup Script TAR Directories -- direct tape backup script
#
# Call this every night (from cron). On Monday (here Tuesday night)
# full backup is taken, every other day incremental backup is taken.
# It`s highly recommended to swap at least two tapes (one
# for full backups on Mondays, second for other days).
#
# The script no longer operates with TAR. It uses AFIO now.
#
 
# directories to backup (separated by spaces)
DIRS="/home /etc"
 
# device to backup to (can be also a tar file)
DEVICE="/dev/tape"
#DEVICE="/tmp/backup.cpio"
 
# do you swap two or more tapes
# setting this to "1" will ERASE tape every Tuesday!
SWAPPING=1
 
# e-mail of the tape operator (or empty string for no mails)
TAPEOPER="ja@nekde.cz"
 
# additional e-mail to send mails to with "-c " prefix (or empty string)
CCOPER=""
#CCOPER="-c kopie@nekde.cz"
 
# mt binary and additional flags (e.g. tape device)
MT="mt"
#MT="test"
 
# date of the week (0=Sunday, 1=Monday, ...)
DATEOFWEEK=`date +%u`
#DATEOFWEEK=4
 
# array of days
DAYS[1]=1
DAYS[2]=2
DAYS[3]=3
DAYS[4]=4
DAYS[5]=5
DAYS[6]=6
DAYS[7]=1
 
# array of days (tomorrow for every day)
TDAYS[1]=2
TDAYS[2]=3
TDAYS[3]=4
TDAYS[4]=5
TDAYS[5]=6
TDAYS[6]=7
TDAYS[7]=1
 
# afio program
AFIO="/usr/local/sbin/afio"
 
# compression program (-P $LZOP -Q -9 )
# lzop is slower in compression and provides similar results as zlib
#LZOP="/usr/local/sbin/lzop"
 
# logs
LOG=/var/log/bastard-$DATEOFWEEK.log
LOGERR=/var/log/bastard-$DATEOFWEEK-err.log
FLIST=/var/log/bastard-$DATEOFWEEK-files.txt
TIME=/var/log/bastard-${DAYS[$DATEOFWEEK]}.ts
TIMET=/var/log/bastard-${TDAYS[$DATEOFWEEK]}.ts
 
function do_backup {
        # wait some time
        sleep 1s
        # store the timestamp for tomorrow
        touch $TIMET
        # prepare find
        date >$LOG
        if [ $1 == "1" ]; then
                FINDPARMS=(-not -iregex '.*\.\(avi\|mpg\|mpeg\|wmv\|jpg\|jpeg\|bmp\|tif\|tiff\)');
        else
                FINDPARMS=(-not -iregex '.*\.\(avi\|mpg\|mpeg\|wmv\|jpg\|jpeg\|bmp\|tif\|tiff\)' -cnewer $TIME);
        fi
        # go
        find $DIRS ${FINDPARMS[@]} | \
        tee $FLIST | \
        $AFIO -o -Z $DEVICE >>$LOG
        # print status of the tape
        sleep 2s
        $MT status >>$LOG
        date >>$LOG
}
 
function eject_tape {
        # rewind and eject the tape
        sleep 2s
        $MT status >>$LOG
        sleep 2s
        if [ $SWAPPING == "1" ]; then
                $MT offline
        fi
}
 
if [ $DATEOFWEEK == "2" ]; then # Monday -- erase tape, full backup
        $MT rewind
        do_backup 1
        if [ $TAPEOPER != "" ]; then
                mail $CCOPER -s 'Probehne prirustkova zaloha - vymente pasku' $TAPEOPER <<!
Dobry den,
 
v noci probehla kompletni zaloha, nyni vlozte pasku oznacenou jako
PRIRUSTKOVA ZALOHA. Paska bude smazana a po zbytek tydne se budou
zalohovat jen zmenene a nove soubory.
 
Pasku oznacenou jako KOMPLETNI ZALOHA budete potrebovat zase
pristi pondeli.
 
!
        fi
        eject_tape
elif [ $DATEOFWEEK == "3" ]; then # Tuesday -- tape erase (?), inc backup
        if [ $SWAPPING == "1" ]; then
                $MT rewind
        fi
        do_backup 0
elif [ $DATEOFWEEK == "1" ]; then # Sunday -- send e-mail about tape swapping
        if [ $TAPEOPER != "" ]; then
                mail $CCOPER -s 'Probehne kompletni zaloha - vymente pasku' $TAPEOPER <<!
Dobry den,
 
v pondeli v noci probehne kompletni zaloha systemu. Vlozte proto
pasku oznacenou KOMPLETNI ZALOHA. V utery rano pak bude nutne
vratit zpet pasku PRIRUSTKOVA ZALOHA.
 
Doporucujeme rotovat nekolik pasek oznacenych jako KOMPLETNI ZALOHA
a nekterou kopii ukladat na bezpecne misto mimo budovu.
 
!
        fi
        # rewind to last data written
        $MT eod
        do_backup 0
        eject_tape
else # all other days -- inc backup only
        # rewind to last data written
        $MT eod
        do_backup 0
fi

Diskuze

If you can't read the letters on the image, download this .wav file to get them read to you.
pridej.cz
blog/zalohovaci_skript_na_pasku.txt · Poslední úprava: 29.05.2008 09:04 (external edit)
Creative Commons License Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0