Raspi als Backupserver fürs NAS?

  • Wenn man rsync zum backup manuell macht (so wie ich - leider - in vielen faellen), dann empfiehlt es sich eigentlich immer mehrere durchlaeufe zu machen:

    rsync -avn --delete --stats /<quelle>/ /<ziel>/

    Das -n heisst probelauf, da sieht man dann was alles gemacht WUERDE. Da kann man dann kontrollieren ob das alles ok ist.

    Danach mache ich dann immer

    rsync -av --progress --stats /<quelle>/ /<ziel>/

    Also erstmal kopieren, noch nicht loeschen. Solange man halt genug platz auf dem ziel hat.

    Danach kann man nochmal einen Probeelauf mit loeschen machen und sich wirklich nochmal ganz genau fragen, ob das was da geloescht werden soll auch ok. ist. Bei meistens halt sachen die ich umbenannt habe. Und dann den loeschlauf ohne -n und mit --delete.

  • WO ich schon mal dabei bin:

    Das grosse Problem bei rsync ist also, das halt nicht vernuenftigen support hat, wenn man auf der quellplatte aufraeumt und dann z.b. dateien/directories umbenennt. Nicht nur wird dann normalerweise ueberfluessig die datei mit neuem namen kopiert und die mit altem namen geloescht, man muss auch immer selbst versuchen zu kapieren, das da bloss was umbenannt wurde.

    Gab mal einen patch fuer rsync dieses Problem halbwegs zu beheben, aber der ist glaube nicht im rsync mainline drin, und es ist insgesamt auch schwierig. Da muss man schon mehr rumbasteln um dieses Problem richtig zu loesen. Habe dazu leider nie die Zeit gefunden.

    Wenn man Backup auf eine remote location macht, also wenig bandbreite hat, dann kann man schon mal folgende tricks machen:

    Bei jedem BACKUP macht man folgendes:

    rsync -aH --delete --stats /<quelle>/ /<ziel>/
    rm -fr /<quelle>/.BACKUP
    cp -al /<quelle>/ /<quelle>/.BACKUP
    rsync -aH --delete --stats /<quelle>/ /<ziel>/

    Nach jedem backup kann man dann beliebig dateien / directories umbenennen, und ab dem zweiten backup lauf werden dann diese dateien nicht mehr unnoetigerweise auf das remote ziel kopiert.

    Der trick wie das funktioniert ist das man in /<quelle>/.BACKUP sogenannte linux-hard-links aller dateien angelegt hat (mit "cp -al", das 'l' macht hard links). Und dieser baum mit den originalen Namen wurde ja auch auf /<ziel>/ mitkopiert. Wenn also beim naechsten backup das erste rsync laeuft mit option 'H', dann veruecksichtigt rsync diese hard links. Das .BACKUP auf /<quelle>/ und /<ziel>/ ist ja noch identisch, damit hat dann rsync fuer alle dateien die auf dem ziel existieren die sogenannten inode nummern, und wenn er dann in der quelle einen dateinamen sieht den es auf dem ziel nicht gibt, aber der halt dieselbe inode nummer hat wie eine datei in .BACKUP, dann uebertreaegt rsync nicht mehr den inhalt der datei, sondern nur die inode nummer zum ziel.

    Die drei folgenden befehle rm/cp/rsync daten dann halt bloss auf quelle und ziel das .BACKUP up auf den neuesten stand, in vorbereitung des naechsten backups.

  • Vielen Dank für deine Mühe @te36

    Ich habe mir jetzt erstmal eine neue SD und die HDD bestellt. Am Wochenende geht es dann wohl an die eigentliche Raspbian Installation, das Mounten der Backupplatte und der NAS Freigaben.
    Danach werde ich dann mal schauen, dass ich mich in die rsync Doku etwas einlese und dann, wenn ich das etwas besser verstehe, werde ich deine Ausführungen hier berücksichtigen. :)

  • So, ich melde mich mal wieder.

    Status:
    Pi rennt mit Raspbian
    USB Platte ist gemounted
    NAS Freigaben sind zum Teil gemounted - und da kommt mein Problem:

    Ich habe 5 Freigaben (Sven, Public, Pictures, Music und Video)
    Dabei sind die ersten 4 Freigaben direkt auf dem NAS, Video hingegen befindet sich auf der externen Platte die per USB ans NAS angeschlossen ist.

    Und diese Freigabe bekomme ich über die fstab nicht gemounted, per direktem Mount-Befehl geht es aber.

    fstab:

    mount:

    Code
    sudo mount -t cifs -o username=****,password=**** //192.168.1.3/Video /home/pi/mount/Video

    Ergo ist was mit der Zeile
    //192.168.1.3/Video /home/pi/mount/Video cifs username=****,password=****,uid=1000,gid=1000 0 0
    nicht in Ordnung

    Hat jemand eine Idee was da nicht stimmt?

  • mount:

    Code
    sudo mount -t cifs -o username=****,password=**** //192.168.1.3/Video /home/pi/mount/Video

    Ergo ist was mit der Zeile
    //192.168.1.3/Video /home/pi/mount/Video cifs username=****,password=****,uid=1000,gid=1000 0 0
    nicht in Ordnung

    Hat jemand eine Idee was da nicht stimmt?

    Wenn die Video share nicht gemountet ist, dann probier die mal manuell zu mounten mit:

    mount /home/pi/mount/Video

    und dann zeig mal die Fehlermeldung. Bei dieser version mountest Du zwar manuell, aber der mount befehl nimmt die information die er in der /etc/fstab findet.

    Zum vergleich halt mal:

    umount /home/pi/mount/Pictures
    mount /home/pi/mount/Pictures

    Das sollte ja fehlerfrei gehen.

    Wenn Du auf diese Art auch Video gemountet kriegst, dann ist das eine zeitkritische sache oder so, das es nur beim booten nicht geht, da wirds dann schwieriger diagnose zu machen. Hoffentlich kannst Du den kompletten bootlog sehen und mal pasten, was der mount waehrend des bootens sagt.

  • Wie gesagt, manuell kann ich Video mounten:
    sudo mount -t cifs -o username=****,password=**** //192.168.1.3/Video /home/pi/mount/Video

    [Tante Edit sagt:]
    Dein Vorschlag funktioniert, mit
    mount /home/pi/mount/Video
    wird es anstandslos direkt gemouted

    Würdes es, wenn es eine Zeitgeschichte ist, gehen den obigen Befehl in ein Script zu verpacken und nach dem Booten ablaufen zu lassen? Dann wäre das Problem ja gelöst

  • Ich denke das hat sich erledigt.
    Ich habe den Mountpoints in der fstab das hier hinzugefügt:
    ,noauto,x-systemd.automount
    Damit wird zwar nicht direkt gemounted aber beim Zugriff ist alles sofort da.Ausprobiert mit einem 'cp' und die Test-Datei wurde vom Mount auf den Pi kopiert.

  • Mal ein kurzes Statusupdate:
    NAS Freigaben werden per Automount zuverlässig eingebunden
    Erstes manuelles Backup befindet sich auf der USB Platte
    USB Platte wird nach 10 Minuten Idle automatisch mittels HD-Idle in den Standby versetzt

    Nun grübele ich gerade, ob ich für das automatisierte Backup mit einer einfachen cp Anweisung arbeiten oder doch rsync benutzen soll.

    Einerseits tut sich auf den Freigaben änderungstechnisch nur recht selten etwas, da würde cp vollkommen reichen.
    Andererseits ist mir aufgefallen wie viel Redundanz sich zum Teil auf den Freigaben tummelt. Da sind alte Komplettsicherungen von lange verstorbenen Laptops drauf in denen sich Kram befindet der dann in jeder dieser Sicherungen vorhanden ist.
    Wenn ich da dann etwas lösche, bleibt der Müll ja dennoch auf dem Backup wenn ich nur mit cp arbeite.
    Andererseits benötige ich keine x Optionen alte Backupstände wieder herzustellen.

    *kopfkratz*

  • Jo, loeschen ist ein argument fuer rsync. Ich wuerde immer erst mit rsync arbeiten. CP habe ich letztlich fuer fette transfers verwendet, weil es schneller ist. Abr dann immer mit rsync nachkontrolliert, weil ich dem mehr vertraue.

    Ja, die doppelten dateien von mehreren sicherungen sind nervig. Ich hatte ja schon mal geschrieben wie man etwas von dem problem mit hard-links und 4-mal rsync hintereinander loesen kann.

    Die andere Loesung ist es, nachtraeglich deduplizierungsscript zu bauen. Aka: macht checksums von allen dateien, sobald da zwei dateien gefunden wurden, die gleiche checksum haben werden die komplett vergleichen, und wenn sie gleich sind, dann wird eine kopie geloescht und auf die andere hard gelinkt.
    Da muss man dann nur aufpassen, dass man nie wieder auf eine dieser dateien schreibt, weil man dann auch gleich die andere mitschreibt. Also zur sicherheit auch nicht auf dasselbe backup-dir wieder inkrementell backup machen. Oder halt CoW (btrfs/zfs).

    Betrachte das als option, viele jahre lang am schreiben von scripts spass zu haben ;-))

  • Ich verstehe deine Antwort nicht zu 100% @te36

    Ich fragte eigentlich nach einer Einschätzung zu rdiff-backup.

    Aber egal, ich habe mich jetzt zunächst doch für rsync entschieden.
    So sieht mein Script bisher aus:

    Bash
    #!/bin/sh
    rm /home/pi/rsync-log.txt
    rsync --delete -auPb /home/pi/mount/ /home/pi/backup --backup-dir=/home/pi/backup/bckpdir --log-file=/home/pi/rsync-log.txt && echo "Backup durchgefuehrt" | mail -s "Backup" [email]@[adresse.tld]
    find /home/pi/backup/bckpdir/* -mtime +30 -exec rm {} \;

    So habe ich, da das Backup eh nur alle 2 Wochen laufen soll, immer noch zusätzliche 2 Wochen + 2 Tage um evtl. versehentlich gelöschte Dateien wieder herzustellen.
    Das reicht mir :)

    Nun das morgen noch in die crontab und ich sollte durch sein...

  • Hah, dachte rdiff-backup was ein typo ;)

    Kannte rdiff-backup nicht, und die doc gibt sich viel muehe schick auszusehen, erklaert mir aber nicht wirklich was da an differentiellen backups genau gespeichert wird. Muesste also damit mal rumspielen um zu verstehen, was es macht.

    Was Du da mit rsync und backup machst sieht schon ganz gut aus. Hilft glaube ich halt nicht wenn ich aufraeume und directories mit fetten mediendateien umbenenne. Dann wird das alles nochmal kopiert.

  • Dann wird das alles nochmal kopiert.

    Japp, das ist richtig und der frühere Inhalt wird dann in 'bckpdir' gespeichert. Nach 30 Tagen verschwindet es aber auch wieder daraus.

    In meinem aktuellen Szenario ist das durchaus in Ordnung. Aktuelle Belegung des NAS ist ca 1,5TB bei 6TB die zur Verfügung stehen, die Backup-Platte hat 5TB.
    Sollte es eng werden, kann ich ja weitere 5TB zum Backup hinzufügen und die Freigaben, die sehr viel Platz beanspruchen, auf die zusätzliche Platte verlegen. So what? :D

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!