====== 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 < {{tag>linux}} ~~DISCUSSION~~