Em versões anteriores do Android, o sistema percorria todos os arquivos de um app específico para medir o uso do disco. Essa medição manual pode levar alguns minutos para ser calculada antes de mostrar os resultados aos usuários nas Configurações.
Além disso, o algoritmo interno para limpar arquivos de dados em cache só verificava o tempo de modificação em todos os apps. Isso permitiu que apps maliciosos degradassem a experiência geral do usuário definindo tempos modificados no futuro para se favorecer injustamente em relação a outros apps.
Para melhorar essas experiências, o Android 8.0 oferece a possibilidade de aproveitar o suporte de "cota" do sistema de arquivos ext4 para retornar estatísticas de uso do disco quase instantaneamente. Esse recurso de cota também melhora a estabilidade do sistema, impedindo que um único app use mais de 90% do espaço em disco ou 50% dos inodes.
Implementação
O recurso de cota faz parte da implementação padrão de installd.
O installd usa automaticamente o recurso de cota quando ativado em um
sistema de arquivos específico. O sistema retoma o cálculo manual de forma automática e transparente quando o recurso de cota não está ativado ou não tem suporte no dispositivo de bloco que está sendo medido.
Para ativar o suporte a cota em um dispositivo de bloco específico:
- Ative as opções
CONFIG_QUOTA,CONFIG_QFMT_V2eCONFIG_QUOTACTLdo kernel. - Adicione a opção
quotaà partição de userdata no arquivo 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
A opção fstab pode ser ativada ou desativada com segurança em dispositivos
existentes. Durante a primeira inicialização após a alteração da opção fstab,
o fsmgr força uma passagem fsck para atualizar todas as estruturas de dados
de cota, o que pode fazer com que a primeira inicialização demore um pouco mais. As inicializações
posteriores não serão afetadas.
O suporte a cota foi testado apenas no ext4 e no Linux 3.18 ou mais recente. Se a ativação em outros sistemas de arquivos ou em versões mais antigas do kernel, os fabricantes de dispositivos são responsáveis por testar e verificar a correção das estatísticas.
Não é necessário suporte a hardware especial.
Validação
Há testes CTS em StorageHostTest, que usam APIs públicas
para medir o uso do disco. Espera-se que essas APIs retornem valores corretos,
independente de o suporte à cota estar ativado ou desativado.
Depuração
O app de teste aloca cuidadosamente regiões de espaço em disco usando números primos
exclusivos para o tamanho. Ao depurar esses testes, use isso para determinar a causa de qualquer
discrepância. Por exemplo, se um teste falhar com um delta de 11 MB, examine o
método Utils.useSpace() para conferir se o blob de 11 MB foi armazenado em
getExternalCacheDir().
Há também alguns testes internos que podem ser úteis para depuração, mas pode ser necessário desativar as verificações de segurança para que sejam aprovados:
runtest -x frameworks/base/services/tests/servicestests/ \ src/com/android/server/pm/InstallerTest.javaadb shell /data/nativetest64/installd_utils_test/installd_utils_testadb shell /data/nativetest64/installd_cache_test/installd_cache_testadb shell /data/nativetest64/installd_service_test/installd_service_test