Backup Scripte

Aus MHC-Wiki

Wechseln zu: Navigation, Suche

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).
Persönliche Werkzeuge
Navigation