8.3 KiB
Dashcam SD Card Automount & Transfer Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Automatische dashcam transfer die betrouwbaar start zodra de SD kaart wordt ingestoken, ongeacht USB poort.
Architecture: Statische systemd .automount + .mount units op UUID voor zowel SD kaart als SSD. Udev rule triggert alleen het transfer script. Trigger script pollt condition-based op mount unit status.
Tech Stack: systemd (automount/mount units), udev (device detectie), bash (trigger), Python (transfer script)
Device info
| Device | UUID | Vendor:Product | Label |
|---|---|---|---|
| SD kaart (partitie 1) | 00D3-7715 |
14cd:1212 (Super Top microSD reader) |
— |
| SSD (partitie 2) | 3027-8ECA |
0bc2:2065 (Seagate Ultra Touch) |
Ultra Touch |
| Pad | Device |
|---|---|
/mnt/sdcard |
SD kaart |
/mnt/ultratouch |
Seagate SSD |
Probleemanalyse (geleerd uit sessie)
1. systemd-mount --automount=yes faalt
Udev rule matched op KERNEL=="sd*[0-9]" (device name). Transient automount units van eerdere inserties blokkeren nieuwe device names. Resultaat: exit 1.
2. UUID device timeout
Na SD kaart insertie duurt het even voordat de exfat partition herkend wordt. dev-disk-by-uuid-00D3-7715.device kreeg een timeout in eerste tests. Mogelijk opgelost door oude udev rules te verwijderen (die vochten met de automount unit), maar dit moet geverifieerd worden.
3. Concurrente systemd-mount en automount
Als zowel de oude udev rule systemd-mount als de nieuwe automount unit actief zijn, vechten ze om /mnt/sdcard. De automount unit wint niet altijd.
4. systemd-umount via udev zet automount uit
De udev remove rule riep systemd-umount /mnt/sdcard aan, wat de hele automount unit deactiveerde. Na opnieuw insteken was de automount weg en moest hij handmatig herstart worden.
Taken
Task 1: SSD automount op UUID (doen vóór SD kaart — de SSD is permanent aangesloten)
Waarom eerst: De SSD is permanent verbonden. Als we die eerst proper configureren, hebben we een werkende mount voor de transfer doel. De SD kaart is de variabele factor.
Files:
-
Create:
/etc/systemd/system/mnt-ultratouch.mount(op server) -
Create:
/etc/systemd/system/mnt-ultratouch.automount(op server) -
Step 1: Maak
/etc/systemd/system/mnt-ultratouch.mount
[Unit]
Description=Mount Ultra Touch SSD
[Mount]
What=/dev/disk/by-uuid/3027-8ECA
Where=/mnt/ultratouch
Type=exfat
Options=uid=1000,gid=1000,dmask=0000,fmask=0000
- Step 2: Maak
/etc/systemd/system/mnt-ultratouch.automount
[Unit]
Description=Automount Ultra Touch SSD
[Automount]
Where=/mnt/ultratouch
TimeoutIdleSec=0
[Install]
WantedBy=multi-user.target
- Step 3: Stop oude transient automount (if any), enable nieuwe
sudo -A systemctl stop mnt-ultratouch.automount mnt-ultratouch.mount 2>/dev/null || true
sudo -A umount /mnt/ultratouch 2>/dev/null || true
sudo -A systemctl daemon-reload
sudo -A systemctl enable --now mnt-ultratouch.automount
- Step 4: Verifieer
systemctl status mnt-ultratouch.automount --no-pager
ls /mnt/ultratouch/
Verwacht: automount active (waiting), ls toont bestanden en mount wordt active (mounted)
Task 2: SD card automount op UUID
Files:
-
Create:
/etc/systemd/system/mnt-sdcard.mount(op server) -
Create:
/etc/systemd/system/mnt-sdcard.automount(op server) -
Step 1: Maak
/etc/systemd/system/mnt-sdcard.mount
[Unit]
Description=Mount SD card
[Mount]
What=/dev/disk/by-uuid/00D3-7715
Where=/mnt/sdcard
Type=exfat
Options=uid=1000,gid=1000,dmask=0000,fmask=0000
- Step 2: Maak
/etc/systemd/system/mnt-sdcard.automount
[Unit]
Description=Automount SD card
[Automount]
Where=/mnt/sdcard
TimeoutIdleSec=0
[Install]
WantedBy=multi-user.target
- Step 3: Enable (SD kaart moet eruit zijn)
sudo -A systemctl daemon-reload
sudo -A systemctl enable --now mnt-sdcard.automount
- Step 4: Verifieer automount actief
systemctl status mnt-sdcard.automount --no-pager
Verwacht: active (waiting)
- Step 5: SD kaart insteken en testen
ls /mnt/sdcard/Novatek/Movie/ | head -3
systemctl status mnt-sdcard.mount --no-pager
Verwacht: bestanden zichtbaar, mount active (mounted)
- Step 6: SD kaart verwijderen en opnieuw insteken
Test de volledige cycle: remove → automount blijft active (waiting) → insert → ls trigger → mount active (mounted)
Let op: Als de automount na remove inactive wordt, is er iets mis met de remove handling. Onderzoek dan of er ergens systemd-umount wordt aangeroepen.
Task 3: Udev rule — alleen trigger, geen mount commands
Belangrijk: Deze rule mag geen systemd-mount, systemd-umount of andere mount commands bevatten. Alleen de trigger voor het transfer script.
Files:
-
Create:
/etc/udev/rules.d/99-dashcam-trigger.rules(op server) -
Step 1: Maak udev rule
# Dashcam SD card reader — trigger transfer script
# Mounting wordt gedaan door systemd automount unit (mnt-sdcard.automount)
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*[0-9]", ENV{ID_VENDOR_ID}=="14cd", ENV{ID_MODEL_ID}=="1212", RUN+="/usr/local/bin/dashcam-transfer-trigger"
Geen remove rule. De automount unit met TimeoutIdleSec=0 zal niet automatisch unmounten. Als de SD kaart fysiek verwijderd wordt, zal systemd de mount degraderen (device verdwijnt). Bij opnieuw insteken herkent de automount unit de UUID en mount opnieuw.
- Step 2: Herlaad udev
sudo -A udevadm control --reload-rules
Task 4: Trigger script met condition-based waiting
Files:
-
Create:
/usr/local/bin/dashcam-transfer-trigger(op server) -
Step 1: Maak het trigger script
#!/bin/bash
# Trigger script for dashcam-transfer
# Wacht tot systemd automount /mnt/sdcard mounted heeft, dan start transfer
# Pollt condition-based op mnt-sdcard.mount unit status
logger -t dashcam-transfer Trigger: SD card detected
for ((i=0; i<180; i++)); do
if systemctl is-active --quiet mnt-sdcard.mount 2>/dev/null; then
logger -t dashcam-transfer Trigger: mounted after ${i}s, starting transfer
/usr/bin/systemd-run --no-block --unit=dashcam-transfer --description='Dashcam SD card transfer' /usr/local/bin/dashcam-transfer
exit 0
fi
sleep 1
done
logger -t dashcam-transfer TRIGGER ERROR: mount not active after 180s
exit 1
- Step 2: Maak executable
sudo -A chmod +x /usr/local/bin/dashcam-transfer-trigger
Task 5: Dashcam transfer systemd service herstellen
Files:
-
Create:
/etc/systemd/system/dashcam-transfer.service(op server) -
Step 1: Maak service file
[Unit]
Description=Dashcam SD card transfer
After=mnt-sdcard.mount
[Service]
Type=oneshot
ExecStart=/usr/local/bin/dashcam-transfer
User=root
De service wordt niet enabled — hij wordt gestart via systemd-run vanuit het trigger script.
Task 6: E2E test — SD kaart eruit en erin
-
Step 1: SD kaart verwijderen
-
Step 2: Verifieer automount blijft actief
systemctl status mnt-sdcard.automount --no-pager
Verwacht: active (waiting) (niet inactive!)
- Step 3: Monitoring starten
journalctl -t dashcam-transfer -f
- Step 4: SD kaart insteken
Verwachte flow:
- udev detecteert device → roept trigger script aan
- Trigger pollt
mnt-sdcard.mountstatus - Automount mount automatisch zodra de UUID device beschikbaar is
- Trigger detecteert active mount → start transfer via systemd-run
- Transfer logt naar
/tmp/dashcam-transfer.log
- Step 5: Verifieer transfer log en bestanden
tail -20 /tmp/dashcam-transfer.log
ls /mnt/ultratouch/dashcam/$(date +%Y%m%d)/
Opmerkingen
- SD kaart UUID kan veranderen bij format. Updaten in
.mountfile. TimeoutIdleSec=0betekent: niet auto-unmounten. De SSD is permanent, de SD kaart wordt fysiek verwijderd.- SELinux: Enforcing. exfat mounts met
uid=1000,gid=1000zouden moeten werken. Eventuele AVC denials oplossen met SELinux policy module. - De SSD automount neemt de functie over van de oude udev
systemd-mountregel. Die regel hoeft niet meer.