Files
Aime/app/aime-bootsync.sh
schakal00783andClaude Opus 5 0aa6a37325 feat(system): System von der SD-Karte auf die eMMC umgezogen
Alles lag auf der SD (System, DB, Aufnahmen, Modelle), die verloetete eMMC lag
ungenutzt daneben. SD-Karten sterben im Dauerbetrieb meist ohne Vorwarnung, und
Aime schreibt bei jeder Aufnahme WAV + MP3 plus DB und Suchindex. Die eMMC meldet
ihren Verschleiss: life_time 0x01, pre_eol 0x01 = unter 10 % verbraucht.

Vorher vollstaendige Sicherung der SD gezogen und verifiziert (94.501 Eintraege =
find / -xdev, SHA-256-Stichprobe).

Drei Erkenntnisse:

1. mkfs.ext4 (e2fsprogs 1.47) setzt orphan_file, was das Incompat-Merkmal
   orphan_present mitbringt -- U-Boots ext4-Leser verweigert dann das Lesen.
   Vor dem ersten Start entfernt: tune2fs -O ^orphan_file,^metadata_csum_seed.
2. U-Boot liest boot.scr und armbianEnv.txt von der SD, solange sie steckt --
   nachgewiesen, indem die SD-Konfiguration testweise wieder auf die SD-Root
   zeigte und das Board prompt das alte System hochfuhr.
3. Daher aime-bootsync.service: spiegelt /boot beim Start und beim Herunterfahren
   auf die SD. Sonst liefe ein Kernel-Update auseinander (neue Module auf der
   eMMC, alter Kernel von der SD). Faellt die SD aus, greift die vollstaendige
   eMMC-Bootkette.

Ergebnis: / = mmcblk0p1 (aime-emmc), keine fehlgeschlagene Unit, dieselben fuenf
Dienste aktiv wie vorher, HTTP 200, NPU v0.9.8, Suchindex 1799/1799.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 01:07:26 +02:00

22 lines
792 B
Bash

#!/bin/bash
# Spiegelt /boot des laufenden (eMMC-)Systems auf die SD-Karte.
#
# Warum: U-Boot liest boot.scr, Kernel und initrd von der SD-Karte, das Root
# liegt aber auf der eMMC. Ein Kernel-Update schreibt nur nach /boot der eMMC —
# ohne diese Spiegelung wuerde der alte Kernel von der SD mit den neuen Modulen
# auf der eMMC starten, und das Ergebnis waere ein halb funktionierendes System.
#
# Laeuft beim Start UND beim Herunterfahren: nach einem Kernel-Update ist die
# SD damit schon vor dem naechsten Start aktuell.
set -u
SD=/dev/mmcblk1p1
MP=/mnt/sdroot
[ -b $SD ] || exit 0
mountpoint -q $MP && umount $MP
mkdir -p $MP
mount $SD $MP 2>/dev/null || exit 0
rsync -a --delete --exclude='*.bak*' /boot/ $MP/boot/
sync
umount $MP
logger -t aime-bootsync "/boot auf die SD gespiegelt"