Backup Scripte
Aus MHC-Wiki
Inhaltsverzeichnis |
Idee
Wir verwenden für Montag bis Dienstag je eine Festplatte und am Freitag N Festplatten für N Wochensicherungen. Die Festplatten werden per udev-Rule erkannt und als Device /dev/backup zur Verfügung gestellt.
Das eigentliche Backup für Linux-Systeme kann dann per rsync erfolgen.
udev Rule für Seagate Free Agent Platten
/erc/udev/rules.d/70-backup.rules
SUBSYSTEMS=="scsi",ATTRS{model}=="FreeAgent Go ",KERNEL=="sd?1",SYMLINK+="backup"
Layout
Die Platten haben immer eine Partition - sd?1 - mit XFS als Dateisystem. Das Dateisystem hat jeweils ein passendes Label:
- TAG-MONTAG
- TAG-DIENSTAG etc.
- WOCHE-1
- WOCHE-2 etc.
Wurde erfolgreich gemountet, dann wird zum eine die Datei "OK" erzeugt, die als Flag für alle anderen Scrtipte dient damit diese feststellen können ob sauber gemountet wurde. Ausserdem wird eine Timestamp an die Datei "TS" angehängt, falls mich das mal interessiert. Die Datei "OK" wird vor dem umount entfernt und dann abermals ein Timestamp geschrieben.
Linux Scripte
Crontab
/etc/cron.d/backup
# # cron-jobs for backup # MAILTO=root 0 7 * * 1-5 root /usr/local/bin/disk.sh 0 19 * * 1-5 root /usr/local/bin/mount_disk.sh 0 9,12,15 * * 1-5 root /usr/local/bin/disk_nag.sh
mount_disk.sh
Script zum mounten der Platte unter Linux
#!/bin/sh
export PATH=/bin:/usr/bin:/usr/sbin:$PATH
LOCAL_EMAIL="backup@kunde.de"
SERVICE_EMAIL="noc@dienstleister.de"
PLATTE="unbekannt"
xfs_admin -l /dev/backup | grep label >/dev/null 2>&1
if [ $? -eq 0 ]; then
PLATTE=`xfs_admin -l /dev/backup | grep label | cut -d "\"" -f 2`
fi
DOW=`date +%u`
case $DOW in
1)
PLATTE_S="TAG-MONTAG"
;;
2)
PLATTE_S="TAG-DIENSTAG"
;;
3)
PLATTE_S="TAG-MITTWOCH"
;;
4)
PLATTE_S="TAG-DONNERSTAG"
;;
5)
PLATTE_S="WOCHE"
PLATTE=`echo $PLATTE | cut -d "-" -f 1`
;;
esac
if [ $PLATTE != $PLATTE_S ]; then
echo "Falsche Festplatte: $PLATTE gefunden." | mail -s "Backup: Fehler, falsche Festplatte" $LOCAL_EMAIL
echo "Falsche Festplatte: $PLATTE gefunden." | mail -s "Backup: Fehler, falsche Festplatte" $SERVICE_EMAIL
exit 0
fi
mount /dev/backup /backup >/dev/null 2>&1
if [ $? -eq 0 ]; then
chmod 777 /backup
touch /backup/OK
echo "mount: "`date` >> /backup/TS
echo "Festplatte: $PLATTE wurde eingebunden, Backup kann starten." | mail -s "Backup: Festplatte eingebunden" $LOCAL_EMAIL
else
echo "Festplatte: $PLATTE konnte nicht eingebunden werden, Service wrude verstaendigt." | mail -s "Backup: Festplatte NICHT eingebunden" $LOCAL_EMAIL
echo "PROBLEM mit $PLATTE" | mail -s "Backup: Festplatte NICHT eingebunden" $SERVICE_EMAIL
fi
disk.sh
Script zum entmounten der Platte unter Linux:
#!/bin/sh export PATH=/bin:/usr/bin:/usr/sbin:$PATH LOCAL_EMAIL="backup@kunde.de" SERVICE_EMAIL="noc@dienstleister.de" mount | grep backup >/dev/null 2>&1 if [ $? -eq 0 ]; then rm -f /backup/OK echo "umount: "`date` >> /backup/TS umount /backup if [ ! $? -eq 0 ]; then echo "Service wurde verstaendigt, bitte Anweisungen abwarten." | mail -s "Backup: Festplatte kann nicht entfertn werden" $LOCAL_EMAIL echo "PROBLEM" | mail -s "Backup: Festplatte kann nicht entfertn werden" $SERVICE_EMAIL exit 1 fi fi xfs_admin -l /dev/backup | grep label >/dev/null 2>&1 if [ $? -eq 0 ]; then PLATTE=`xfs_admin -l /dev/backup | grep label | cut -d "\"" -f 2` fi P1=`echo $PLATTE | cut -d "-" -f 1` P2=`echo $PLATTE | cut -d "-" -f 2` DOW=`date +%u` case $DOW in 1) PLATTE_N="TAG-MONTAG" ;; 2) PLATTE_N="TAG-DIENSTAG" ;; 3) PLATTE_N="TAG-MITTWOCH" ;; 4) PLATTE_N="TAG-DONNERSTAG" ;; 5) PLATTE_N="WOCHE-?" ;; esac echo "Platte: $PLATTE erkannt, bitte Platte: $PLATTE_N anschliessen." | mail -s "Backup: Plattenwechsel" $LOCAL_EMAIL
disk_nag.sh
Script zum generieren von Hinweismails für den Plattenwechsel.
#!/bin/sh export PATH=/bin:/usr/bin:/usr/sbin:$PATH PLATTE="unbekannt" LOCAL_EMAIL="backup@kunde.de" SERVICE_EMAIL="noc@dienstleister.de" xfs_admin -l /dev/backup | grep label >/dev/null 2>&1 if [ $? -eq 0 ]; then PLATTE=`xfs_admin -l /dev/backup | grep label | cut -d "\"" -f 2` fi P1=`echo $PLATTE | cut -d "-" -f 1` P2=`echo $PLATTE | cut -d "-" -f 2` DOW=`date +%u` case $DOW in 1) PLATTE_N="TAG-MONTAG" ;; 2) PLATTE_N="TAG-DIENSTAG" ;; 3) PLATTE_N="TAG-MITTWOCH" ;; 4) PLATTE_N="TAG-DONNERSTAG" ;; 5) PLATTE_N="WOCHE" PLATTE=`echo $PLATTE | cut -d "-" -f 1` ;; esac if [ $PLATTE != $PLATTE_N ]; then echo "Falsche Festplatte: $PLATTE gefunden. Bitte Festplatte $PLATTE_N anschliessen." | mail -s "Backup: Hinweis, falsche Festplatte" $LOCAL_EMAIL exit 0 fi
Beispiel für rsync
#!/bin/sh
SERVER="192.168.0.2"
TARGET_PATH="/backup/mail"
LOCAL_EMAIL=backup@kunde.de
SERVICE_EMAIL=noc@service.de
OK=`ssh $SERVER "if [ -f /backup/OK ]; then echo 1; else echo 0; fi"`
MAIL_FILE=/tmp/mail_file
if [ $OK -eq 1 ]; then
echo "Start:">$MAIL_FILE
date >>$MAIL_FILE
rsync -a -e 'ssh' --numeric-ids /etc $SERVER:$TARGET_PATH >>$MAIL_FILE 2>>$MAIL_FILE
rsync -a -e 'ssh' --numeric-ids /kolab $SERVER:$TARGET_PATH >>$MAIL_FILE 2>>$MAIL_FILE
echo "Ende:" >>$MAIL_FILE
date >>$MAIL_FILE
cat $MAIL_FILE | mail -s "Backup Mailserver beendet" $LOCAL_EMAIL
else
echo "Service wurde verstaendigt" | mail -s "Backup Mailserver abgebrochen" $LOCAL_EMAIL
echo "OK file nicht da" | mail -s "Backup Mailserver abgebrochen" $SERVICE_EMAIL
fi
Windows Backup
Es wird ein Samba-Share zur Verfügung gestellt mit dessen Hilfe auf die Platte unter Linux gesichert werden kann.
Es werden die NT-Unix-Tools und der Blat-e-Mailclient benötigt.
NT-Backup Script
Liegt bei mir in: C:\admin\backup
Der Systemstatus und Dateien deren Status unsicher ist ist wird per NT-Backup mit VSS gesichert. Basis sind die Scripte von www.netzprisma.de
Siherheitshalber sollte die bks-Datei stets per NT-Backup erzeugt werden !
@echo off
@title Datensicherung
@color 1F
rem ##################################################
rem # NTBackup-Sicherung auf Platte (v 2005090201) #
rem # www.netzprisma.de #
rem ##################################################
set backup_base=\\server03\backup
if not exist %backup_base%\OK goto FEHLER
set mail_file=C:\admin\backup\mail.txt
set local_email=backup@kunde.de
set service_email=noc@service.de
echo Dies ist lediglich eine Statusmeldung die keine Aussage darüber trifft ob das Backup erfolgreich war. >%mail_file%
echo. >>%mail_file%
echo Start:>>%mail_file%
unixdate>>%mail_file%
echo. >>%mail_file%
rem Skript und .bks Dateien in c:\admin\backup
set configdisk=c:
set configdir=%configdisk%\admin\backup
rem Name des Servers
set serverbackup=%COMPUTERNAME%
rem Datensicherung nach
set backupdir=%backup_base%\%COMPUTERNAME%
rem **********************************************************
rem * evtl. Ergänzung für mehrtägige Sicherung hier einfügen *
rem **********************************************************
%configdisk%
cd %configdir%
rem *** Systemstatus-Sicherung ***
rem Zeitstempel-String erzeugen
for /f "Tokens=1" %%i in ('unixdate +%%Y%%m%%d-%%H%%M') do set dtt=%%i
del /Q %backupdir%\%serverbackup%_systemstatus_backup*.bkf
echo Sicherung Systemstatus von %serverbackup%>>%mail_file%
ntbackup backup SystemState /n "%serverbackup%-Backup Systemstatus %dtt%" ^
/d "%serverbackup%-Sicherung Systemstatus %dtt%" ^
/v:no /r:no /rs:no /hc:off /m normal ^
/l:f /f "%backupdir%\%serverbackup%_systemstatus_backup_%dtt%.bkf"
sleep 10
echo. >>%mail_file%
rem *** Dateidaten-Sicherung ***
for /f "Tokens=1" %%i in ('unixdate +%%Y%%m%%d-%%H%%M') do set dtt=%%i
del /Q %backupdir%\%serverbackup%_datei_backup*.bkf
echo Sicherung Datei-Daten von %serverbackup%>>%mail_file%
echo. >>%mail_file%
echo Parameterdatei:>>%mail_file%
echo %configdir%\%serverbackup%-datei-backup.bks>>%mail_file%
ntbackup backup "@%configdir%\%serverbackup%-datei-backup.bks" ^
/n "%serverbackup%-Backup Dateidaten %dtt%" ^
/d "%serverbackup%-Sicherung Dateidaten %dtt%" ^
/v:no /r:no /rs:no /hc:off /m normal ^
/l:f /f "%backupdir%\%serverbackup%_datei_backup_%dtt%.bkf"
sleep 10
echo. >>%mail_file%
rem *****************************
rem * Ergänzung für Logrotation *
rem *****************************
rem logrotation.bat
rem ********************************************************
rem * evtl. Ergänzung Email-Benachrichtigung hier einfügen *
rem ********************************************************
echo Ende:>>%mail_file%
unixdate>>%mail_file%
echo. >>%mail_file%
echo Erzeugte Dateien:>>%mail_file%
echo. >>%mail_file%
dir "%backupdir%">>%mail_file%
blat %mail_file% -s "Backup %COMPUTERNAME% abgeschlossen" -to %local_email%
blat %mail_file% -s "Backup %COMPUTERNAME% abgeschlossen" -to %service_email%
rem robocopy starten
C:\admin\robocopy\rcbackup.cmd
goto ENDE
:FEHLER
blat -body "Service wurde verstaendigt." -s "Backup %COMPUTERNAME% fehlgeschlagen" -to %local_email%
blat -body "OK file nicht gefunden" -s "Backup %COMPUTERNAME% fehlgeschlagen" -to %service_email%
:ENDE
Robocopy
Liegt bei mir in: c:\admin\robocopy
Sctipt für die Sicherung per Robocopy:
@echo off @title Datensicherung @color 1F set backup_base=\\server03\backup if not exist %backup_base%\OK goto FEHLER set mail_file=C:\admin\robocopy\mail.txt set local_email=backup@kunde.de set service_email=noc@service.de echo Robocopy Backup>%mail_file% echo Start:>>%mail_file% unixdate>>%mail_file% echo. >>%mail_file% set configdisk=c: set configdir=%configdisk%\admin\robocopy rem Datensicherung nach d:\backup (auf Festplatte) set backupdir=%backup_base\%COMPUTERNAME%\Hard_und_Software %configdisk% cd %configdir% mkdir %backupdir% robocopy /JOB:software.rcj echo Logfile: C:\admin\robocopy\software.txt>>%mail_file% echo Ende:>>%mail_file% unixdate>>%mail_file% blat %mail_file% -s "Backup (Robocopy) %COMPUTERNAME% abgeschlossen" -to %local_email% blat %mail_file% -s "Backup (Robocopy) %COMPUTERNAME% abgeschlossen" -to %service_email% goto ENDE :FEHLER blat -body "Service wurde verstaendigt." -s "Backup (Robocopy) %COMPUTERNAME% fehlgeschlagen" -to %local_email% blat -body "OK file nicht gefunden" -s "Backup (Robocopy) %COMPUTERNAME% fehlgeschlagen" -to %service_email% :ENDE
Die Robocopy-Config-Datei (hier: software.rcj):
:: :: Robocopy Job C:\admin\robocopy\software.rcj :: :: Created by Administrator on Thu Jun 05 2008 at 17:33:12 :: :: :: Source Directory : :: /SD:E:\Daten\Software\ :: Source Directory. :: :: Destination Directory : :: /DD:G:\Software\ :: Destination Directory. :: :: Include These Files : :: /IF :: Include Files matching these names :: *.* :: Include all names (currently - Command Line may override) :: :: Exclude These Directories : :: /XD :: eXclude Directories matching these names :: :: eXclude no names (currently - Command Line may override) :: :: Exclude These Files : :: /XF :: eXclude Files matching these names :: :: eXclude no names (currently - Command Line may override) :: :: Copy options : :: /S :: copy Subdirectories, but not empty ones. /E :: copy subdirectories, including Empty ones. /COPY:DAT :: what to COPY (default is /COPY:DAT). /PURGE :: delete dest files/dirs that no longer exist in source. /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE). /ZB :: use restartable mode; if access denied use Backup mode. :: :: Retry Options : :: /R:10 :: number of Retries on failed copies: default 1 million. /W:10 :: Wait time between retries: default is 30 seconds. :: :: Logging Options : :: /NDL :: No Directory List - don't log directory names. /NFL :: No File List - don't log file names. /NP :: No Progress - don't display % copied. /ETA :: show Estimated Time of Arrival of copied files. /LOG:c:\admin\robocopy\software.txt :: output status to LOG file (overwrite existing log).

