更快速的儲存空間統計資料

在舊版的 Android 中,系統會掃遍 測量磁碟用量這項手動評估可能需要幾分鐘的時間 ,然後在「設定」向使用者顯示結果前進行運算。

此外,內部演算法只會清除 修正所有應用程式的修正時間這讓惡意應用程式 將日後修改的時間設為不公平,藉此調整整體使用者體驗 比其他應用程式更受歡迎

為了改善這些使用體驗,Android 8.0 提供了利用 ext4 檔案系統的 「配額」支援,可立即傳回磁碟使用統計資料。這項配額 也藉此防止單一應用程式 超過 90% 的磁碟空間或 50% 的電網

實作

配額功能是 installd 預設實作方式的一部分。 以下項目啟用後,installd會自動使用配額功能 以及特定檔案系統系統會自動且公開透明地重新啟用 在配額功能未啟用或不支援 封鎖裝置

如何啟用特定區塊裝置的配額支援:

  1. 啟用 CONFIG_QUOTACONFIG_QFMT_V2CONFIG_QUOTACTL 核心選項。
  2. quota 選項新增至 fstab 中的使用者資料分區 檔案:
    /dev/block/platform/soc/624000.ufshc/by-name/userdata   /data
    ext4    noatime,nosuid,nodev,barrier=1,noauto_da_alloc
    latemount,wait,check,formattable,fileencryption=ice,quota

fstab 選項可以安全啟用或停用 裝置。變更 fstab 選項後,首次啟動期間, fsmgr 會強制 fsck 票證更新所有配額資料 所以可能導致首次啟動所需時間稍長隨後 不會影響開機程序。

配額支援只能在 ext4 和 Linux 3.18 或以上版本中經過測試。如果啟用 或者在舊版核心版本中,裝置製造商 。

不需要特殊硬體支援。

驗證

StorageHostTest 下有 CTS 測試,開放大眾練習 用於測量磁碟用量的 API。這些 API 應傳回正確的值 無論啟用或停用多少配額支援

偵錯

測試應用程式會以不重複的質數編號,謹慎分配磁碟空間區域 不同大小對這些測試進行偵錯時,請使用此功能來判定 的資料差異。舉例來說,如果測試失敗,差異值為 11 MB,請檢查 Utils.useSpace() 方法,查看 11MB blob 已儲存在 getExternalCacheDir()

偵錯時也有一些內部測試或許能派上用場 可能需要停用安全檢查,才能通過:

runtest -x frameworks/base/services/tests/servicestests/ \
  src/com/android/server/pm/InstallerTest.java
adb shell /data/nativetest64/installd_utils_test/installd_utils_test
adb shell /data/nativetest64/installd_cache_test/installd_cache_test
adb shell /data/nativetest64/installd_service_test/installd_service_test