sphings-dev.de

AmberShelf: Platten abgleichen, ohne dass ein Trojaner mitkopiert wird

Ein Fotoarchiv wächst, aber es verändert sich kaum. Dateien kommen hinzu, geändert wird fast nie etwas, gelöscht selten und mit Absicht. Trotzdem versteht jedes übliche Abgleichsprogramm „die Quelle hat sich geändert“ als Auftrag, die Kopie nachzuziehen – genau das, was man nicht will, wenn die Quelle gerade verschlüsselt, von einem defekten Kabel zerschossen oder von einem vertippten Befehl geleert wurde. AmberShelf ist für diesen Fall gebaut.

AmberShelf Übersicht im dunklen Erscheinungsbild: eine nur lesend eingehängte Master-Platte und zwei Sicherungskopien mit Verzeichnisstand

Erst zeigen, dann tun

AmberShelf liest beide Seiten, bildet den Unterschied über SHA-256-Prüfsummen und zeigt dann, was es täte. Zeitstempel zählen dabei nicht: exFAT speichert die Zeit in Lokalzeit mit 10 ms Auflösung, und das unterscheidet sich zwischen Rechnern oft genug, um als Beweis zu taugen. Neue Dateien zu kopieren ist Alltag. Eine Datei zu ersetzen, umzubenennen oder zu löschen braucht dagegen eine Freigabe, einzeln oder gesammelt, und die Antwort wird gemerkt: freigeben, diesmal übergehen oder nie wieder fragen. So arbeitet man die Altlasten einmal ab und nicht bei jedem Lauf dieselben fünfzig Fälle.

AmberShelf Vorschau mit neuen, geänderten, umbenannten, gelöschten und nur auf der Kopie vorhandenen Dateien je Sicherungsplatte
Die Vorschau: Es wird nichts ausgeführt, bis entschieden ist.

Eine Massenänderung löst eine Notbremse aus, eingestellt nach absoluter Zahl und nach Anteil am Bestand. Gelöst wird sie nur, indem man die Zahl der betroffenen Dateien eintippt; wegklicken geht nicht. Ersetzte und gelöschte Dateien werden nicht vernichtet, sondern unter .ambershelf-trash auf der Kopie geparkt, mit dem Zeitstempel des Laufs, bis man selbst aufräumt. Eine bereute Freigabe ist damit umkehrbar.

Der Master ist schreibgeschützt – vom Kernel

Die zentrale Zusage lautet nicht „das Programm schreibt da nicht hin“, sondern: Das Dateisystem des Masters ist ro eingehängt, und die Mount-Flags werden zurückgelesen, bevor ein einziges Byte gelesen wird. Dafür gibt es eine Zweiteilung. Auf dem Host läuft ein kleiner Helfer mit Root-Rechten, der Blockgeräte auflistet, den Master nur lesend und die Kopien schreibend einhängt und die Zuordnung von Platte zu Rolle in einer Datei hält, die dem Container nicht zugänglich ist. Die Anwendung selbst läuft in einem unprivilegierten Container – ohne privileged, ohne Capabilities, ohne Gerätezugriff – und kann den Helfer über einen Unix-Socket nur bitten, einen Auftrag einzuhängen. Welches Gerät, welche Option, welche Rolle: darüber entscheidet sie nie.

Platten erkennt der Helfer über Dateisystem-UUID und Seriennummer. Ein umbenannter Ordner oder eine geklonte Platte kann deshalb keine Richtung umdrehen. Registrieren geht über den Socket nur hinzufügend, mit Absicht: Eine Rolle zu ändern oder eine Registrierung zu entfernen verlangt in dieser Version einen bewussten Befehl auf dem Host, sonst wäre Löschen und Neuanlegen ein Weg an der Regel vorbei.

Jede Kopie wird bewiesen

Jede Datei wird unter einem Temporärnamen geschrieben, auf die Platte gezwungen, zurückgelesen und geprüft; erst danach wird sie umbenannt. Ein abgebrochener Lauf hinterlässt eine Temporärdatei und nie ein halbes Foto unter dem richtigen Namen. Das ist besonders für exFAT wichtig, das kein Journal hat: AmberShelf hängt nach jedem Lauf sauber aus und weigert sich, auf einen Datenträger zu schreiben, dessen Dirty-Flag gesetzt ist. NTFS ist robuster, lässt sich unter macOS aber nur lesen; beide Dateisysteme können innerhalb eines Satzes gemischt werden.

Beschädigung erkennen, bevor sie weitergetragen wird

