診斷資料持續性功能會自動擷取並儲存裝置重新啟動時的檢查資料。這可用於保留可寫入檢查的任何內容。
總覽
開發期間自動收集:在
eng和userdebug建構作業中,系統會自動保留所有 Inspect 資料,即使重新啟動也不會遺失。不需要設定。正式版 (
user) 需要隱私權設定:在正式版裝置上,必須在產品的previous_boot管道 (例如 go/previous-boot-pipeline) 中,明確將持續性檢查資料加入允許清單,並接受隱私權審查。適用於意見回饋和當機報告:系統會自動將保存的檢查資料擷取到意見回饋中,並在生成意見回饋或當機報告時,將資料納入快照封存檔 (如
inspect.previous_boot.json)。
收集使用者建構的欄位
在正式版 (user) 中,為保護使用者隱私權,系統會限制診斷資料外洩。如要在正式版裝置上保留特定「檢查」屬性或樹狀結構,請將選取器新增至產品的 previous_boot 管道,並完成隱私權審查。
Persistence 的隱私權規定與 go/tq-feedback-privacy 在功能上完全相同。
1. 找出「檢查」選取器
找出所需屬性或節點的確切檢查選取器。
您可以使用 ffx inspect,在執行中的裝置或模擬器上檢查元件。
2. 將選取器新增至 previous_boot 管道
在產品存放區的管道目錄中,為元件建立或更新選取器設定:
在產品的
previous_boot管道下建立元件目錄://vendor/*/privacy/pipelines/previous_boot/<component_name>/inspect/新增
.cfg檔案 (例如<component_name>.cfg),其中包含要保留的確切選取器:core/my_component:root/my_node:error_count core/my_component:root/my_node:last_failure_reason更新對應的
BUILD.bazel或管道清單,加入新設定。
3. 送交隱私權審查
請參閱 go/tq-feedback-privacy。
存取保留的資料
意見回饋報告和快照
如果是在重新啟動後擷取意見回饋報告或當機快照,意見回饋應用程式會自動從 Persistence 擷取先前啟動的檢查資料。產生的快照包含:
inspect.previous_boot.json:先前啟動的完整或經過篩選的檢查 JSON 樹狀結構。
技術架構和行為
在幕後,診斷持續性會以排定的事件驅動管道快照服務運作:
┌───────────────────────────┐
│ Archivist │
│ ArchiveAccessor │
│ .previous_boot pipeline │
└─────────────┬─────────────┘
│ Snapshot query
▼
┌───────────────────────────┐ writes active snapshot
│ Diagnostics Persistence ├───► /cache/active/active.json
│ │ /cache/active/metadata.json
│ • Periodic (every 300s) │
│ • Low battery trigger │ on reboot: rotate
│ • Wait for update check ├───► /cache/previous_boot/active.json
└─────────────┬─────────────┘ /cache/previous_boot/metadata.json
│ Serves via FIDL
▼
┌───────────────────────────┐
│ PreviousBootDataProvider │
│ (e.g. Feedback component) │
└───────────────────────────┘
1. Archivist previous_boot 管道
Persistence 會連線至 fuchsia.diagnostics.ArchiveAccessor.previous_boot。
Archivist 會動態套用為管道設定的許可清單選取器,或在出現 DISABLE_FILTERING.txt 時略過篩選程序 (例如 eng 和 userdebug 建構作業)。
2. 快照觸發條件
持續性記錄會使用下列兩種觸發條件,記錄使用中系統的快照:
週期性間隔:每 $N$ 秒執行一次 (由
fuchsia.diagnostics.persist.PersistencePeriodSeconds設定,預設為 300 秒)。電量不足觸發條件:連線至
fuchsia.power.battery.BatteryManager監控電池狀態。如果電量降至fuchsia.diagnostics.persist.LowBatteryThresholdPercent(預設為 10%) 以下,系統會立即擷取快照,以保留即將關機前的狀態。
3. 從現用啟動輪替切換至上一個啟動輪替
系統會將有效快照和中繼資料儲存至
/cache/active/active.json和/cache/active/metadata.json。啟動時,Persistence 會以原子方式清除
/cache/previous_boot,並將/cache/active移至/cache/previous_boot。系統只會保留上一個開機週期的持續性資料。
4. 軟體更新檢查閘道
為防範更新期間持續發生當機迴圈,Persistence 會向 fuchsia.update.Listener 註冊,並保留先前的開機資料,直到完成首次開機後軟體更新檢查為止。在 eng 和 userdebug 建構作業中,可以略過這項檢查 (skip_update_check: true)。
組裝設定
您可以在「diagnostics.persistence」部分下方的產品組裝設定中,自訂持續性參數:
persistence_period_seconds(整數,預設值:300):ArchiveAccessor.previous_boot上定期快照之間的間隔時間 (以秒為單位)。low_battery_threshold_percent(整數,預設值:10): 觸發立即主動快照的電量百分比閾值。skip_update_check(布林值,預設值:使用者為false,userdebug/eng 為true): 如果為true,則不會等待開機後更新檢查,就發布先前的開機資料。一律false使用者建構版本。
常見問題
Persistence 是否適用於延遲節點?
可以。由於 Persistence 會透過 ArchiveAccessor 向 Archivist 要求快照,因此 Archivist 會在每個快照的時間點,主動評估與管道有效選取器相符的所有延遲節點。
.persist 設定檔去了哪裡?
舊版 .persist 檔案和依代碼擷取排程已由 Archivist previous_boot 管道取代。元件不再發布個別 .persist 檔案,也不會重新匯出 core/diagnostics/persistence:root/persist 下方即時檢查階層中的保存資料。所有先前的開機檢查作業都會整合為單一快照檔案,直接提供給意見回饋。