Backup-Skript
Einleitung
Dieses Skripts erstellt fortlaufende inkrementelle hardlink-basierte Backups wichtiger persönlicher Daten auf einer oder mehreren externen Festplatten.
Neben zu den zu sichernden Daten werden noch folgende Systeminformationen gespeichert, um das Wiederherstellen des Systems zu erleichtern:
Modell und Seriennummern aller angeschlossenen Festplatten
die Partitionierung und aktuelle SMART-Attribute derselbigen
die Liste aller installierten Pakete
Am Ende des Backups zeigt das Skript die Unterschiede zwischen den aktuellen SMART-Attribute und vorherigen Stand, sofern dieser verfügbar ist. Dadurch läßt sich der Ausfall von Backup-Festplatten frühzeitig erkennen.
Durch die Nutzung von Hardlinks entsteht der Eindruck, daß in jeder Sicherung sämtliche Dateien enthalten sind. Dabei wird bei unveränderten Dateien lediglich ein neuer Hardlink auf das bereits existierende Original angelegt und somit werden dafür weder Daten kopiert noch Speicherplatz dedundant belegt.
Das Skript wurde für folgende Randbedingungen geschrieben:
es läuft als Nutzer root um das Verzeichnis
/etc
mit zu sichernes wird nur ein Backup pro Kalendertag unterstützt
manuelles Einbinden und Lösen der Backup-Festplatte - die Festplatten sind nur für die Zeit des Backups mit dem Computer verbunden
manuelles Löschen alter nicht mehr benötigter Backups
manuelle Änderungen von Dateien im Backup betreffen wahrscheinlich mehrere Stände, da gleiche Dateien nur als Hardlinks auf ein Original verweisen
Warum noch ein Skript für Backups mit rsync?
Das Skript in der jetzigen Form entstand nach einem Unfall, bei dem ich den vorderen Bereich meiner Systemplatte überschreiben habe. Meine persönlichen Daten nicht direkt betroffen, denn sie befanden sich auf einer der hinteren Partitionen.
Aber wie war die Festplatte partitioniert und welche Pakete waren nun wirklich installiert?
Dieses Ereignis war der Anlaß das Skript um den jetzigen Funktionsumfang zu erweitern.
Installation
Das Skript benötigt keine Installation. Es empfiehlt sich sowohl Eigentümer und Gruppe auf root zu setzen, wie auch die Rechte restriktiv zu setzen, damit nur der Eigentümer das Skript lesen, ändern und ausführen kann.
Es bietet sich an das Skript entweder unter /root/bin
oder unter /usr/local/sbin
zu plazieren.
Installation nach /root/bin
(sofern vorhanden):
bzw. bei der Installation nach /usr/local/sbin
:
Konfiguration
Das Backup mit dem Skript backup.sh
wird sowohl im Skript, als auch in den bei FILE_INCLUDE_PATTERN
und FILE_EXCLUDE_PATTERN
spezifizierten Dateien konfiguriert.
Die in den beiden Dateien FILE_INCLUDE_PATTERN
und FILE_EXCLUDE_PATTERN
verwendeten Filter sind in der Manpage von rsync ausführlich beschrieben.
Beispiel
Dieses Beispiel zeigt die Konfiguration zum Sichern von /etc
, /root
und /home
. Das Backup-Skript beiden Dateien mit den Filtern zum Einbinden bzw. Weglessen von Dateien und Verzeichnissen liegen ebenfalls unter /root/bin
.
Konfiguration im Skript:
# cat backup.sh [...] # Basisverzeichnis fuer alle Backupverzeichnisse BASE_DIR="/media/disk" # Listen mit Dateimustern, die ins Backup sollen oder auch nicht FILE_EXCLUDE_PATTERN="/root/bin/backup.excl" FILE_INCLUDE_PATTERN="/root/bin/backup.incl" # Kommando um die Paketliste zu erzeugen # für RPM-basierte Systeme: rpm -qa --last # für ArchLinux: pacman -Qqen # für Debin: dpkg --get-selections CMD_PKG_LIST="pacman -Qqen" # Backup-Partition komplett lesend pruefen # Zum Deaktivieren den Wert einfach auskommentieren #RUN_DD="ja" # Zusaetzliche Optionen fuer rsync: # --checksum - rsync jede Datei bitweise, das ist langsam, aber das Backup # ist danach 100% korrekt und lesbar #RSYNC_OPTS="--checksum" # # ==== KEINE AENDERUNGEN UNTERHALT DIESER ZEILE ==== # [...]
Zu sichernde Dateien und Verzeichnisse (FILE_INCLUDE_PATTERN
):
Nicht zu sichernde Dateien und Verzeichnisse (FILE_EXCLUDE_PATTERN
):
Erste Schritte
Skript installieren und konfigurieren
-
Backup-Festplatte einbinden
-
Nur vor die erste Sicherung: ein leeres Verzeichnis anlegen
-
Backup starten
# ./backup.sh -= backup.sh - Version 1 =- (c) 2013-2016 Carsten Grohmann Sichere alle Aenderungen zwischen der letzten Sicherung in /media/disk/20160402 und jetzt. Die neue Sicherung erfolgt nach /media/disk/20160415 Zu sicherende Dateien und Verzeichnisse: /root/bin/backup.incl Nicht zu sicherende Dateien und Verzeichnisse: /root/bin/backup.excl Druecken Sie Enter zum Fortfahren oder Strg+C zum Abbrechen [...]
-
Nur nach der ersten Sicherung: das leere Verzeichnis wieder löschen
-
Einbindung der Backup-Festplatte wieder lösen
Struktur der Sicherung
Den Zeitpunkt des Backups sieht man am Zeitstempel des Backupverzeichnisses.
Sicherungsverzeichnis
# ll /media/disk/ insgesamt 0 drwxr-xr-x 6 root root 48 5. Jul 2010 20100705 drwxr-xr-x 6 root root 48 8. Jul 2010 20100708 drwxr-xr-x 6 root root 48 13. Sep 2010 20100913 [...] drwxr-xr-x 6 root root 48 17. Jul 2015 20150717 drwxr-xr-x 6 root root 48 15. Dez 18:20 20151215 drwxr-xr-x 7 root root 61 3. Mär 21:23 20160303 drwxr-xr-x 7 root root 61 27. Mär 11:42 20160327 drwxr-xr-x 7 root root 61 2. Apr 19:06 20160402
Verzeichnisinhalt einer Sicherung
Jedes Backup enthält ein Unterverzeichnis status
. Dieses enthält die oben erwähnten Systeminformationen.
# ll /media/disk/20160402/ insgesamt 20 drwxr-xr-x 88 root root 8192 2. Apr 17:16 etc drwxr-xr-x 6 root root 56 23. Nov 2013 home drwxr-x--- 11 root root 4096 2. Apr 19:01 root drwxr-xr-x 2 root root 4096 2. Apr 19:06 status # ll /media/disk/20160402/status/ insgesamt 44 -rw-r--r-- 1 root root 1078 2. Apr 19:06 block_devices -rw-r--r-- 1 root root 3498 2. Apr 19:06 packages -rw-r--r-- 1 root root 133 2. Apr 19:06 partition.SAMSUNG_SSD_830__S0VNEA428 -rw-r--r-- 1 root root 241 2. Apr 19:06 partition.ST1000DM003-1CH1_Z1D6X5RG -rw-r--r-- 1 root root 1656 2. Apr 19:06 smart_attrs.SAMSUNG_SSD_830__S0VNEA428 -rw-r--r-- 1 root root 2622 2. Apr 19:06 smart_attrs.ST1000DM003-1CH1_Z1D6X5RG -rw-r--r-- 1 root root 235 2. Apr 19:06 smart_error.SAMSUNG_SSD_830__S0VNEA428 -rw-r--r-- 1 root root 235 2. Apr 19:06 smart_error.ST1000DM003-1CH1_Z1D6X5RG
Wiederherstellen
Backup-Festplatte einbinden
Die Verzeichnisstruktur des durchstöbern und die Dateien zurück an den gewünschten Platz kopieren
Einbindung der Backup-Festplatte wieder lösen
Download
Dateiname | backup.sh [Signatur] | |
Größe | 9 KByte | |
Version | 3 | |
Sprache | Shell (Bash) |
Änderungsprotokoll
-
Version 3 - 2024-07-20
Hardlinks mit "rsync --link-dest" statt "cp -al" erzeugen
-
Version 2 - 2018-07-05
Erkennung umbenannter Dateien durch rsync --fuzzy
-
Version 1 - 2016-04-15
erste veröffentliche Version
Copyright & Lizenz
The MIT License (MIT)
Copyright (c) 2013-2024 Carsten Grohmann
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.