## page was renamed from Baustelle/Backup mit RSYNC {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:Rechte: Rechte für Dateien und Ordner ändern] [:Paketinstallation_DEB: Ein Paket installieren] }}} [[Inhaltsverzeichnis(1)]] Neben der üblichen, meist sehr aufwendigen und vor allem viel zu selten durchgeführten manuellen Sicherung auf externen Medien bietet sich eine automatische Lösung mit [:rsync:] an. Die Daten können etwa auf eine lokale Festplatte im gleichen Rechner, aber auch auf extern angeschlossene Festplatten (USB) oder per [:SSH:] über das Netzwerk gesichert werden. Das hier vorgestellte Backupscript ist automatisierbar und benötigt nur wenige Sekunden Ausführungszeit, da es nur Änderungen neu sichert. Eine Alternative zu diesem Script sind [:rsnapshot:] und [:Baustelle/dirvish:]. Im Gegensatz zu diesem Script verfügen die genannten Programme über eine Vielzahl von weiteren Konfigurationsmöglichkeiten. Der Vorteil von diesem Backupscript ist jedoch die Einfachheit und Übersichtlichkeit sowie der Verzicht auf weitere Paketinstallationen. = Funktion = Das Backupscript erstellt für die angegebenen Quellpfade identische Kopien in dem Zielverzeichnis unterhalb des jeweiligen Tagesdatums (JJMMTT). Es spielt hierbei keine Rolle ob wirklich für jeden einzelnen Tag ein Backup vorliegt. Als Basis für das inkrementelle Sichern wird das letzte Backup automatisch ausgewählt. Das Backupscript nutzt Hardlinks. Es entsteht der Eindruck, dass in jedem Tagesordner sämtliche Dateien einer Vollsicherung abgelegt sind. Beliebige Tagesbackups können so z.B. per TAR auf externen Medien gesichert werden. = Löschen alter Backups = Aufgrund der Überarbeitung des Programms im März 2009 können nun veraltete Versionen automatisiert gelöscht werden. EXPIREDAYS gibt hierbei in Tagen an, wann ein Backup als veraltet gilt. Aufgrund der inkrementellen Sicherung betrifft die Löschung dann tatsächlich nur die Dateien, die vor mehr Tagen geändert oder gelöscht wurden. Bei der Angabe "0" findet keine Löschung statt. Die automatische Löschung ist vor allem dann ein Risiko wenn z.B. aufgrund von Systemfehlern das Tagesdatum sehr weit in der Zukunft liegt. = Einschränkungen = Das Script wurde nur für unten gelisteten Dateisysteme getestet. Ein Einsatz von NFTS oder FAT als Zieldateisystem ist nur eingeschränkt möglich. ||<-3 rowclass="titel"> Getestete Dateisysteme || || FS || inkrementell || Hinweise || || ext2 || '''Ja'''||<|4> Praktisch alle UNIX-artigen Dateisysteme unterstuetzen [wikipedia:Hard_Link: Hardlinks]. Im Zweifel hilft eine kurze Suche nach dem Dateisystem und dem Stichwort ''hardlinks''. Je nach der Implementation der Hardlinks, verbrauchen einige Dateisysteme u.U. mehr Speicherplatz als andere. || || ext3 || '''Ja''' || || ext4 || '''Ja''' || || vzfs/unionfs || '''Ja''' || || HFS+ || '''Ja''' || Bei extern angeschlossenen Festplatten deaktiviert OS X standardmäßig die Benutzerrechteverwaltung, was inkrementelle Backups unmöglich macht. Diese kann man allerdings von Hand wieder aktivieren. || || FAT32 || Nein || Backups sind mit diesem Skript auch auf FAT32-Ziele möglich, jedoch nicht inkrementell. || || NTFS (ntfs-3g) || Nein ||<|2> NTFS unterstützt seit Windows 2000 Hardlinks und stellt die entspr. Funktionen per API zur Verfügung. Der ntfs-3g-Treiber nutzt diese Funktionen jedoch nicht. Startet man das Skript allerdings unter Windows aus [wikipedia:Cygwin:] heraus, sind inkr. Backups möglich. || || NTFS (Windows) || '''Ja''' || = Sichern über SSH = Das Script ermöglicht auch das Sichern von Daten von einem entfernten Rechner per [:SSH:]. Hierfür sind neben den korrekten Angaben für Quelle und Ziel nur Benutzername und Rechnername erforderlich. Zur automatischen Sicherung ist der Austausch von [:SSH#Authentifizierung-ueber-Public-Keys: SSH-Keys] notwendig. Auf dem zu sichernden Rechner muss ein SSH-Server laufen und der Benutzer benötigt ausreichende Rechte auf dem Zielsystem. Das Script arbeitet hierbei nur in eine Richtung, um auch für externe Sicherungen inkrementell arbeiten zu können. = neue Funktion - Überprüfen des Mountpoints = Über den Parameter "MOUNTPOINT" kann zur Laufzeit des Scripts geprüft werden ob das externe Medium eingebunden ist. Sollte es nicht eingebunden sein, so wird kein Backup durchgeführt. Wird kein Mountpoint ausgewählt so wird auf jeden Fall ein Backup durchgeführt. = zusätzliche Pakete = Folgende Pakete sollten bei Bedarf installiert werden [4]: * '''rsync''' * '''openssh-server''' = Das Script = Zuerst öffnet man einen Texteditor [2] und kopiert den folgenden Text hinein: {{{ #!/bin/bash # Simple backup with rsync # SOURCES and TARGET must end with slash SOURCES="/root/ /etc/ /home/ /boot/" TARGET="/media/backup/" MOUNTPOINT="" LOGFILE="/root/backup.log" EXPIREDAYS=0 RSYNC="--delete" #SSHUSER="user" #SSHHOST="hostname" #SSHPORT=22 ### do not edit ### /bin/date > $LOGFILE MOUNTED=$(/bin/mount | /bin/fgrep "$MOUNTPOINT"); if [ -z "$MOUNTPOINT" ] || [ -n "$MOUNTED" ]; then if [ -e $TARGET ]; then LASTBACKUP=$(/bin/ls -d $TARGET[[:digit:]]* 2>> $LOGFILE | /usr/bin/sort -r | /usr/bin/head -1) fi TODAY=$(/bin/date +%y%m%d) if [ $EXPIREDAYS -gt 0 ]; then EXPIRED=$(/usr/bin/find $TARGET[[:digit:]]* -maxdepth 0 -ctime +$EXPIREDAYS 2>> $LOGFILE) for EX in $(/bin/echo $EXPIRED) do /bin/echo "rm -rf $EX " >> $LOGFILE /bin/rm -rf $EX done fi for SOURCE in $(/bin/echo $SOURCES) do if [ "$LASTBACKUP" ]; then INC="--link-dest=$LASTBACKUP$SOURCE" fi if [ "$SSHUSER" ] && [ "$SSHHOST" ] && [ "$SSHPORT" ]; then SSH="ssh -p $SSHPORT -l $SSHUSER"; SOURCEDIR="$SSHHOST:$SOURCE"; else SOURCEDIR=$SOURCE; fi /bin/mkdir -p $TARGET$TODAY$SOURCE >> $LOGFILE echo "/usr/bin/rsync -e \"$SSH\" -av $SOURCEDIR $RSYNC $INC $TARGET$TODAY$SOURCE " >> $LOGFILE 2>> $LOGFILE; /usr/bin/rsync -e "$SSH" -av $SOURCEDIR $RSYNC $INC $TARGET$TODAY$SOURCE >> $LOGFILE 2>> $LOGFILE; done else /bin/echo "$MOUNTPOINT not mounted" >> $LOGFILE fi }}} Die Datei wird z.B. unter dem Namen '''/root/backup.sh''' gesichert. = Installation und Ausführung = Das Script benötigt Ausführrechte. Diese mit chmod vergeben und das Script starten. {{{#!vorlage Befehl sudo chmod 755 /root/backup.sh sudo /root/backup.sh }}} Das Script kann z.B. in CRON-Abläufe eingebunden werden, womit es automatisiert ausgeführt wird. Eine Protokollierung der Aktionen ist in der Logdatei vorgesehen, die jedoch täglich überschrieben wird. Bei manueller Ausführung werden keine Meldungen ausgegeben. Sämtliche Informationen werden in der Logdatei gespeichert. = Erklärungen = Das Script erwartet genau einen Eintrag für das Ziel und einen bzw. mehrere Einträge für die Quellen. Sämtliche Pfade sind mit "/" zu beenden. Für das Sichern von entfernten Rechnern können optional ein SSH-Benutzer und ein SSH-Host angegeben werden. Der Kommentar "#" ist dann entsprechend zu entfernen. = RSYNC-Optionen = Das Backupscript nutzt [:rsync:] für die Synchronisation der Verzeichnisse. Über die Variable '''RSYNC''' kann die Sicherung z.B. eingeschränkt werden. {{{#!vorlage Befehl --delete gelöschte Dateien werden auch in der Sicherung gelöscht (hat nur Auswirkungen bei mehreren Sicherungsläufen pro Tag) --exclude=.* sämtliche Punkt-Dateien und Punkt-Verzeichnisse werden nicht gesichert --exclude=.mozilla Anwendungsdaten von Mozilla/Firefox werden nicht gesichert (z.B. Browser-Cache) }}} {{{#!vorlage Hinweis Das Script überprüft nicht, ob im Zielverzeichnis genügend freier Speicher vorhanden ist. Fehler bei den Eingabeparametern fängt das Script nicht ab. Fehlerhafte Angaben können das System zerstören, da die Aktionen als "root" ausgeführt werden. }}} = Externes Backup bei FAT-Partitionen = Für ein Backup auf einem externen Medium mit einem abweichenden Dateisystem kann ein beliebiges Tagesarchiv z.B. mit TAR leicht gesichert werden. {{{#!vorlage Befehl tar cvzf /media/extern/080122.tar.gz /media/backup/080122 }}} Dabei ist aber zu beachten, dass FAT Dateisysteme nur Dateien bis zu einer Größe von 4 GB erlauben. Ansonsten müssen mehrere TARs erstellt, oder ein Einzelnes gesplittet werden. = Daten zurücksichern = Die Daten können einfach mit Betriebssystemmitteln ([:Shell/cp:cp], [:rsync:]) bei Bedarf zurückkopiert werden. # tag: Shell, Sicherheit, Backup