Files
philips-tv-speicher-voll/diagnostics/phase5/epg-repair.md

6.0 KiB
Raw Blame History

Phase 5 – kontrollierte EPG-Reparatur

Stand: 2026-08-25, Live-Austausch und technische Sofortvalidierung abgeschlossen.

Gewählte Methode

Methode C: atomarer Austausch gegen eine offline gebaute kompakte DB. Das Schema, alle Indizes und user_version=6 sind identisch. Die persistenten Tabellen android_metadata, indextable und mappingtable wurden zeilengleich übernommen; channelmapversiontable war und bleibt leer. Ausschließlich die EPG-Nutzlasttabellen (Schedule, Now/Next, FVP und FastIP) beginnen leer.

Diese Methode vermeidet 3.071.250 Einzel-Deletes, die Auto-Vacuum- Seitentransporte und eine große temporäre Schreiblast. Der Austausch erfolgt erst nach Prozess-Stopp und erneuter Hash-/DAC-/SELinux-Prüfung über eine 159.744-Byte-Temporärdatei im originalen Datenbankverzeichnis.

BEFORE

  • /data: 5.089.920 KiB gesamt, 3.613.240 KiB benutzt, 1.355.544 KiB frei, 73 % belegt.
  • Original: 1.742.053.376 Byte, Inode 131613, Owner/Group system:system, Mode 660, Label u:object_r:system_app_data_file:s0.
  • Original-SHA-256: 71403743206d5082aae56c4a947f3429f5c3d54b908c4abe2eb0ca66e06694ba.
  • Schedule: 3.071.250 Zeilen; zum Snapshotzeitpunkt vollständig abgelaufen.
  • Journal: vorhanden, 0 Byte; kein offener Channels-Prozess und kein durch lsof sichtbarer EPG-Handle im abschließenden Preflight.

Rollback-Gates

Gate Ergebnis
PC-Snapshot PASS – Größe und SHA-256 verifiziert
adopted-storage-Snapshot PASS – gleicher SHA-256
Original integer PASS – integrity_check und quick_check = ok
Kandidat lokal getestet PASS – Schema identisch, FK-Check leer
Abhängigkeiten PASS – Sender/Favoriten und Recordings/Reminder extern; benötigte Mappings erhalten
Prozess stoppbar/offene Verbindung PASS – Preflight ohne PID/Handle; vor Commit erneut geprüft
Owner/Group/Mode/Label PASS – bekannt; Tempdatei muss exakt entsprechen
freier Peak-Speicher PASS – Kandidat benötigt nur 159.744 Byte intern
Rücksicherung PASS – vorab definierter, hash-gegatterter atomarer Restore vom USB-Snapshot

Alle 14 vom Auftrag geforderten Gates sind erfüllt. Bei jeder Abweichung bricht das Swap-Skript vor dem Rename ab und entfernt nur seine exakt benannte Temporärdatei.

ACTION

Ausgeführt: org.droidtv.channels kontrolliert gestoppt; PID-Freiheit geprüft; Original- und Kandidatenhash erneut prüfen; Kandidat in dasselbe Verzeichnis kopieren; Mode, Owner, Group, SELinux-Label und Hash prüfen; unmittelbar vor dem atomaren mv nochmals PID-Freiheit prüfen; danach sync und Live-Hash.

AFTER

  • COMMIT_OK; neue DB 159.744 Byte, Inode 140395, system:system, Mode 660, Label u:object_r:system_app_data_file:s0.
  • Commit-SHA-256 entsprach exakt dem offline geprüften Kandidaten: 1ae978c7ca9333c6a0528ad535a732f116deb7213321e9d0bd9c0d377a25aa5b.
  • Nach normalem Providerstart führte Channels den erwarteten Mapping-Sync aus; die konsistente Nachkopie hat SHA-256 67f8834a7e56d3b84b47f0c75b3781703915b0d1f93e93c42312c69796e6cb36.
  • SQLite: quick_check=ok, integrity_check=ok, FK-Check leer, Version 6, 39 Seiten, Freelist 0, Auto-Vacuum FULL.
  • Zeilen: Schedule 0; Now/Next 0; indextable 358 und mappingtable 203.
  • Zwei konsistente Nachmessungen mehrere Minuten auseinander waren bytegleich.
  • Die unabhängigen Hashes von RecordingsRemindersList.db, tv.db und list.db blieben gegenüber dem Preflight unverändert.

Speicher

Messwert Vorher Nachher Differenz
/data frei (df -k) 1.355.512 KiB 3.056.912 KiB +1.701.400 KiB = 1.661,52 MiB = 1,62258 GiB
/data Belegung 73 % 39 % −34 Prozentpunkte
EPG-Datei 1.742.053.376 B 159.744 B −1.741.893.632 B = 1.701.068 KiB = 1.661,20 MiB
Schedule-Zeilen 3.071.250 0 −3.071.250

ROLLBACK

phase5-epg-rollback.json stellt ausschließlich die EPG-DB aus dem verifizierten USB-Snapshot über eine neue Tempdatei und atomaren Rename wieder her. Auch dieser Pfad prüft PID, Hash, Mode, Owner/Group und SELinux-Label vor dem Commit. Er wird nur bei fehlgeschlagener Funktionsvalidierung ausgeführt.

VALIDATION

VALIDATED LIVE (softwareseitig): ADB blieb erreichbar; WLAN blieb CONNECTED/VALIDATED; Android meldet internes und adopted Volume NORMAL; Channels, EPGData, PlayTV und TVInput liefen. Der Provider öffnete die DB und führte erfolgreiche Queries sowie den Sync von 358 Channels/203 Mappings aus. Keine SQLite-Exception, Korruptionsmeldung, ANR oder Crashloop trat auf. Der einzige neue Exit war der dokumentierte USER REQUESTED Force-Stop.

Der nach zwei Minuten geloggte Philips-Stale-Cleanup lief erneut und blieb ohne Mutation – reproduzierbarer Beleg für BUG-001. Im Einstellungsmodus loggte der Sync zunächst Mode Guide/WatchTV: false. Nach echtem TV-/Guide-Betrieb wuchs die DB kontrolliert auf 806.912 Byte. Die dritte konsistente Momentaufnahme enthielt 59 Now-, 48 Next- und 1.041 Schedule-Zeilen; Schedule reichte lokal vom 25.08.2026 19:00 bis 01.09.2026 02:50. integrity_check=ok, 197 Seiten, Freelist 0. Aktuelle EPG-Neubefüllung ist damit VALIDATED LIVE.

Der normale kanonische Sync reduzierte den internen Spiegel im späteren Snapshot von 358/203 auf 357/202 Index-/Mapping-Zeilen. Da der Kandidat anfangs exakt 358/203 enthielt und die App selbst den späteren Sync ausführte, ist dies kein Beleg für blind gelöschte Senderdaten; die sichtbare Senderliste bleibt dennoch zu prüfen.

Folgende Punkte bleiben USER VALIDATION REQUIRED:

  1. Live-TV-Bild/Ton und Senderwechsel prüfen.
  2. Senderliste und Favoriten öffnen und stichprobenartig vergleichen.
  3. Im bereits neu befüllten Guide Now/Next und zukünftige Sendungen visuell stichprobenartig prüfen.
  4. Vorhandene Aufnahmen/Timer/Reminder anzeigen (nichts neu programmieren nötig).
  5. Prüfen, ob die Speicherwarnung verschwunden ist.

USB-Snapshot und vorab geprüfte Rollback-Konfiguration bleiben bis zum Abschluss dieser Sichtprüfung erhalten.