Backup Extern
Mein Backup Konzept beteht aus mehreren Teilen. Die wichtigen Daten der Arbeitscomputer werden per Resillio Sync auf den MediaPC synchronisiert und von dort per Duplicati auf eine externe Festplatte gespielt (Offline Backup). Das NAS holt sich per ssh/rsync (Online Backup) Daten vom MediaPC und kopiert sie auf den internen Speicher des NAS. Bei Bedarf werden auch noch Daten ins Internet (Offside Backup) gesichert z.B. auf Google Drive oder Microsoft OneDrive. Damit sollte ich die Anforderungen 3 Kopien, 2 Datenträger, 1 außer Haus erfüllt sein. Die Arbeitscomputer haben Windows drauf der MediaPC Ubuntu Linux, das NAS Debian Linux daher haben wir auch unterschiedliche Betriebssysteme und verringern, dass bekannte Sicherheitslücken auf einer Plattform überall genutzt werden können.
Das Backup Programm Duplicati erfüllt auch die folgenden Punkte:
- Integritätsprüfung (Daten wieder herstellbar, Metadaten Check)
- Verify (Bit zu Bit Vergleich mit Original)
- Monitoring (Protokolle nach Backup prüfen)
- Keine proprietären Archivformate (Zip, 7-Zip)
Installation von Mono
Für Duplicati wird Mono benötigt, daher nehmen wir das Repository vom Hersteller, dem Mono-Project.
sudo apt install gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
sudo apt-get install mono-devel gtk-sharp2
echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update
sudo apt-get install mono-devel gtk-sharp2
Installation Duplicati
Nachdem die Vorraussetzungen vorhanden sind kann man nun Duplicati installieren, leider hat das Projekt kein eigenes Repository, daher muss man das Paket manuell runterladen. Bei der Installation gibt es Fehler, dass Abhängigkeiten noch nicht installiert sind, dies kann man anschließend mit "fix-broken" korrigieren.
wget https://updates.duplicati.com/beta/duplicati_2.0.5.1-1_all.deb
sudo dpkg -i duplicati_2.0.5.1-1_all.deb
sudo apt --fix-broken install
sudo nano /etc/default/duplicati
sudo dpkg -i duplicati_2.0.5.1-1_all.deb
sudo apt --fix-broken install
sudo nano /etc/default/duplicati
DAEMON_OPTS="--webservice-port=8200 --webservice-interface=any --webservice-allowed-hostnames=*"
sudo systemctl enable duplicati
sudo systemctl start duplicati
sudo systemctl start duplicati
Ziellaufwerk einbinden (manuell)
Da mein Ziellaufwerk eine externe Festplatte (2TB) ist, möchte ich diese auf ein bestimmtes Verzeichnis einbinden lassen.
sudo mkdir /media/Backup
sudo blkid -o list -w /dev/null
sudo mount /dev/sdg1 /media/backup
Mit blkid kann man die UUID rausfinden und damit eine eindeutige identifikation für das Laufwerk. Das Laufwerk ist als ntfs formatiert um auch von einem Windows Rechner auf das externe Backup zuzugreifen. Aktuell wird das Laufwerk noch per Hand gemountet, dies soll zukünftig automatisiert beim Anschluss geschehen. Siehe Ziellaufwerk einbinden (automatisch).
Verbindung über Web
Über einen beliebigen Brower eine Verbindung zum Duplicati Server aufbauen und in meinem Fall mit der Seite http://glotze:8200 verbinden.
Dort kann man seine Sicherung einrichten.
- Zuerst einen Titel plus kurze Beschreibung.
- Auf die Verschlüsselung verzichte ich, da die Daten auf einer externen Festplatte liegen und so einfacher wiederhergestellt werden können.
- Dann das Zielverzeichnis ausgewählt /media/Backup/ und dann die Quellverzeichnisse auswählen.
- Da die externe Festplatte nicht immer verfügbar ist muss auf eine automatische Sicherung verzichtet werden.
- Wenn man symbolische Links verwendet sollte man unter Punkt 5 "Optionen für Profis" mit der Option symlink-policy festlegen wie Duplicati damit umgeht. Ich möchte das Duplicati dem symbolischen Link folgt "Follow" und damit die Daten an diesem Ort in das Backup einbezieht.
- Die Stückelung habe ich von 50MB auf 200MB erhöht damit weniger ZIP Dateien entstehen.
- Auf der externen Festplatte sollen 3 Sicherungen aufgehoben werden.
Ziellaufwerk einbinden (automatisch)
Um das externe USB Laufwerk automatisch einbinden zu können müssen ein paar Regeln für Systemd geschrieben werden.
1. Mount-Unit
Die Regel muss unter /etc/systemd/system abgelegt werden und heist bei mir media-Backup.mount. Der Name muss anscheinend dem Pfad entsprechen. Überprüfen kann man dies mit dem systemd-escape Kommando.
sudo blkid
/dev/sdg1: LABEL="Backup" UUID="3620CAEA20CAAFE3" TYPE="ntfs" PARTUUID="bf2fb91f-01"
cd /etc/systemd/system
systemd-escape --suffix=mount --path /media/Backup
systemd-escape --suffix=mount --path /media/Backup
media-Backup.mount
sudo nano media-Backup.mount[Unit]
Description=Mount backup drive
[Mount]
Where=/media/Backup
What=/dev/disk/by-partuuid/bf2fb91f-01
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start media-Backup.mount
sudo systemctl status media-Backup.mount
sudo systemctl start media-Backup.mount
sudo systemctl status media-Backup.mount
Durch daemon-reload liest Systemd neue Dateien ein und dann kann man den Service starten und mit Status kontrollieren, ob er funktioniert.
2. Automount-Unit
Die Automount-Regel muss ebenfalls unter /etc/systemd/system abgelegt werden und hat den Namen media-Backup.automount.
cd /etc/systemd/system
sudo nano media-Backup.automount[Unit]
Description=Automount backup drive
[Automount]
Where=/media/Backup
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start media-Backup.automount
sudo systemctl enable media-Backup.mountsudo systemctl enable media-Backup.automount
Mit "enable" wird Systemd angewiesen, beide Services auch nach einem Neustart auszuführen. Ein automatisches mounten sollte nun schon funktionieren, evtl. muss man vorher das bereits eingebunden Laufwerk mit sudo umount /media/Backup trennen.
3a. Duplicati-Client
Damit man Duplicati von der Konsole steuern kann gibt es von Hause aus das Programm duplicati-cli. Dieses ist aber völlig unabhängig von der Weboberfläche und aktualisiert, die dortigen Daten nicht. Wenn man also über die Konsole ein neues Backup gestartet hat, wird dies nicht in der Weboberfläche angezeigt. In die Lücke springt das Programm duplicati-client (Version 0.5.7).
Dieses kann man sich aus Git holen und installieren
sudo apt-get install git
cd /opt
sudo git clone https://github.com/pectojin/duplicati-client
cd duplicati-client
pip3 install -r requirements.txt
sudo ln -s /opt/duplicati-client/duplicati_client.py /usr/bin/duc
duc
cd /opt
sudo git clone https://github.com/pectojin/duplicati-client
cd duplicati-client
pip3 install -r requirements.txt
sudo ln -s /opt/duplicati-client/duplicati_client.py /usr/bin/duc
duc
Duplicati Client
Connect to Duplicati remotely or locally and manage them through the CLI.
To begin log into a server:
duc login https://my.duplicati.server
or see --help to see information on usage
Nachdem man den Client installiert hat muss man sich einloggen und kann dann verschiedene Befehle ausführen. Die Befehle login, run, logout nutze ich dann für das Skript, welches beim Anstecken der Festplatte ausgelöst werden soll.
duc login http://glotze:8200
duc list backups
- Offline Backup:
ID: '4'
duc get backup 4
- Offline Backup:
ID: '4'
Last run:
Duration: 00:05:01
Started: 12/02/2021
Stopped: 12/02/2021
Local database: /root/.config/Duplicati/GKSETXNFOT.sqlite
Size:
Backend: 948,56 GB
Local: 1.014,86 GB
Versions: 3
duc run 4
Backup scheduled
duc logoutLogging out...
3b. Service-Unit
Wenn man möchte kann man dann auch noch einen Service einrichten der das Backup automatisch startet.
cd /etc/systemd/system
sudo nano my-Backup.service
[Unit]
Description=Backup Service
[Install]
WantedBy=media-Backup.mount
[Service] ExecStart=/home/icke/Scripts/backup_duplicati.sh
sudo systemctl daemon-reloadsudo systemctl enable my-Backup.serviceIn Kombination mit dem Duplicati-Client reicht ein einfaches Shell-Skript um das Backup auzulösen. Als Beispiel könnt ihr mein Skript hier downloaden. Am Ende des Skripts hab ich noch das Laufwerk ausgehangen. Dafür wird empfohlen, den Automount/Mount-Service zu stoppen. Das Skript gibt es hier zum Downloadund es muss mit chmod +x ausführbar gemacht werden. Wenn man das WakeUp/Shutdown Skript nutzt muss man dort noch das Unterprogramm "backupActive()" auf seine Backup Nummer anpassen,sonst fährt der MediaPC runter während das Backup läuft.Wenn man das Skript temporär ausschalten will kann man einfach den Service stoppen mit sudo systemctl disable my-Backup.service.