rsync sichernDer Befehl: rsync -aE --delete ~/Documents/ /Volumes/Backup/Documents/
-E ist der macOS-spezifische Teil, und ohne die Option gehen erweiterte Attribute und Ressourcenzweige still verloren.
-a ist der Archivmodus: rekursiv und mit Erhalt von Zugriffsrechten, Eigentümern, Zeitstempeln und symbolischen Links. Diese Option kennt jeder.-E erhält erweiterte Attribute und Ressourcenzweige von macOS. Finder-Tags, Quarantäne-Markierungen, eigene Symbole und ein guter Teil der App-Metadaten liegen dort. Ohne die Option sind sie weg, und nichts sagt es dir.--delete entfernt Dateien vom Ziel, sobald sie an der Quelle weg sind. Das macht die Kopie zum Spiegel, und über diese Option solltest du am gründlichsten nachdenken.-v für Ausgaben, -n für einen Probelauf. Mach mit einem Befehl, der --delete enthält, beim ersten Mal immer einen Probelauf.~/Documents kopiert den Ordner in das Ziel, und du bekommst /Volumes/Backup/Documents/Documents. ~/Documents/ kopiert seinen Inhalt, und das meinst du fast immer. In einem Befehl, der auch --delete enthält, löscht ein Fehler hier alles andere, was im Ziel lag.--exclude für Dinge, deren Kopie sich nicht lohnt: --exclude '.DS_Store', --exclude 'node_modules', --exclude 'Library/Caches'.macOS bringt eine Version von rsync mit, die dafür reicht. Wenn du die neuere Originalversion willst, gibt es sie über Homebrew, und sie geht unter macOS besser mit ACLs um.
rsync lässt das Ziel wie die Quelle aussehen. Das ist eine Kopie, und eine Kopie ist kein Verlauf. Ein Dokument, das du letzten Dienstag gelöscht hast, ist beim nächsten Lauf aus dem Backup verschwunden. Ebenso die gute Version einer Datei, die du inzwischen überschrieben hast, und alles, was Ransomware erwischt hat, bevor der Auftrag lief.
--delete wegzulassen löst das nicht. Du bekommst ein Ziel, das jede Datei sammelt, die du je hattest, weiterhin mit genau einer Version von jeder, und keine Möglichkeit zu erkennen, was aktuell ist.
--link-destDer übliche Trick ist, bei jedem Lauf einen neuen Ordner mit Datum anzulegen und unveränderte Dateien per Hardlink mit dem vorherigen zu verknüpfen, sodass identische Dateien nichts kosten:
DEST=/Volumes/Backup
TODAY=$(date +%F)
rsync -aE --delete \
--link-dest="$DEST/latest" \
~/Documents "$DEST/$TODAY"
ln -snf "$DEST/$TODAY" "$DEST/latest"
Jetzt sieht jeder Ordner mit Datum wie ein vollständiges Backup aus, und nur die geänderten Dateien belegen Platz. Ungefähr auf dieser Idee baut Time Machine auf.
Zwei Einschränkungen. Hardlinks bedeuten, dass die Kopien nicht unabhängig sind: Eine Beschädigung im zugrunde liegenden Block betrifft jeden Snapshot, der ihn teilt. Und es braucht ein Dateisystem mit Hardlinks, also funktioniert es auf einem externen Laufwerk und in den meisten Cloud-Ordnern nicht.
rsync verschlüsselt nichts im gespeicherten Zustand. Wenn das Ziel ein Cloud-Ordner oder ein Laufwerk ist, das das Haus verlässt, verschlüssele, bevor du schreibst:
tar -cJf - ~/Documents | openssl enc -aes-256-cbc -pbkdf2 -out /Volumes/Backup/documents.tar.xz.enc
Das ist ein einziges undurchsichtiges Archiv: kein inkrementelles Kopieren, keine einzelne Datei wiederherstellen, ohne alles zu entpacken, und nur eine Passphrase zwischen dir und allem. Dieser Kompromiss wiegt schwer, und an dieser Stelle hören die meisten auf, selbst zu basteln.
cron gibt es unter macOS noch, aber launchd ist der unterstützte Weg. Eine plist in ~/Library/LaunchAgents/ mit einem StartCalendarInterval führt dein Skript täglich aus. macOS fragt nach Festplattenvollzugriff für das, was es ausführt, weil das Lesen von Dokumente und Schreibtisch geschützt ist.
Was auch immer du planst, lass das Ergebnis irgendwohin schreiben, wo du es wirklich siehst, und prüf, ob das Backup aktuell ist:
find /Volumes/Backup -type f -newermt '-7 days' | head
Ein stiller Auftrag ist das Problem. Er stoppt nicht mit einem Fehler auf deinem Bildschirm, er stoppt nachts vor vier Monaten.
Die Befehle oben decken das Kopieren ab. Was sie nicht abdecken, ist das, was du an dem Tag wirklich willst, an dem etwas schiefgeht: Versionen, die einen Spiegellauf überstehen, Verschlüsselung, die trotzdem das Wiederherstellen einer einzelnen Datei erlaubt, ein Zurücklesen, das jedes Stück gegen seinen Hash prüft, und etwas, das dir sagt, wenn das Laufwerk eine Woche lang nicht gesehen wurde.
Jedes davon ist ein Wochenende Skripten, und danach musst du es selbst pflegen. Copy Shelter ist dieselbe Idee mit diesen Teilen eingebaut, und es ist kostenlos für einen Ort.
rsync-Kopie Finder-Tags?Weil -a allein unter macOS keine erweiterten Attribute überträgt. Füg -E hinzu. Wenn du auch ACLs brauchst, nimm -A und denk über die Homebrew-Version nach, die sie zuverlässiger handhabt als die des Systems.
Ja, entweder auf eine aktivierte Freigabe unter /Volumes oder über SSH direkt auf das NAS. Über SSH ist es schneller und hängt nicht davon ab, dass die Freigabe aktiviert ist, und viele NAS haben rsync eingebaut.
sudo?Nicht für deinen eigenen Home-Ordner. Du musst aber Terminal oder dem, was launchd ausführt, den Festplattenvollzugriff erlauben, bevor macOS es Dokumente, Schreibtisch und Downloads lesen lässt.
--delete gefährlich?Es tut genau, was du verlangt hast, und das ist der gefährliche Teil. Mach beim ersten Mal einen Probelauf mit -n und stell sicher, dass der Zielpfad stimmt: Ein Tippfehler mit --delete, der auf den falschen Ordner zeigt, entfernt dort Dateien.
Ja, genau dafür ist rsync da. Führ es erneut aus, und es überträgt nur, was fehlt oder sich geändert hat. Füg --partial hinzu, damit eine halb übertragene große Datei behalten und fortgesetzt wird.
Weiter: So prüfst du, ob die Kopie wirklich lesbar ist.