Crmgo Blog

Datei-Backups mit rdiff-backup

Datei-Backups mit rdiff-backup

Eines meiner Lieblings-Themen ist der Aufbau von Backup-Systemen. Es hat sich so ergeben, dass ich fest daran glaube, dass ein korrekt konfigurierter Backup-Prozess das Leben eines Systemadministrators erheblich erleichtert. rdiff-backup ist ein System, das es ermöglicht, Änderungen zu speichern und den Zustand jeder beliebigen gespeicherten Datei zu einem bestimmten Zeitpunkt wiederherzustellen…

Datei-Backups mit rdiff-backup

Eines meiner Lieblingsthemen ist die Erstellung von Backup-Systemen. Es hat sich so ergeben, dass ich fest daran glaube, dass das Leben eines Systemadministrators mit einem korrekt konfigurierten Backup erheblich erleichtert wird. rdiff-backup ist ein System, das es ermöglicht, Änderungen zu speichern und den Zustand jeder gespeicherten Datei zu jedem Zeitpunkt wiederherzustellen, zu dem ein Backup erstellt wurde. Wie der Name rdiff-backup bereits andeutet, basiert dieses System auf den Prinzipien von rdiff. rdiff-backup speichert die Änderungsverlaufshistorie, sodass ein Rollback zu jedem beliebigen Zeitpunkt möglich ist. Der Hauptvorteil besteht darin, dass rdiff-backup Backups auf einen Remote-Server ermöglicht.
Zusammenfassend lässt sich sagen, dass rdiff-backup ein relativ einfaches System ist: Es ist nicht übermäßig komplex, dennoch funktional.
Wir werden ein Remote-Backup-System aufbauen, wobei server1 auf server2 gesichert wird.

Beginnen wir mit der Installation von rdiff-backup.

yum install rdiff-backup (das EPEL-Repository ist erforderlich), alternativ kann die RPM-Datei von pkgs.org heruntergeladen werden.

Abhängigkeiten:

Installed:
rdiff-backup.x86_64 0:1.2.8-5.el6

Dependency Installed:
librsync.x86_64 0:0.9.7-15.el6 pylibacl.x86_64 0:0.5.0-1.el6
pyxattr.x86_64 0:0.5.0-1.el6

 

Die Installation erfolgt ohne unnötige Rückfragen. Ein weiterer wichtiger Punkt: Wenn Sie auf einen Remote-Server sichern, muss rdiff-backup auch auf diesem Remote-Server installiert sein.
Der nächste Schritt beim Aufbau des Backup-Systems ist die Erstellung eines speziellen Benutzers, unter dem das gesamte Backup-System ausgeführt wird. Dieser Benutzer benötigt keine Passwortauthentifizierung. Daher antworten wir auf die Frage „adduser Use password-based authentication? [yes]“ mit „no“.
Der Dialog zur Benutzererstellung sieht wie folgt aus:

adduser backup

Der Benutzer muss auf beiden Servern identisch angelegt werden.
Der nächste Schritt: Da rdiff-backup über SSH arbeitet, generieren wir Authentifizierungsschlüssel.
Wie man SSH-Schlüssel für die passwortlose Authentifizierung generiert, habe ich bereits in dem Artikel SSH, passwortloser Zugriff beschrieben. Der Vollständigkeit halber gehen wir diesen Schritt jedoch im Detail durch.
Auf dem Server server1 (dem Quellserver, der gesichert werden soll) generieren wir die Schlüssel.
Zuerst wechseln wir zum Benutzer backup:

su backup

Und führen ssh-keygen aus:

ssh-keygen

Verlassen Sie nun su, indem Sie STRG+D drücken.
Kopieren Sie den öffentlichen Schlüssel auf den Server server2:

scp /home/backup/.ssh/id_rsa.pub hilik@server2.hilik.org.ua:

