Backup: Ubuntu 20.04 Homeserver/NAS, Teil 7
Dieser Artikel ist Teil der Reihe selbstgebauter Ubuntu 20.04 Homeserver/NAS
Im letzten Kapitel geht es um die Datensicherung. Der Homeserver dient als zentrale Ablage für eine Vielzahl wichtiger Dateien. Eventuell sogar von mehreren Personen. Ein Verlust der Daten wäre daher verheerend.
Das RAID-System schützt zwar vor dem Verlust der Daten durch einen Hardwaredefekt an einer Festplatte, vor versehentlichem Löschen von Dateien schützt es jedoch nicht. Auch im unwahrscheinlichen Fall, dass zwei Festplatten gleichzeitig ausfallen, kann das RAID die Daten nicht mehr schützen. Ein Backup ist also in jedem Fall Pflicht.
In diesem Kapitel werden zwei mögliche Backuplösungen vorgestellt. Beide haben ihre Vor- und Nachteile. Je nachdem welche Anforderungen man hat, kann man beide Lösungen zusammen oder nur eine einsetzen.
Zuerst wird die Einrichtung eines Backups mit der Software Duplicati beschrieben. Duplicati besitzt eine grafische Benutzeroberfläche, die sich über einen Webbrowser von jedem beliebigen Rechner im Netzwerk bedienen lässt. Das macht die Nutzung von Duplicati sehr einfach und intuitiv. Außerdem unterstützt Duplicati eine vielzahl von Speicherlösungen und bietet außerdem die Möglichkeit Backups zu verschlüsseln. Damit ist Duplicati die ideale Lösung um verschlüsselte Onlinebackups mit Ubuntu zu machen.
Duplicati wird seit vielen Jahren sehr aktiv entwickelt. Allerdings konnte sich der Entwickler bisher noch nicht dazu entschließen eine Version als final zu bezeichnen. Ich bin mittlerweile skeptisch, ob das jemals passieren wird. Stattdessen findet die Entwicklung in sogenannten experimentellen Versionen statt. In regelmäßigen Abständen wird eine stabile und zuverlässige Version als Beta gekennzeichnet. Die Beta-Versionen findet man auf der Homepage zum Download und ich setze sie seit vielen Jahren ohne größere Probleme ein.
Zwei Nachteile von Duplicati möchte ich trotzdem erwähnen. Erstens: Es ist relativ langsam, insbesondere dann, wenn sich viele Dateien geändert haben, oder wenn alte Backups aufgeräumt werden. Ich empfehle daher, mehrere Backupjobs einzurichten, anstatt einem großen. Beispielsweise einen Backupjob für Dokumente, einen für Bilder, einen für Musik etc. Dadurch wird das einzelne Backup schneller abgeschlossen. Außerdem ist dies ein Vorteil, wenn es zum zweiten Nachteil kommt. Wenn ein laufendes Backup unterbrochen wird, beispielsweise durch einen Stromausfall oder bei Verbindungsproblemen mit dem Cloudspeicher, sind die lokale Datenbank und die Datenbank im Backupspeicher nicht mehr synchron. In diesem Fall muss die Datenbank von Duplicati repariert werden, was, je nach Datenmenge durchaus einen ganzen Tag dauern kann.
Das zweite Backup ist ein lokales Backup auf eine externe Festplatte. Zum Sichern der Daten wird Rsync verwendet, was als Standardwerkzeug bei Ubuntu bereits vorinstalliert ist. Rsync ist alt, bewährt, robust und sehr zuverlässig.
Durch ein kleines Backupskript werden die Daten vom Homeserver auf eine externe Festplatte kopiert. Dabei wird für jedes Backup ein eigener Ordner erstellt und mit Datum versehen. Rsync arbeitet dabei mit sogenannten Hardlinks. Das bedeutet, dass die gleichen Daten nur einmal übertragen und auf der Festplatte gespeichert werden. Auch wenn es so aussieht, als wäre die Datei in mehreren Backups gespeichert, liegt sie tatsächlich nur einmal auf der externen Festplatte. Das spart Speicherplatz und sorgt für eine schnelle Übertragung. Ein weiterer Vorteil dieser Sicherung ist, dass die Daten auf der externen Festplatte genau so vorliegen wir auf dem Homeserver. Das bedeutet, dass die externe Festplatte einfach an einen anderen Rechner angeschlossen werden kann und man ganz bequem mit dem Dateimanager auf die Daten zugreifen kann. Ohne, dass eine spezielle Backupsoftware nötig wäre um die Daten wiederherzustellen.
Ich verwende eine Kombination aus beiden Methoden. Mit Duplicati sichere ich die wichtigsten Daten verschlüsselt in der Cloud. Damit sind diese Daten auch im Falle eines Wohnungsbrands oder Diebstahls noch sicher. Zusätzlich sichere ich sämtliche Daten auf externen Festplatten, da auf diese Weise auch große Datenmengen schnell und günstig gesichert werden können.
Die Installation von Duplicati
Zuerst wird der Downloadlink für die aktuelle (Beta-)Version für Ubuntu von der Duplicati Downloadseite benötigt. Um diese zu erhalten, macht man einen Rechtsklick auf den Button zum Download der Ubuntuversion und wählt „Adresse des Links kopieren“ (je nach Browser unterschiedlich) im Kontextmenü. Damit wird der Downloadlink in die Zwischenablage kopiert. Über die Kommandozeile auf dem Homeserver wird die Installationsdatei dann heruntergeladen.
cd
wget https://updates.duplicati.com/beta/duplicati_X.X.X.X-X_all.deb
Im nächsten Schritt wird das heruntergeladene .deb Installationspaket installiert. Da Duplicati in C# geschrieben ist, wird zur Ausführung unter Linux das Mono-Framework benötigt, welches automatisch aus den Ubuntu Paketquellen mitinstalliert wird. Die Installation erfolgt mit folgendem Befehl.
sudo apt install ./duplicati_*.deb -y
Standardmäßig erlaubt Duplicati den Zugriff auf das Webinterface nur von derselben Maschine aus. Aber natürlich soll es möglich sein, von einem beliebigen Computer aus auf das Webinterface zugreifen. Um dies zu ermöglichen, muss die Konfigurationsdatei /etc/default/duplicati angepasst werden. Dazu wird diese wieder zuerst mit einem Texteditor geöffnet.
sudo nano /etc/default/duplicati
In der Konfigurationsdatei werden in der Zeile DAEMON_OPTS die benötigten Optionen konfiguriert, indem die Zeile wie folgt ergänzt wird.
DAEMON_OPTS="--webservice-port=8200 --webservice-interface=any"
Die Konfigurationsdatei sieht nun so aus.
Jetzt wird der Duplicati-Dienst noch aktiviert, sodass die Software nach einem Neustart automatisch wieder aktiv ist. Außerdem wird Duplicati gestartet, sodass es direkt einsatzbereit ist.
sudo systemctl enable duplicati.service sudo systemctl start duplicati.service
Nun kann Duplicati über den Webbrowser über folgende Adresse aufgerufen werden, wobei die IP-Adresse natürlich an das eigene System angepasst werden muss.
http://192.168.30.153:8200
Die Konfiguration von Duplicati
Beim ersten Aufruf von Duplicati sieht man einen Sicherheitshinweis. Man kann zuerst ein Passwort für die Benutzeroberfläche festlegen, um zu verhindern, dass Unbefugte Zugriff auf die Einstellungen und die Backups bekommen. Da die Konfigurationsoberfläche von Duplicati von jedem Computer im Netzwerk erreicht werden kann, ist es sinnvoll hier ein Passwort festzulegen. Dies kann aber auch später in den Einstellungen jederzeit nachgeholt werden.
Die Konfigurationsoberfläche und das Einrichten von Backups mit Duplicati ist selbsterklärend und kinderleicht. Aus diesem Grund verzichte ich auf eine Anleitung zum Einrichten des Backups.
Man sollte bei der Einrichtung darauf achten die Ordner /etc sowie /mnt/storage zu sichern. Im ersten liegen die Konfigurationsdateien des Systems, im zweiten unsere Daten. Auch das Sichern des /home Verzeichnisses ist in der Regel sinnvoll.
Außerdem ist es sinnvoll die Konfiguration des Backups z.B. auf einem USB-Stick zu sichern, oder sich diese für den Fall der Fälle per E-mail zu senden. Damit ist es möglich die Duplicati Konfiguration auf einem neu aufgesetzten System einfach wieder zu importieren.
Hierzu klickt man auf den Namen des Backups, in diesem Fall „Home“. Damit klappen weitere Optionen herunter. Hier findet man unter dem Punkt Konfiguration -> Exportieren die Möglichkeit sich alle Einstellungen des Backupjobs „Home“ als Datei herunterzuladen.
Lokales Backup auf eine externe Festplatte
In diesem Kapitel wird ein lokales Backup auf eine externe Festplatte mit Rsync konfiguriert. Gegenüber einem Cloudbackup und einer komplexen Software wie Duplicati hat dies einige Vorteile. Rsync ist ein Kommandozeilentool um Dateien und Ordner zu kopieren, das sich umfangreich konfigurieren lässt. Es ist alt, bewährt und sehr zuverlässig. Mit Rsync werden die Daten die gesichert werden auf eine externe Festplatte kopiert. Dort kann man ohne Zusatzsoftware einfach auf die Daten zugreifen. Bei einem Totalausfall des Homeservers kommt man so schnell und einfach an seine Daten, indem man die externe Festplatte einfach an einen anderen Computer anschließt.
Verglichen mit einem Cloudbackup ist ein lokales Backup sehr schnell, sodass auch große Datenmengen gesichert werden können. Außerdem ist Speicherplatz auf einer externen Festplatte auf Dauer sehr viel billiger als Cloudspeicher. Jedenfalls dann, wenn man große Datenmengen speichern möchte.
Standardmäßig werden bei einem Ubuntu Server (im Gegensatz zum Desktop Ubuntu) USB-Laufwerke nicht automatisch eingebunden. Damit die Backupfestplatte beim Einstecken automatisch in das Dateisystem eingebunden wird, wird das Programm usbmount installiert. Rsync ist bei Ubuntu bereits vorinstalliert, sodass dieses nicht installiert werden muss.
USBMount installieren und konfigurieren
USBMount ist zwar in den Paketquellen von Ubuntu vorhanden, allerdings hat diese Version einen Fehler und funktioniert mit Ubuntu 20.04 nicht. Zwar wurde der Fehler im Quellcode von USBMount behoben, allerdings basiert die Version in den Paketquellen nicht auf dem aktuellen Code. Aus diesem Grund muss man eine funktionierende Version von USBMount für Ubuntu 20.04 aus dem aktuellen Quellcode selber bauen, was jedoch auch mit ein paar Befehlen erledigt ist.
Der erste Befehl wechselt zurück in das Homeverzeichnis des aktuellen Benutzers. Anschließend wird Git installiert und der Quellcode von USBMount heruntergeladen.
cd ~
sudo apt install git
git clone https://github.com/rbrito/usbmount
Dann werden zusätzliche Pakete installiert, die benötigt werden, um das Installationspaket aus dem Quellcode zu bauen.
sudo apt install debhelper build-essential lockfile-progs -y
Nun wechselt man in das Verzeichnis, in welchem der heruntergeladene Quellcode gespeichert wurde. Anschließend wird aus diesem Code ein Installationspaket für USBMount gebaut.
cd usbmount
dpkg-buildpackage -us -uc -b
Jetzt kann die funktionierende Version von USBMount für Ubuntu 20.04 aus dem erstellten Paket installiert werden,
sudo dpkg -i ../usbmount*.deb
Usbmount ist direkt nach der Installation einsatzbereit. Steckt man eine USB-Festplatte ein, wird dieses automatisch in /media/usb in das Dateisystem eingebunden. Steckt man mehrere USB-Laufwerke an, so werden die Einbindungspunkte nummeriert, also /media/usb1, /media/usb2 usw.
Standardmäßig unterstützt usbmount die Dateisysteme vfat ext2 ext3 ext4 und hfsplus. Wenn die Backupfestplatte nur für den Homeserver genutzt wird sollte sie mit dem Dateisystem ext4 formatiert werden, da dies das Standarddateisystem von Ubuntu und vielen anderen Linuxsystemen ist. Wenn man die Festplatte unbedingt auch auf Windows PCs nutzen möchte und die Festplatte somit NTFS formatiert sein muss, muss dieses Dateisystem in der Konfigurationsdatei von usbmount aktiviert werden.
Dazu wird die Datei /etc/usbmount/usbmount.conf mit dem Texteditor geöffnet und in die Zeile FILESYSTEMS= noch ntfs hinzugefügt, sodass die Zeile wie folgt aussieht.
FILESYSTEMS="vfat ext2 ext3 ext4 hfsplus ntfs"
Ich würde davon jedoch abraten, da NTFS viele Funktionen, die von einem Linux-System verwendet werden, nicht unterstützt. Beispielsweise gehen sämtliche Dateiberechtigungen verloren, wenn man eine Datei auf einer NTFS-formatierten Festplatte speichert. Wenn man Daten aus einem solchen Backup auf den Homeserver zurückspielt, müssen alle Dateiberechtigungen (also welcher User Eigentümer ist, wer schreiben und ausführen darf etc.) wieder manuell gesetzt werden.
Wer nur einen Windows-PC verwendet, aber trotzdem auf die Daten einer mit ext4 formatiert Festplatte zugreifen möchte, der kann dazu beispielsweise Ubuntu Live auf dem Computer starten. Dieses startet direkt von einem USB-Stick und muss nicht installiert werden.
Jetzt kann die USB-Festplatte eingesteckt werden. Ob die externe Festplatte erkannt und eingebunden wurde, kann man mit folgendem Befehl prüfen.
df -h
Wenn alles geklappt hat, ist die externe Festplatte unter /media/usb oder /media/usb0 aufgelistet.
Einfaches Backupskript mit Rsync einrichten
Nun wird das Skript, welches die Backups mit Rsync erstellt, eingerichtet. Um Ordnung zu halten, wird zuerst ein Ordner erstellt, in welchem das Skript gespeichert wird. Dann wird die Datei erstellt, die zunächst noch leer ist. Um das Skript komfortabel ausführen zu können, wird die Datei ausführbar gemacht.
mkdir ~/skripte
touch ~/skripte/backup.sh
chmod +x ~/skripte/backup.sh
Die leere Datei wird nun mit einem Texteditor geöffnet.
nano ~/skripte/backup.sh
Dann wird folgender Inhalt in den Texteditor eingefügt.
#!/bin/sh
date=`date "+%Y-%m-%dT%H_%M_%S"`
BACKUPSOURCE='/home /etc /mnt/storage/shares'
BACKUPDIR=/media/usb
rsync -av --log-file=$BACKUPDIR/rsync.log --link-dest=$BACKUPDIR/latest $BACKUPSOURCE $BACKUPDIR/back-$date
rm -f $BACKUPDIR/latest
ln -s back-$date $BACKUPDIR/latest
Mit dieser Konfiguration werden die Ordner /home, /etc und /mnt/storage/shares nach /media/usb gesichert. Dabei wird für jedes Backup ein eigener Ordner erstellt und mit dem aktuellen Datum benannt. Beide Pfade können ergänzt oder angepasst werden.
Wichtig: Wenn das Skript ausgeführt wird, muss auch eine externe Festplatte unter /media/usb vorhanden sein. Ansonsten wird das Backup auf die Systemplatte geschrieben.
Das Praktische an Rsync ist, dass es mit sogenannten Hardlinks arbeitet. Das bedeutet, dass eine Datei die bereits auf die externe Festplatte kopiert wurde, bei einem neuen Backup nicht erneut kopiert wird. Eine identische Datei benötigt also nur einmal Speicherplatz, auch wenn sie in mehreren Backups enthalten ist.
Alte Backups werden mit diesem Skript nicht gelöscht. Das ist durchaus beabsichtigt, da es nicht ungefährlich ist, ein Programm automatisch alte Backups löschen zu lassen. Das bedeutet aber auch, dass irgendwann der Speicherplatz auf der externen Festplatte ausgeht. Wenn dieser Fall eintritt, kann man einfach die ältesten Order löschen.
Lokales Backup manuell oder automatisch ausführen
Man kann sich nun für einen der beiden Wege entscheiden. Entweder führt man das lokale Backup in regelmäßigen Abständen manuell aus, oder man lässt es automatisch ausführen. Beide Varianten haben ihre Daseinsberechtigung.
Manche Leute haben beispielsweise eine externe Festplatte in einem feuerfesten Safe um die Backups bei einem Brand zu schützen. In diesem Fall wird die Festplatte beispielsweise einmal pro Monat an den Homeserver angeschlossen und das Backup manuell ausgeführt. Dafür wird dann folgender Befehl ausgeführt, nachdem die Festplatte angesteckt wurde.
sudo ~/skripte/backup.sh
Wenn die externe Festplatte dauerhaft mit dem Homeserver verbunden ist, dann kann man das Backup auch automatisieren. Hierzu wird ein Cronjob erstellt, der in regelmäßigen Abständen den Backupbefehl ausführt. Damit das Skript die nötigen Rechte hat um auch Systemdateien zu sichern, muss es als Root ausgeführt werden. Dies wird in der Datei /etc/crontab konfiguriert, die mit einem Texteditor geöffnet wird.
sudo nano /etc/crontab
Für ein tägliches Backup wird folgende Zeile vor der abschließenden Raute eingefügt. Anstatt USERNAME muss der eigene Benutzername eingetragen werden.
@daily root /home/USERNAME/skripte/backup.sh
Alternativ zu @daily steht auch @weekly für ein wöchentliches, oder @monthly für ein monatliches Backup zur Verfügung.
Mit Strg+O wird die Datei wieder gespeichert und mit Strg+X der Texteditor geschlossen. Von nun an wird einmal täglich ein Backup auf die externe Festplatte erstellt.
Schluss
Damit steht nun ein vielseitiges und zuverlässiges System bereit, das kommerziellen fertig NAS-Systemen in Funktionalität und Flexibilität in nichts nachsteht. Im Gegenteil. Da es sich beim selbstgebauten Homeserver/NAS um einen normalen Computer mit einem vollwertigen Server-Betriebssystem handelt, sind den Einsatz- und Funktionsmöglichkeiten kaum Grenzen gesetzt. Der Vorteil eines selbstgebauten Homeservers ist eben, dass sich dieser speziell auf die eigenen Bedürfnisse ausrichten lässt.
Diese Anleitung soll es insbesondere Einsteigern erleichtern ein solches System aufzusetzen und zu betreiben. Die Einsatzmöglichkeiten gehen jedoch weit über die in dieser Artikelreihe beschriebenen Möglichkeiten hinaus. So kann beispielsweise mit Tiny-Tiny RSS ein RSS-Reader eingerichtet werden der mit der App auf dem Smartphone synchronisiert wird. Damit hat mein ein komfortables Tool zur Verfügung um sich über das Weltgeschehen und andere Dinge auf dem Laufenden zu halten. Mit Tiny Tiny RSS lassen sich Dienste wie Feedly oder Inoreader mit einem eigenen System ersetzen.
Oder man installiert sich eine Wallabag Instanz, und ersetzt einen read it later Dienst wie Pocket oder Instapaper. Mit Samba lässt sich sogar ein vollwertiger Windows-Domänencontroller einrichten, wie er in Unternehmensnetzwerken verwendet wird. Somit bietet das System reichlich Potential um mit den Kenntnissen und Fähigkeiten der Administratoren und Administratorinnen zu wachen.
Übersicht: Ubuntu 20.04 Homeserver/NAS, Teil 1
Installation des Betriebssystems: Ubuntu 20.04 Homeserver/NAS, Teil 2
Grundkonfiguration: Ubuntu 20.04 Homeserver/NAS, Teil 3
Ordnerfreigaben: Ubuntu 20.04 Homeserver/NAS, Teil 4
Nextcloud: Ubuntu 20.04 Homeserver/NAS, Teil 5
Plex Mediaserver: Ubuntu 20.04 Homeserver/NAS, Teil 6
Backup: Ubuntu 20.04 Homeserver/NAS, Teil 7
Backup: Ubuntu 20.04 Homeserver/NAS, Teil 7 ist ein Beitrag von techgrube.de.