Jede Datei wird gegen die Kopfbytes geprüft, die ihre Endung verspricht. Ein .jpg, das nicht mehr mit FF D8 FF beginnt, ist kaputt, und genau das hinterlässt Verschlüsselung – auch die schnelle Sorte, die nur die ersten hunderttausend Bytes verwürfelt. Dazu kommen Erpresserbriefe am Dateinamen, sinnlose zweite Endungen und Massenänderungen innerhalb einer Stunde. Jeder Befund hält die Notbremse an, und es wird nichts geschrieben. Auf eine Entropie-Messung verzichtet das Projekt bewusst: JPEG und MP4 sind bereits komprimiert und sehen fast zufällig aus, „sieht verschlüsselt aus“ sagt über sie also nichts.

AmberShelf Befunde-Seite mit einer Massenänderung und dreißig Dateien, deren Kopf nicht mehr zur Endung passt, bei eingelegter Notbremse

Wer benachrichtigt werden will, trägt eine Adresse ein, die ein kleines JSON annimmt – Home Assistant, ntfy, Gotify oder ein eigenes Skript. Ein Konto irgendwo braucht es dafür nicht.

Ein großer Master, mehrere kleine Kopien

Wer ein Archiv hat, das auf keine einzelne Sicherungsplatte passt, kann den Master Ordner für Ordner auf mehrere Kopien verteilen. Der Baum beginnt auf Ordnerebene 2, Fotos/2019 ist also eine Einheit. Alles, was noch keiner Kopie zugeteilt ist, erscheint als dauerhafte Warnung; das ist der stille Fehler, der wirklich Daten kostet. Der erste Prüfsummenlauf über ein Terabyte dauert Stunden – gerechnet wird mit vier bis acht Stunden je Terabyte über USB 3 –, lässt sich aber anhalten, fortsetzen und übersteht einen Neustart des Containers mit höchstens einer verlorenen Datei.

Drei Wege, es zu betreiben

Mit voller Schreibschutz-Zusage läuft nur die Docker-Fassung auf Linux. Für macOS (12 oder neuer, Apple Silicon) und Windows (10 oder neuer) gibt es Apps mit demselben Rechenwerk und derselben Oberfläche. Sie lesen die Datenträger, die das System ohnehin eingehängt hat, brauchen keine Administratorrechte und keinen Dienst, aber sie können den Master nicht schreibschützen und sagen das auf jeder Seite offen. AmberShelf selbst schreibt nie auf den Master, aber alles andere auf dem Rechner kann es. Beide Apps lassen sich auf eine Docker-Instanz richten und sind dann ein Fenster darauf, mit der vollen Zusage dahinter. Signiert sind sie nicht: Unter macOS rechte Maustaste, „Öffnen“, unter Windows im SmartScreen-Dialog „Weitere Informationen“ und „Trotzdem ausführen“.

Installation

Die Docker-Fassung braucht einen Linux-Host mit Docker und systemd, util-linux und Kerneltreiber für das Dateisystem (exfat ab Kernel 5.7, ntfs3 ab 5.15). Das Image liegt unter ghcr.io/sphings79/ambershelf:latest für linux/amd64 und linux/arm64.

git clone https://github.com/sphings79/ambershelf.git
cd ambershelf
sudo docker/install.sh      # Helfer, systemd-Unit, Gruppe, Verzeichnisse
docker compose up -d

Die Oberfläche hört auf 127.0.0.1:8088. In 0.6.1 hat sie noch keine eigene Anmeldung; ich empfehle, sie hinter einen Reverse Proxy zu stellen und auf das eigene Netz zu beschränken, und liefere ein Traefik-Beispiel (docs/traefik-ambershelf.yml) mit. Netzfreigaben über SMB oder NFS werden nicht unterstützt, weil die Erkennung Dateisystem-UUID und Seriennummer braucht. Und: Es ist ein Einbahn-Werkzeug. Wer laufenden Abgleich in beide Richtungen sucht, soll Syncthing nehmen.

Tags

Zum Projekt

  • AmberShelf

    Einbahn-Abgleich einer Master-Platte auf eine oder mehrere Sicherungsplatten: Der Master wird vom Kernel nur lesend eingehängt, Ersetzen und Löschen brauchen Freigabe, eine Notbremse stoppt Massenänderungen. Mit Weboberfläche, für Docker und als Desktop-App.

    DockerVersion 0.7.1github.com/sphings79/ambershelf

Unterstützen

Diese Tools entstehen in meiner Freizeit und bleiben kostenlos, offen und cloud-frei. Wenn dir eins davon einen Nachmittag gespart hat, freue ich mich über einen Kaffee oder ein Stück Pizza.

Kaffee oder Pizza

Weitere Beiträge