sphings-dev.de

AmberShelf 0.7: Anmeldung, mehrere Aufträge und der Zustand der Platten

Die Versionen 0.7.0 und 0.7.1 von AmberShelf bringen keine neue Grundidee, sondern vor allem Antworten auf konkrete Stolperstellen einer Plattenverwaltung. Dazu kommen zwei größere Änderungen: eine Anmeldung und die Möglichkeit, einen Master in mehreren Aufträgen zu verwenden.

Eine Anmeldung, wenn jemand anders herankommt

Bisher hatte die Oberfläche bewusst keine eigene Anmeldung; empfohlen war ein Reverse Proxy. Jetzt verlangt alles, was nicht allein über Loopback erreichbar ist, ein Passwort, also jeder Container und jede Installation hinter einem Proxy. Beim ersten Start erzeugt AmberShelf eines und schreibt es ins Protokoll:

docker compose logs ambershelf | grep -A4 "first start"

Einen Einrichtungsbildschirm gibt es absichtlich nicht. Auf einer erreichbaren Adresse gehört er dem, der ihn zuerst findet, während ein erzeugtes Passwort im Protokoll nur dem die Tür öffnet, der das Protokoll ohnehin lesen kann. Wer sich damit anmeldet, wird gebeten, ein eigenes festzulegen; solange das nicht geschehen ist, leitet jede Seite dorthin um und die Job-API antwortet mit 403. Das erzeugte Passwort soll nicht monatelang in Benutzung bleiben, weil sich niemand darum gekümmert hat.

Das Passwort wird mit scrypt aus der Standardbibliothek gehasht (statt argon2: beide sind speicherhart, aber eine C-Erweiterung wäre ein weiteres Teil, das in den macOS- und Windows-Bündeln funktionieren müsste). Sitzungen liegen serverseitig in einer Tabelle, das Abmelden wirkt also sofort überall, und ein Passwortwechsel beendet alle anderen Sitzungen. Fünf Fehlversuche von einer Adresse kosten dreißig Sekunden Pause. Ob überhaupt nach einem Login gefragt wird, hängt von der Adresse ab, auf der der Server lauscht: Der Desktop-Starter sagt 127.0.0.1 und wird durchgelassen, alles andere wird gefragt; ein nicht gesetzter Wert zählt als erreichbar. Außerdem behoben: Hinter einem Reverse Proxy fehlte dem Cookie das Secure-Flag, weil uvicorn Proxy-Headern nur von 127.0.0.1 traut. Für den Proxy-Betrieb liegt jetzt docs/compose.override.example.yaml bei, das die Loopback-Bindung entfernt und den Container ins Proxy-Netz hängt.

Aufträge statt eines Satzes

Aus dem „Satz“ der ersten Version, einem Master mit seinen Kopien, ist der Auftrag geworden. Die Sync-Art gilt je Auftrag: Entweder trägt jede Kopie den vollständigen Bestand, oder die Kopien teilen ihn sich und ergeben zusammen ein Ziel. Beide Modi haben jetzt Namen, statt sich hinter einem Schalter für das Aufteilen zu verstecken.

Dieselbe Master-Platte darf in mehreren Aufträgen stecken, etwa einmal auf eine große Platte gespiegelt und einmal auf zwei kleinere verteilt. Sie wird trotzdem nur einmal eingelesen und nur einmal eingehängt, weil Verzeichnis, Prüfsummen und Plattenzustand an der Platte hängen und nicht am Auftrag. Es gelten drei Regeln: Eine Kopie gehört immer genau einem Auftrag, weil zwei Master, die auf dieselbe Platte schreiben, sich die Buchführung zerstören würden; eine Platte ist Master oder Kopie, nie beides, auch nicht in verschiedenen Aufträgen; und die Platte selbst und ihre Zugehörigkeit zu Aufträgen werden dafür sowohl im Host-Register als auch in der Datenbank getrennt geführt.

Platten vergessen, ausschließen und formatieren

Eine Platte zu registrieren heißt, Namen, Auftrag und Rolle einzutippen, und früher oder später ist eines davon falsch. Bisher führte der Rückweg über den Host. Jetzt lässt sich eine Platte oder ein ganzer Auftrag aus der Oberfläche vergessen. Das bestätigt man, indem man den Plattennamen eintippt, so wie die Notbremse nach einer Zahl fragt, denn Vergessen wirft einen Index weg, dessen Aufbau Stunden gedauert haben kann. Auf der Platte selbst wird nichts angefasst. Eine Platte, die einmal Master war, kommt auf eine Liste ausgemusterter Platten und lässt sich über den Socket danach nur wieder als Master registrieren. Wer sie als Kopie verwenden will, muss den Master aufgeben, ebenfalls in der Oberfläche: Hinweis bestätigen, Plattennamen eintippen, Passwort eingeben. Wem das als Angriffsfläche zu groß ist, schaltet es mit "allow_demote": false in /etc/ambershelf/disks.conf ab; dann bleibt nur ambershelf-helper --admin auf dem Host.

