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>
22 lines
792 B
Bash
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"
|