En versiones anteriores de Android, el sistema recorría todos los archivos propiedad de una aplicación en particular para medir el uso del disco. Esta medición manual podría tardar unos minutos en calcularse antes de mostrar los resultados a los usuarios en Configuración.
Además, el algoritmo interno para borrar archivos de datos almacenados en caché solo analizó la hora de modificación en todas las aplicaciones. Esto permitió que las aplicaciones maliciosas degradaran la experiencia general del usuario al establecer tiempos de modificación en el futuro para favorecerse injustamente sobre otras aplicaciones.
Para mejorar estas experiencias, Android 8.0 ofrece aprovechar el soporte de "cuota" del sistema de archivos ext4 para devolver estadísticas de uso del disco casi al instante. Esta función de cuota también mejora la estabilidad del sistema al evitar que una sola aplicación utilice más del 90% del espacio en disco o el 50% de los inodos.
Implementación
La función de cuota es parte de la implementación predeterminada de installd
. installd
usa automáticamente la función de cuota cuando está habilitada en un sistema de archivos en particular. El sistema reanuda de forma automática y transparente el cálculo manual cuando la función de cuota no está habilitada o no es compatible con el dispositivo de bloque que se está midiendo.
Para habilitar el soporte de cuotas en un dispositivo de bloque en particular:
- Habilite las opciones del kernel
CONFIG_QUOTA
,CONFIG_QFMT_V2
yCONFIG_QUOTACTL
. - Agregue la opción
quota
a su partición de datos de usuario en su archivo 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
La opción fstab
se puede habilitar o deshabilitar de forma segura en dispositivos existentes. Durante el primer arranque después de cambiar la opción fstab
, fsmgr
fuerza un paso fsck
para actualizar todas las estructuras de datos de cuota, lo que puede hacer que el primer arranque demore un poco más. Los arranques posteriores no se verán afectados.
La compatibilidad con cuotas solo se ha probado en ext4 y Linux 3.18 o superior. Si se habilita en otros sistemas de archivos o en versiones anteriores del kernel, los fabricantes de dispositivos son responsables de probar y verificar la exactitud de las estadísticas.
No se requiere soporte de hardware especial.
Validación
Hay pruebas CTS en StorageHostTest
, que ejercitan API públicas para medir el uso del disco. Se espera que estas API devuelvan valores correctos independientemente de si el soporte de cuotas está habilitado o deshabilitado.
Depuración
La aplicación de prueba asigna cuidadosamente regiones de espacio en disco utilizando números primos únicos para el tamaño. Al depurar estas pruebas, utilícelas para determinar la causa de cualquier discrepancia. Por ejemplo, si una prueba falla con un delta de 11 MB, examine el método Utils.useSpace()
para ver que el blob de 11 MB se almacenó en getExternalCacheDir()
.
También hay algunas pruebas internas que pueden ser útiles para la depuración, pero es posible que requieran deshabilitar controles de seguridad para pasar:
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