垃圾收集 (GC) 是指從裝置中移除「不必要的」blob 的程序。這項作業通常會執行釋出磁碟空間,以便解決新的暫時套件或連線到 OTA (在內部使用套件解析度)。
觸發方式
GC 是透過 pkg-cache 實作,會透過 fuchsia.space/Manager.GC 公開這項功能。
執行 fx shell pkgctl gc
即可手動觸發事件。
system-updater 會在 OTA 期間於不同時間點自動觸發 (如有必要)。
system-update-checker 會在必要時自動觸發快訊,「system-update-checker」是工程建構使用的更新檢查工具。
演算法
目前的演算法是以 Open Package Tracking RFC 提議的設計為基礎。
定義
- 基本套件
- 「base」或「system_image」套件 (以啟動引數中的雜湊識別) 和
data/static_packages
檔案中所列的套件 (透過雜湊)。 - 通常為執行特定設定所需的最低套件組合。
- 「base」或「system_image」套件 (以啟動引數中的雜湊識別) 和
- 快取套件
- 「base」套件
data/cache_packages.json
檔案中所列的套件 (依雜湊)。 - 概念上,這是在沒有網路的情況下使用,但仍想要暫時更新的選項。
- 「base」套件
- 開啟套件
- pkg-cache 目前提供套件目錄的套件
- 寫入索引
- 正在解析為 blob 而正在寫入的套件
- 保留的索引
- 封裝 blob
- 套件所需的所有 blob。
- 以遞迴方式產生中繼 blob 和內容 blob,以及所有子套件的套件 blob。
- 根據這個定義,保護來自 GC 的套件可保護其所有子套件。子套件本身為套件,不一定會與超套件提供的防護機制分開保護。
實作
- 如果目前的啟動分區未標示為健康,就會失敗,以免在備用時刪除先前系統所需的 blob
- 判斷所有常駐 blob 的組合
Br
- 鎖定讀寫索引
- 判斷所有受保護的 blob (
Bp
),也就是下列所有套件的套件 blob:- 基本套裝行程
- 快取套件
- 開啟套件
- 編寫索引套件
- 保留的索引套件
- 刪除集數差異
Br - Bp
的 blob - 解鎖寫作與保留索引