USB- und tragbares Platten-Backup
USB ist ein erstklassiges Backend, kein Power-User-Toggle. Die Engine-provider ist usb. Desktop und iOS defaulten auf path-Modus. Android muss bridge nutzen, weil OTG nur eine content://-URI reicht; POSIX-open() arbeitet nicht.
Was das iPhone wirklich tut
iOS listet keine gemounteten Volumes (FileManager.mountedVolumeURLs ist abseits von macOS leer). Die App zeigt nie „SanDisk erkannt“. Der Pfad ist:
- Die Platte einstecken, bis sie in Dateien erscheint.
- Azalea → Backup-Speicher → neues USB-Profil.
- Einen Ordner wählen. Die App speichert ein security-scoped Bookmark, keinen rohen Pfadstring.
- Jeder Engine-Aufruf läuft später in
withAccess. Den Bookmark außerhalb dieses Scopes zu nutzen, wird ein undurchsichtiger Rust-Rechtefehler.
Am 21. Februar 2026, iPhone 15 + SanDisk Extreme 1 TB: nach der ersten Wahl ließ Sperren des Telefons den nächsten Start das Volume als fehlend melden, bis zu einem manuellen Refresh. Das ist kein Floskelsatz — iOS hat keine Attach-Benachrichtigung, die wir abonnieren können.
Warum Android SAF ist
OpenDocumentTree, dann takePersistableUriPermission. Den Persist-Aufruf überspringen und das Grant stirbt beim Reboot. SafFileBridge läuft nicht DocumentFile.findFile (O(n) pro Ebene; Zehntausende Fotos stocken). Es bevorzugt, die Document-ID zu konstruieren.
Das Kabel ziehen und Sie bekommen DeviceDetached, keinen generischen I/O-Fail. Platte voll ist OutOfSpace. Die UI soll pausieren, nicht ein Element rot malen und weiter scannen.
Was auf der Platte landet
<root>/.album/manifest.jsonl ist append-only. Versionsheader in Zeile eins, dann logischer Key, physischer Pfad, Bytes, MD5, Tombstones. Ein zweites Telefon beansprucht denselben Ordner, indem es dieses Ledger liest und escaped Namen zurückdreht. .album/ taucht nie in list auf.
exFAT hat kein xattr. MD5 so zu speichern wie die Cloud-Backends würde bei jedem USB-Upload ENOTSUP werfen. Prüfsummen leben stattdessen im Manifest.
Was nicht passiert
- Kein
presign_put. - Nicht APFS formatieren und erwarten, dass Android darauf schreibt.
- Zwei Platten, die beide Backup heißen, unterscheidet
volumeIdentity()-UUID, nicht das Ordnerlabel.