Fügen Sie auf dem Server server2 den öffentlichen Schlüssel in /home/backup/.ssh/authorized_keys ein oder fügen Sie ihn hinzu, falls es sich nicht um den ersten Schlüssel handelt:

cat ~/id_rsa.pub >> /home/backup/.ssh/authorized_keys

Nun bleibt der letzte Schritt: Die Konfiguration des Backups selbst. Zuerst bereiten wir auf dem Remote-Server (server2) das Verzeichnis für die Backups vor:

mkdir /storage/backup

Für das Backup verwende ich das Skript /root/bin/rdiff-backup.sh, das alle Daten auf den Backup-Server sichert. Es sieht wie folgt aus:

#!/bin/sh
#Определяем имя сервера который бекапим, нужно для создания иерархии в бекап директории на удаленном сервере
HOST_NAME=`/bin/hostname -s`
#Адрес сервера на который будем бекапить
REMOTE_HOST='server2'
#Пользователь от имени которого будем бекапить
USER='backup'
#Директория на удаленном сервере в которой создаются бекапы
PREFIX='/storage/backup'
#Директории которые необходимо бекапить
WHAT='/etc /usr/local/etc /root /var/cron /sys/i386/conf /usr/local/www'
#Главный цикл бекапа
for i in $WHAT
do
        `/usr/local/bin/rdiff-backup --remote-schema 'ssh -i /home/$USER/.ssh/id_rsa -C %s rdiff-backup --server' --create-full-path --exclude-device-files --exclude-fifos --exclude-sockets --exclude-symbolic-links -b $i $USER@$REMOTE_HOST::/$PREFIX/$HOST_NAME$i`
        echo "/usr/local/bin/rdiff-backup --remote-schema 'ssh -i /home/$USER/.ssh/id_rsa -C %s rdiff-backup --server' --create-full-path --exclude-device-files --exclude-fifos --exclude-sockets --exclude-symbolic-links -b $i $USER@$REMOTE_HOST::/$PREFIX/$HOST_NAME$i"
done

Nun müssen wir dieses Skript in den Cron einfügen. Es muss als Root ausgeführt werden:

0 1 * * * /root/bin/rdiff-backup.sh

Die Sicherungsphase ist damit abgeschlossen. Die Backups werden auf dem entfernten Server in dem Verzeichnis gespeichert, das Sie angegeben haben. In diesem Verzeichnis wird ein Unterverzeichnis mit dem Namen des Servers erstellt, und dort wird das Backup abgelegt. Dort befinden sich Dateien mit dem aktuellen Zustand, dem Zustand zum letzten Zeitpunkt der Sicherung sowie Änderungsprotokolle.
Um neue Server hinzuzufügen, müssen Sie lediglich einen Benutzer erstellen, Schlüssel generieren und das Skript bereitstellen.

Nun zur Wiederherstellung. Wenn Sie Dateien im aktuellen Zustand benötigen, können Sie diese einfach aus dem Backup kopieren. Wenn Sie jedoch einen bestimmten Zeitpunkt wiederherstellen möchten, müssen Sie rdiff-backup im Wiederherstellungsmodus verwenden.
Beispiel: Wiederherstellung von /etc des Servers server1 im Verzeichnis /home/hilik/restore/etc.old für den Zustand vor 5 Tagen.

rdiff-backup --remote-schema 'ssh -i /home/backup/.ssh/id_rsa -C %s rdiff-backup --server' -r 5D backup@server2::/usr/local/share/backup/server1/etc /home/hilik/restore/etc.old

Dieses Verfahren könnte man natürlich in ein Skript auslagern oder einen Alias für einen Teil des Befehls definieren, aber zum Glück muss ich Dateien nicht so oft auf einen Zustand von vor einigen Tagen zurücksetzen.
Damit ist die Konfiguration von rdiff-backup abgeschlossen. Dieses System läuft bei mir seit einiger Zeit reibungslos, und ich habe keine Probleme mit seiner Nutzung festgestellt.

Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.