Es heißt ja dass ein Backup nur gut ist, wenn es auch automatisch funktioniert…
Während das bei allen Servern die ich verwalte zutrifft (die backupen sich gegenseitig und schieben die Daten in Cloudspeicher) so war das bei meinem Computer zuhause noch eher sehr altmodisch.
Ich hab halt einfach „dann und wann“ eine USB-Festplatte angesteckt und die Daten rübergezogen.
Da das nicht sonderlich automatisch ist musste eine einfache (Linux) LowCost Lösung her!
Eigentlich ists ganz einfach:
Ein Raspberry Pi der durchgehend läuft hat eine externe Festplatte angeschlossen. Der Pi weckt nun einmal die Woche meinen PC auf, synchronisiert alle Daten von ihm auf die externe Platte und schickt ihn danach wieder schlafen.
Die Vorteile:
- Es geht automatisch, somit kann mans nicht vergessen und hat immer ein relativ aktuelles Backup.
- Die Platte steckt nicht dauerhaft im PC, somit kann der PC selbst nicht auf die Platte zugreifen und sein eigenes Backup zerstören.
- Der PC kann ausgeschalten bleiben.
- Man nutzt nicht irgendeine teure NAS sondern hat alles selbst in der Hand.
Die Nachteile:
- Es ist nur eine externe Festplatte, man hat also keine Redundanz, ist die Platte kaputt ist das Backup futsch.
- Es ist in der aktuellen Version keine Möglichkeit eingebaut um informiert zu werden wenn etwas nicht geklappt hat (z.B. per Mail).
- Wir haben immer nur ein Backup, und das findet am Sonntag statt. Besser wäre es natürlich ein ordentliches Großvater, Vater, Sohn Backup zu haben welches mehrere Versionen mit Deduplizierung vorhält. Rsync kann das theoretisch mit dem Parameter ‚–link-dest‘.
Hier nun die Umsetzung, zuerst muss mein PC (mit Ubuntu 16.04) Wake on LAN können damit der Raspberry Pi ihn hochfahren kann. Hierfür muss der Computer per LAN-Kabel verbunden sein.
In die Datei ‚/etc/default/halt‘ kommt rein:
NETDOWN=no
Das sorgt dafür dass das Netzwerk beim Shutdown nicht komplett runtergefahren wird und die LAN-Schnittstelle noch auf Pakete reagieren kann.
Und in die Datei ‚/etc/default/tlp‘ kommt rein:
WOL_DISABLE=N
Das sorgt dafür dass das PowerManagment von Ubuntu dass Wake-On-LAN nicht deaktiviert.
Jetzt müssen wir nur noch WOL beim booten aktivieren, das machen wir in der Datei ‚/etc/rc.local‘, und zwar kommt da vor dem ‚exit 0‘ folgendes rein:
sleep 5 ethtool -s enp3s0 wol g
Natürlich müssen wir davor dass ‚ethtool‘ installieren:
apt-get install ethtool
Und um zu sehen ob der Befehl ‚ethtool -s enp3s0 wol g‘ das Wake-On-LAN bei meiner LAN-Schnittstelle ‚enp3s0‘ überhaupt aktiviert rufen wir ‚ethtool enp3s0‘ auf:
Settings for enp3s0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: Not reported Advertised pause frame use: No Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on MDI-X: Unknown Supports Wake-on: pg Wake-on: g Current message level: 0x0000003f (63) drv probe link timer ifdown ifup Link detected: yes
Wenn da bei ‚Supports Wake-on‘ ‚g‘ steht, so kann die Netzwerkschnittstelle auf ein Magic Packet aufwachen.
Wenn nun bei ‚Wake-on‘ auch ‚g‘ steht, so ist das aufwachen auf ein Magic Packet aktiviert.
Nun kommt Part 2, der Raspberry muss sich (als root) auf meinem PC verbinden können ohne ein Passwort anzugeben.
Also der klassische SSH-Schlüsseltausch.
Auf dem Pi erzeugen wir einen Key für seinen User root:
(also davor evtl. ’sudo -i‘ damit wir root sind)
ssh-keygen -t rsa
Damit wird die Datei ‚/root/.ssh/id_rsa.pub‘ erzeugt, deren Inhalt kopieren wir jetzt auf meinem PC in die Datei ‚/root/.ssh/authorized_keys‘.
Ist die Datei nicht da legen wir sie als root an.
Nun natürlich vom Pi aus einmal mittels ’ssh root@mycomp -p 1234′ verbinden damit die Hostinformationen ausgetauscht sind und wir wissen ob das Verbinden als root ohne Passwort auch sauber klappt.
Nachdem wir die externe Platte angesteckt haben (und im ‚dmesg‘ als ‚/dev/sda‘ identifiziert haben) wird sie mit ‚fdisk‘ partitioniert und mit ‚mkfs.ext4‘ kommt in die einzige große Partition ‚/dev/sda1‘ ein ext4 Filesystem rein.
Auf dem Pi legen wir den mountpoint ‚/media/backup‘ an, und auf der neuen Platte den Ordner ‚mycomp‘.
Nun bauen wir uns ein Script ‚/root/bin/backupcomp.sh‘ welches die Platte einhängt, meinen Rechner aufweckt, die Dateien synct und den Rechner wieder schlafen legt:
#!/bin/bash echo "Waking up" $(date) /usr/sbin/etherwake bc:xx:c5:dc:xx:f3 echo "Sleeping" $(date) sleep 60 echo "Mounting Disk" $(date) mount /dev/sda1 /media/backup echo "Syncing" $(date) rsync --delete --ignore-errors -avz --delete-excluded --exclude=/dev/ --exclude=/proc/ --exclude=/sys/ --exclude=/tmp/ --exclude=/run/ --exclude=/mnt/ --exclude=/media/ --exclude=/lost+found/ -e 'ssh -p 1234' root@mycomp:/ /media/backup/mycomp echo "Shutting down" $(date) ssh root@mycomp -p 1234 "shutdown -h now" echo "Unmounting Disk" $(date) cd / umount /dev/sda1
(Man sieht schön dass mein Computer für SSH den Port 1234 nimmt – sollte SSH bei euch noch nicht installiert sein so hilft ein ‚apt-get install openssh-server‘ und in der Datei ‚/etc/ssh/sshd_config‘ könnt ihr den Port ändern unter dem SSH horcht. Ein ’systemctl restart sshd‘ startet den SSH Dienst danach neu und der neue Port wird aktiv. Bei einem Rechner zuhause braucht man den Port eigentlich nicht groß ändern denn SSH Zugriffe kommen ja nicht durch den Router, aber schaden tut es auch nicht…)
Und das rufen wir jetzt als crontab unter dem User root (‚crontab -e‘) jeden Sonntag morgen um 1 Uhr auf:
12 1 * * 7 /root/bin/backupcomp.sh > /root/backupcomp.log 2>&1
Fertig. So einfach eigentlich 🙂
Schreibe einen Kommentar