1 Ich will keine
Dateien im Backup komprimieren
2 Wo ist die graphische
Oberfläche (GUI)?
3 Ich brauche dieses
lateLinks nicht
4 Erstellen eines Backups über ssh
(nicht NFS) auf einen entfernten Server
5 Ich will dieses
blocked file und will es für alle Dateien größer als 50 MB nutzen
6 Wie mache
ich ein vollständiges Backup meines GNU/Linux Rechners?
7 Wie installiere
ich storeBackup auf einem (Synology) NAS?
8 storeBackup auf
Raspberry Pi
9 Können
storeBackup die Hardlinks ausgehen?
FAQ 1 Ich will keine Dateien im Backup komprimieren
Ich will keine Dateien im Backup komprimieren. Wie kann ich das konfigurieren?
Beim Konfigurieren von storeBackup.pl die Option exceptSuffix auf '.*' setzen. Das ist das Suchmuster für „passt auf alles``.
Es gibt einige Gründe, warum storeBackup über die Kommandozeile anzusprechen ist:
Ich will einfach nur ein Backup auf ein externes USB Laufwerk machen und will die Option lateLinks nicht verwenden. Wie mache ich das?
Du musst Dich überhaupt nicht mit dieser Option (oder mit storeBackupUpdateBackup.pl), die für höhere Ansprüche gedacht ist, auseinandersetzen, wenn Du lateLinks nicht verwenden willst. Sieh Dir Beispiel 1 an.
Mit GNU/Linux ist es ebenfalls möglich, ein Backup über eine SSH-Verbindung laufen zu lassen. Das hat den Vorteil, dass kein (eventuell) zusätzliches Netzwerk-Dateisystem (wie bei NFS) konfiguriert werden muss.
Anstelle eines NFS-Mounts auf das Zielverzeichnis wird das Programm sshfs verwendet. Es ist für die meisten Distributionen verfügbar, kann jedoch auch von http://fuse.sourceforge.net/sshfs.html heruntergeladen werden.
Das Kommando, das entfernte Verzeichnis /var/backup auf dem Rechner chronos als User „backup`` nach /mnt/target zu mounten ist:
# sshfs backup@chronos:/var/backup /mnt/target
storeBackup.pl muss jetzt nur noch so konfiguriert werden, dass das Backup nach /mnt/target geschrieben wird. Nach dem Backup kann das Zielverzeichnis mit fusermount -u /mnt/target ausgehängt werden.
BESCHLEUNIGUNG EINES REMOTE-BACKUPS üBER SSHFS
sshfs nutzt eine eigene Netzwerkanfrage für jeden individuellen Hardlink, der gesetzt werden muss, und für jede einzelne Datei, die gelöscht werden muss. Da die Latenz (Dauer) für jede Aktion über das Netzwerk generell um einiges größer ist als für eine lokale, kann ein entferntes (Remote-) Backup ziemlich langsam sein, auch wenn die Bandbreite groß genug ist.
Aus diesem Grund empfiehlt es sich, für derartige Anwendungen von storeBackup die Optionen lateLinks und doNotDelete zu verwenden. Ihre Verwendung ermöglicht es, das Erzeugen von Hardlinks und das (spätere) Löschen lokal auf der entfernten Maschine durchzuführen. Die Verwendung von lateLinks resultiert mit sshfs generell in einer Verbesserung der Performance um den Faktor 10 bis 75, abhängig von der Anzahl der Änderungen und der Latenz des Netzwerks.
Das Vorgehen ist allgemein:
# sshfs backup@chronos:/var/backup /mnt/target
# storeBackup.pl --backupDir /mnt/target --lateLinks \ --doNotDelete [other options]
# fusermount -u /mnt/target
# ssh -T -l backup ebox.rath.org \ 'storeBackupUpdateBackup.pl --backupDir /var/backup'
# ssh -T -l backup chronos \ "storeBackupDel.pl --backupDir /var/backup [other options]"
Um das gewünschte Resultat zu bekommen, setze einfach:
checkBlocksSuffix = .* checkBlocksMinSize = 50M
Diese Konfiguration wird Blocked Files für alle Dateien mit einer Größe von mindestens 50 MB verwenden. Wenn Du das ab einer anderen Größe willst, z.B. 800KB, ändere den Werte von checkBlocksMinSize auf 800k.
Erklärung für Experten: storeBackup.pl erzeugt von der Konfiguration oben folgende interne Regel:
'$file =~ /.*$/' and '$size >= 52428800'
Du kannst daher auch direkt die folgende Regel definieren:
'$size >= &::SIZE("50M")'
um dasselbe Resultat zu bekommen.
Erzeuge als Erstes eine Konfigurationsdatei:
storeBackup.pl -g completeLinux.conf
Öffne die Konfigurationsdatei mit einem Editor Deiner Wahl und editiere die folgenden Optionen:
sourceDir = /
Setze sourceDir auf /, so dass das gesamte Dateisystem gesichert wird.
backupDir=/media/drive
Hier nehme ich an, dass die angeschlossene Festplatte für das Backup unter dem Pfad /media/drive angebunden ist. Dies muss angepasst werden, wenn sie woanders gemountet ist. Die Backups können natürlich z.B. alternativ auf einem NFS-Mount liegen. Falls Du diese Konfiguration hast, findest Du Erläuterungen zu NFS unter Konfiguration von NFS. Wenn Du das Backup über NFS machst, solltest Du auch Verwendung der Option lateLinks lesen.
Als nächstes sind die Verzeichnisse anzugeben, die nicht gesichert werden sollen. Wir müssen hier backupDir angeben, um eine Rekursion zu vermeiden.
exceptDirs= tmp var/tmp proc sys media
Füge andere Verzeichnisse, die Du nicht sichern willst (z.B. über NFS gemountete Home-Verzeichnisse), an diese Liste.
Nehmen wir weiterhin an, Du willst die Inhalte aller anderen Verzeichnisse, die tmp oder temp (groß oder klein geschrieben) heißen und sich irgendwo im Dateisystem befinden, ausschließen. Füge dann hinzu:
exceptRule= '$file =~ m#/te?mp/#i'
Um Cache-Dateien auzuschließen, werden alle Verzeichnisse mit cache im Namen (groß oder klein geschrieben) hinzugefügt. Ändere die Zeile von oben in:
exceptRule= '$file =~ m#/te?mp/#i' or '$file =~ m#cache.*/#i'
Aber jetzt gibt es das Risiko, dass vielleicht einige wichtige Dateien
nicht gesichert werden, weil sie in einem Verzeichnis mit Namen
/tmp/, /temp/ oder in einem Verzeichnis mit z.B. Cache im Namen liegen.
Aus diesem Grunde schreiben wir die Namen aller aufgrund dieser Regel
ausgeschlossenen Dateien in eine Datei, die wir nach Durchführung des
Backups überprüfen können:
writeExcludeLog=yes
Jetzt wird es in jedem Backup eine Datei
.storeBackup.notSaved.bz2 geben, in der die ausgeschlossenen
Dateien gelistet sind.
Um alle Dateitypen zu kopieren (insbesondere Block- und zeichenorientierte
Devices in /dev), setzte:
cpIsGnu=yes
Um ein vollständiges Backup durchzuführen, muss auch der Boot Sektor gespeichert werden. Das folgende Skript geht davon aus, dass dieser auf dem Laufwerk sda gespeichert ist. Dies muss eventuell an die Anforderungen Deines Systems angepasst werden. Erzeuge das Verzeichnis /backup und speichere das folgende Skript pre.sh dort:
#! /bin/sh rm -f /backup/MBR.prior mv /backup/MBR.copy /backup/MBR.prior # copy the boot loader dd if=/dev/sda of=/backup/MBR.copy bs=512 count=1 > /dev/null 2>&1 # copy back with: # dd if=/backup/MBR.copy of=/dev/sda bs=512 count=1
Setze die Rechte:
chmod 755 /backup/pre.sh
Setze precommand in der Konfigurationsdatei um das Skript aufzurufen:
precommand = /backup/pre.sh
Um während des Backup zu sehen, dass etwas passiert, setzte:
progressReport = 2000 printDepth = yes
Schau Dir die keep*-Optionen an und setze sie auf für Dich sinnvolle Werte. Außerdem solltest Du logFile auf einen für Dich passenden Werte setzen - überprüfe ebenso die anderen Einstellmöglichkeiten.
Wie immer wird das erste Backup einige Zeit brauchen, da für alle
Dateien md5-Summen berechnet werden müssen - insbesondere aber wegen
der Kompression der Dateien. Das nächste Backup wird sehr viel
schneller sein.
Nach der Durchführung des Backups solltest Du kontrollieren, welche
Dateien aufgrund der Option exceptRule nicht im Backup
sind.
Folgendes Verfahren hat zum Erfolg geführt.
Vorbereitung:
Installation:
ssh admin@
ip-des-nas
# chmod u+x /volume1/homes/admin/storeBackup/bin/*
# chmod u+x /volume1/homes/admin/storeBackup/lib/stbuMd5*
# ln -s /volume1/homes/admin/storeBackup/bin/* /usr/bin
# ipkg install md5deep
# ln -s /opt/bin/md5deep /usr/bin/md5sum
Damit sollte storeBackup lauffähig sein.
Mir wurde berichtet, dass storeBackup auf dem Raspberry Pi (raspbmc und Raspbian GNU/Linux 7) läuft. Man sollte auf Folgendes achten:
Wie immer ist das erst Backup langsam (sehr langsam), aber das nächste ist (ziemlich) schnell (natürlich abhängig von der langsamen CPU (verglichen mit heute üblicher PCs) und dem langsamen Speicher, in den geschrieben wird.
Man benötigt für jede Datei mindestens einen Inode, daher spart das Hardlinken von Null-Byte-Dateien zumindest viele Inodes. Dieses kann keine Auswirkungen haben (wenn im Dateisystem genügend statisch reserviert werden (ext)) oder tatsächlich Platz sparen, wenn das Dateisystem sie dynamisch alloziert (reiserfs, btrfs) oder wenn Du ansonsten mit einem ext-Dateisystem die statisch allozierte Anzahl von Inodes erreichst.
Einen Hardlink zu erzeugen sollte auch schneller sein als einen neuen Inode zu erzeugen.
Für storeBackup ist die Verwaltung von Hardlinks kein Problem. Es versucht, einen Hardlink zu erzeugen und, falls das nicht erfolgreich ist, wird eine neue Datei erzeugt und anschließend gegen diese verlinkt. Die Grenze für die Anzahl der Hardlinks zu erreichen bedeutet lediglich eine neue identische Datei zu erzeugen. Aufgrund dieses einfachen Algorithmus muss sich storeBackup nicht um die Anzahl der Hardlinks, die ein Dateisystem unterstützt, kümmern. Dieses Verhalten unterschiedet sich von dem typischer Unix Tools wie cp, tar oder rsync. Wenn Du mit ihnen ein Verzeichnis mit vielen Hardlinks auf ein Dateisystem kopierst, das nicht genügend Hardlinks unterstützt, bekommst Du eine Fehlermeldung (siehe auch die Erläuterung zum Program linkToDirs.pl, das Teil der storeBackup-Tools ist und dieses Problem auf die oben beschriebene Art und Weise umgeht).
Btrfs würde ich momentan (2014) nicht für Backups verwenden, weil ich es nicht für stabil genug halte. Aber nichtsdestotrotz habe ich einige Tests gemacht und das Verhalten bezüglich Hardlinks scheint sehr anders als das anderer Dateisysteme zu sein. Ich erreichte die Hardlink-Grenze - mit allen Dateien in einem Verzeichnis - es war aber möglich, weitere Hardlinks auf diese Dateien aus einem anderen Verzeichnis zu erzeugen. Aber wie auch immer - aufgrund von storeBackups simplen Algorithmus ist es auch mit btrfs effizient.
Zusammengefasst denke ich, dass es keinen Grund gibt, Null-Byte-Dateien nicht per Hardlink zu verbinden.