Glossar
SQLite-Freeblock
Ein freier Bereich innerhalb einer SQLite-B-Tree-Seite, in einer Liste verkettet. Gelöschte Datensätze überdauern dort oft.
In einer SQLite-B-Tree-Seite wird der Platz, den eine gelöschte Zelle freigibt, zu einem Freeblock. Freeblocks bilden innerhalb der Seite eine verkettete Liste: Die ersten 2 Bytes jedes Blocks geben den Offset des nächsten an, die folgenden 2 Bytes seine Größe. Diese 4 Bytes überschreiben den Anfang der alten Zelle, doch der Rest des Datensatzes, einschließlich der Serial Types in seinem Header, bleibt oft erhalten.
Deshalb lassen sich gelöschte Zeilen aus QuarantineEventsV2 carven: Man verankert die Suche an den Serial Types eines LSQuarantineEvent-Datensatzes und liest die folgenden Werte. Garantiert ist dieses Überleben nicht. Die SQLite-Einstellung secure_delete überschreibt freigegebene Inhalte, und spätere Schreibvorgänge nutzen den Platz neu; fehlende wiederhergestellte Zeilen beweisen also nichts. Siehe gelöschte Quarantäne-Ereignisse wiederherstellen.