Start/USB- und tragbares Platten-Backup

USB- und tragbares Platten-Backup

Autor Azalea · Zuletzt getestet 2026-05-11

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:

  1. Die Platte einstecken, bis sie in Dateien erscheint.
  2. Azalea → Backup-Speicher → neues USB-Profil.
  3. Einen Ordner wählen. Die App speichert ein security-scoped Bookmark, keinen rohen Pfadstring.
  4. 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.