Debian Backup
Einleitung
Hier soll ein komfortables Backup-Script vorgestellt werden, das vollautomatisch regelmäßige Backups anfertigt. Herz des Backup-Scriptes ist rsync (http://de.wikipedia.org/wiki/Rsync). Das Script sichert nicht bei jedem lauf erneut alle Files, sondern nur geänderte bzw. neue Files. Dabei kommt aber nicht ein Vollbackup und weitere Incrementelle Backups zum Einsatz, wie bei vielen anderen Backuplösungen. Vielmehr enthält jedes neu angelegte Backup alle Files. Was zunächst wie ein Widerspruch aussieht, wird durch sog. Hardlinks im Dateisystem möglich.
Optional ist es möglich eine Festplatte, deren Netzteil an der → Schaltbaren Steckdosenleiste angeschlossen ist, für das Backup automatisch ein- und danach wieder auszuschalten. Desweiteren besteht die Möglichkeit, Remote-Systeme via ssh-Verbindung verschlüsselt zu sichern.
Voraussetzung
- EXT2- oder EXT3- formatierte zusätzliche USB-Festplatte oder USB-Stick.
- Optional: → Schaltbaren Steckdosenleiste zum automatischen ein- und ausschalten der Backup Platte
Installation
Installation von rsync:
apt-get install rsync
Download des Backup-Scripts:
cd /usr/local/bin wget ftp://download:download@schiele.homelinux.org/debian/backup.sh chmod +x backup.sh
Konfiguration
Die Konfiguaration des Scriptes erfolgt am Beginn des Files:
vi /usr/local/bin/backup.sh
#-----------------------Konfiguration------------------- #SIS-PM Schaltbare Steckdosenleiste SIS_PM_USE=1 SIS_PORT=4 #Automount AUTO_MOUNT=1 #Destination Device DEST_DEVICE=/dev/sdc1 #Verzeichnis, in dem die ganzen Sicherungsdaten liegen BASISDIR=/usr/shares/backup #LOGFILE LOGFILE=/var/log/backup.log #Zu sicherndes Verzeichnis (Syntax: host:/path) ZUSICHERN=localhost:/ #Von der Sicherung auszuschließen EXCLUDE=( "/dev/*" "/sys*" "/proc/*" "/mnt/*" "/media/*" ) #Prefix der Sicherungen PREFIX="vollsicherung" #Alte Backups löschen: DEL_OLD_BACKUP=0 KEEP_BACKUP_DAYS=30 #-----------------------------------------------------
- Falls eine → Schaltbare Steckdosenleiste vorhanden und eigerischtet ist, kann eine daran angesteckte externe USB-Festplatte automatisch vom Script angesteuert werden. Die betreffende Steckdose wird eingeschaltet, die Festplatte gemountet, das Backup durchgeführt und anschließend die Festplatte wieder unmounted und abgeschalten. In diesem Fall wird der Eintrag SIS_PM_USE=1 gesetzt. Mit dem Eintrag SIS_PORT wird die Nummer der Steckdose bestimmt, an dem das Netzteil der USB-Platte hängt.
- Falls die Festplatte nicht permanent ins Dateisystem eingebunden ist, z.B. weil diese nur für das Backup entweder manuell oder automatisch mittels SISPM eingeschaltet wird, kann die Festplatte für die Dauter des Backups ins Filesystem eingehängt werden. Dies erfolgt, falls der Eintrag AUTO_MOUNT=1 ist. Gemounted wird dabei die Festplatte DEST_DEVICE. Dies ist die Device-Bezeichnung, die die externe USB-Festplatte zugewiesen bekommt, nachdem diese eingeschaltet wurde. Diese Device-Kennung läßt sich relativ einfach herausfinden, indem in einem Putty-Fenster der Befehl "tail -f /var/log/kern.log" eingegeben wird, und die Platte dann an den USB-Port gehängt und eingeschaltet wird. Der Kernel wird die Platte erkennen und dann einige Ausgaben im Puuty-Fenster ausgeben. Diese enthalten unter anderem die Device-Kennung. Ausgabe z.B. "sd 6:0:0:0: [sdc] Write Protect is off" => DEST_DEVICE=dev/sdc1 (erste Partition der Festplatte sdc).
- BASISDIR bezeichnet das Verzeichnis, unter dem die Backups abgelegt werden. Die mit Hilfe der Einstellung AUTO_MOUNT eingebundene Festplatte, wird in dieses Verzeichnis gemounted, und darauf dann die Backups angelegt. Falls die Ziel-Festplatte permanent im Dateisystem verankert ist, hier den entsprechenden Pfand angeben.
- Nach dem Bakup ist es möglich, alte Backups zu löschen. Dadurch wird das Backup-Archiv nicht unnötig groß. Dies schafft Übersicht und spart Speciherplatz.Mit DEL_OLD_BAKCUP kann das automatische Löschen alter Backups aktiviert (1) oder deaktiviert (0) werden. Mit dem Eintrag KEEP_BACKUP_DAYS wird bestimmt, wieviel Tage lang alte Backups aufbewahrt werden sollen. Z.B. hier 30 Tage lang. Ältere Backups werden gelöscht.
- ZUSICHERN gibt das zu sichernde Verzeichnis im Format Host/Verzeichnisdas an. Sämtliche darunter liegenden Files und Directories werden rekursiv gesichert. ZUSICHERN=localhost:/ ergibt ein Vollbackup des Rechners (mit Ausnahme der ausgeschlossenen Files und Directories: siehe EXCLUDE).
- EXCLUDE enthält eine Auflistung aller auszuschließenden Files und Ordner. Standardmäßig sind dies EXCLUDE=( "/dev/*" "/sys*" "/proc/*" "/mnt/*" "/media/*" ), da diese Ordner Lesefehler beim Backup verursachen würden und beim Rechnerneustart ohnehin automatisch neu erstellt werden (/dev/ , /proc/ , /sys/) bzw. in /mnt/ und /media/ andere Dateisysteme wie z.B. CD-Roms oder USB-Sticks gemounted werden.
- PREFIX bestimmt den Namen der Backups. Die Backups werden nach folgendem Schema benannt: PREFIX-Datum_Zeit. Z.B. für PREFIX=vollsicherung: vollsicherung-2009-04-23_02:00 für ein Backup am 23.04.2009 um 2:00 Uhr.
Test
/usr/local/bin/backup.sh
Übergabeparameter
Neben der direkten Konfiguration des Backupscriptes besteht auch die Möglichkeit, Übergabeparameter zu verwenden. Format:
/usr/local/bin/backup.sh ZUSICHERN BASISDIR ECLUDE1 EXCLUDE2 EXCLUDEn
Parameter ZUSICHERN und BASISDIR siehe Konfigurationsoptionen oben EXCLUDE1 EXCLUDE2 ... EXCLUDEn: Zusätzlich zu den auszuschließenden Files/Directories, die im Script angegeben wurden, können hier beliebig viele weitere angegeben werden.
Optional: Regelmäßiges Backup
Um das Backups regelmäßig durchzuführen, wird ein Cron-Job eingerichtet. Dies macht natürlich nur Sinn, wenn die Zielfestplatte entweder permanent im Dateisystem verankert ist, oder die Festplatte automatisch mittels Debian_SisPM eingeschaltet wird.
vi /etc/cron.d/backup
Einen neuen Eintrag erzeugen, z.B. für ein wöchentliches Backup am Mittwoch (=Wochentag 3) um 2.00 Uhr nachts.
0 2 * * 3 root /usr/local/bin/backup.sh > dev/null
Remotebackup
Mit dem vorgestellten Script ist es auch möglich andere Linux-Rechner remote per SSH verschlüsselt zu sichern. Voraussetzung: Auf dem Remote-Rechner ist Linux mit OpenSSH mit Public Key eingerichtet.
Auf dem Backupserver (auf dem das Script installiert ist, und auf dem die Backups abgelegt werden): Erstellen des Public Key für das Backup:
ssh-keygen -t rsa
Die Frage "Enter file in which to save the key" beantworten mit: /root/.ssh/backup Die beiden Fragen nach der Passphrase mit Enter bestätigen (kein Passwort)
Übertragen des ssh-key's auf den Remotehost:
ssh-copy-id -i /root/.ssh/backup.pub root@IP_REMOTE
Es wird das root-Passwort des Remotehost (nicht Backupserver) abgefragt, um den Key per SSH verschlüsselt zu übertragen
Backup: Z.B. Backup des /var/ - Verzeichnisses des Remote-Rechners nach Backup: /home/shares/backup/remoteserver/
/usr/local/bin/backup.sh IP_REMOTE:/var/ /home/shares/backup/remoteserver/