fix: kopieer met shutil.copyfile (data-only) i.p.v. copy/copy2

copy doet na copyfile ook copymode (os.chmod); op exfat met mountuid=1000
zijn alle bestanden eigendom van uid 1000 en wordt chmod/utime voor de
niet-eigenaar service-gebruiker geweigerd (EPERM op elke kopie, ook na de
copy2-fix). copyfile schrijft alleen data; verificatie gebeurt op grootte
en mode/opnametijd voegen op exfat niets toe.
This commit is contained in:
Eddy de Vink 2026-10-15 20:17:09 +02:00
commit 69d08ba8ba
3 changed files with 19 additions and 16 deletions

View file

@ -48,11 +48,13 @@ SD-kaartlezer die midden in de transfer offline klapt, `I/O error`, `device offl
verwijderd, wordt eerst een bestand van de kaart gelezen. Een onleesbare kaart
resulteert in een duidelijke Matrix-"GESTOPT" en **niets** wordt gewist.
- **Retry per bestand** — 3 pogingen met 2s pauze; vangt transiënte USB-glitches.
- **`shutil.copy` i.p.v. `copy2`** — `copy2` preserveert tijdsstempels via `os.utime`;
op de exfat-SSD (`uid=1000,allow_utime=0022`) weigert dat voor niet-eigenaars
(EPERM). Sinds de service als `aiaiaiaiagent` draait (werd voorheen als root
gedraaid) faalde daardoor elke kopie. Mode is op exfat altijd 0777 en het
opnamemoment staat al in de bestandsnaam — metadata-preserve voegt niets toe.
- **`shutil.copyfile` i.p.v. `copy`/`copy2`** — `copy`/`copy2` doen na het kopiëren
ook metadata-operaties op het doel (`chmod`, `utime`). Op de exfat-SSD
(`uid=1000` → álle bestanden zijn eigendom van uid 1000, `allow_utime=0022`)
worden die geweigerd voor een niet-eigenaar (EPERM); sinds de service als
`aiaiaiaiagent` draait (voorheen root) faalde daardoor elke kopie. `copyfile`
schrijft alleen data; mode is op exfat altijd 0777 en het opnamemoment staat al
in de bestandsnaam — metadata-operaties voegen niets toe.
- **Early-abort** — bij 5 opeenvolgende fouten stopt het script en stuurt het een
Matrix-bericht met de laatste fout. Bronbestanden worden nooit verwijderd zonder
geverifieerde kopie.