Die Plattenliste war an anderer Stelle zu freigiebig. Die Liste der angeschlossenen Platten zeigte jede Partition, die lsblk meldet, samt Root-Dateisystem und Swap. Das Root-Dateisystem als Kopie zu registrieren hätte bedeutet, dass der Helfer es ein zweites Mal beschreibbar einhängt. Jetzt gilt eine Partition als Teil des laufenden Systems, wenn sie außerhalb von /mnt, /media oder /run/media eingehängt ist oder als Swap, LUKS, LVM oder RAID-Mitglied dient; der Helfer lehnt sie ab, die Oberfläche zeigt sie nicht, und zehn Fälle werden bei jedem Push geprüft. Standardmäßig erscheinen nur Wechselplatten; eine interne Platte als Ziel ist eine Entscheidung und keine Voreinstellung. Außerdem lässt sich eine Platte dauerhaft ausschließen, etwa die mit fremden Backups. Das geschieht über den Host (ambershelf-helper --admin exclude <fs-uuid>); der Helfer weigert sich dann, die Platte zu registrieren oder einzuhängen.

Neu ist auch das Formatieren aus der Oberfläche – nur in der Docker-Fassung, die macOS- und Windows-Apps bieten es nicht an, weil dort das Festplattendienstprogramm und Windows selbst formatieren. Das stärkste Argument gegen Versehen ist nicht ein Text in Großbuchstaben, sondern die Platte selbst: Vor dem Formatieren hängt der Helfer sie kurz nur lesend ein und listet den Inhalt, etwa „! Fotos ! · Dokumente · Urlaub 2019 · wichtig.txt“. Dazu kommen zwei getrennte Handlungen, ein Häkchen, dass die Daten verloren gehen, und der von Hand getippte Gerätename. Der Helfer lehnt Platten ab, die registriert, ausgeschlossen, eingehängt oder Teil des laufenden Systems sind. Ganze Platten erhalten eine GPT-Tabelle mit einer Microsoft-Basic-Data-Partition, danach wird schnell als exFAT oder NTFS formatiert. Leere Platten erkennt die Oberfläche jetzt ebenfalls und nennt den Grund, statt sie wegzulassen; auch Dateisysteme direkt auf der Platte ohne Partitionstabelle werden erkannt.

Der Zustand der Platte

AmberShelf fragt jede registrierte Platte, was sie über sich selbst zu sagen hat: auf Knopfdruck unter „Platten“ und automatisch bei jedem Einhängen, ohne schlafende Platten zu wecken. Gemeldet wird nur, was man tun kann: ersetzte Sektoren, derzeit nicht lesbare Sektoren, endgültig verlorene Sektoren und Übertragungsfehler, die ausdrücklich auf Kabel, Gehäuse oder Stromversorgung hinweisen statt auf die Platte. Der Rest erscheint als Zahl ohne Meinung. Nötig ist smartmontools; fehlt es oder reicht ein USB-Gehäuse die Abfrage nicht durch, steht das genau so da und nicht „alles in Ordnung“. Die Platten-Seite zeigt außerdem, was angesteckt und eingehängt ist und ob man den Stecker ziehen darf.

Weniger Fehlalarme, weniger Sackgassen

  • AVCHD-Videos wurden als beschädigt gemeldet; das ist behoben, ebenso nicht mehr als laufend markierte tote Aufträge. Eine weitere Korrektur hört auf, unversehrte Dateien als beschädigt zu melden.
  • Die Vorschau meldete „Platten nicht eingelesen“ ohne Weg dorthin, weil die Schaltflächen auf einer anderen Seite lagen. Jetzt bietet die Seite das Einlesen aller Platten des Auftrags selbst an.
  • Meldungen standen in der Adresszeile und gingen bei einem Semikolon verloren, sodass nur eines von zwei Problemen sichtbar war. Das wird jetzt maskiert; harmlose Meldungen verschwinden von selbst.
  • Plattennamen mit Umlauten, Klammern oder Und-Zeichen wurden abgelehnt, weil die Regel nur ASCII-Zeichen zuließ. Jetzt sind nur Pfadtrenner, nicht druckbare Zeichen und die Namen „.“ und „..“ verboten, denn der Name wird nur zu einem Ordner unter /mnt/ambershelf.
  • Der Namensvorschlag beim Registrieren war ein Gerätepfad und wurde von der nächsten Seite abgelehnt. Vorgeschlagen werden jetzt Label, Modell oder der Gerätename.
  • Das Datenträgerlabel wird an das Dateisystem angepasst, einzelne Dateien lassen sich neu hashen, und ein Klick wirft nicht mehr Stunden an Einlesen weg.

0.7.1 ergänzt: Arbeit sichtbar machen, die den Prozess überlebt hat, der sie gestartet hat, und den Fortschritt der Integritätsphase melden. Die Installation ändert sich nicht; Docker-Image ghcr.io/sphings79/ambershelf:latest, die Apps stehen auf der Releases-Seite. Die macOS- und Windows-Apps sind weiterhin nicht signiert und können den Master nicht schreibschützen.

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