Nas versões anteriores do Android, o sistema percorria todos os arquivos pertencentes a um aplicativo específico para medir o uso do disco. Essa medição manual pode levar alguns minutos para ser computada antes de exibir os resultados aos usuários nas Configurações.
Além disso, o algoritmo interno para limpar arquivos de dados em cache analisou apenas o horário modificado em todos os aplicativos. Isso permitiu que aplicativos maliciosos degradassem a experiência geral do usuário, definindo horários modificados em um futuro distante para se favorecerem injustamente em relação a outros aplicativos.
Para melhorar essas experiências, o Android 8.0 oferece o suporte à “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, evitando que qualquer aplicativo 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 do installd
. 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á habilitado ou não é suportado no dispositivo de bloco que está sendo medido.
Para ativar o suporte de cota em um dispositivo de bloco específico:
- Ative as opções de kernel
CONFIG_QUOTA
,CONFIG_QFMT_V2
eCONFIG_QUOTACTL
. - Adicione a opção
quota
à sua partição 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 habilitada ou desabilitada com segurança em dispositivos existentes. Durante a primeira inicialização após alterar a opção fstab
, 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 subsequentes não serão afetadas.
O suporte a cotas só foi testado em ext4 e Linux 3.18 ou superior. Se estiver habilitado 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 exatidão das estatísticas.
Nenhum suporte de hardware especial é necessário.
Validação
Existem testes CTS em StorageHostTest
, que exercitam APIs públicas para medir o uso do disco. Espera-se que essas APIs retornem valores corretos, independentemente de o suporte de cota estar ativado ou desativado.
Depuração
O aplicativo 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 quaisquer discrepâncias. Por exemplo, se um teste falhar com um delta de 11 MB, examine o método Utils.useSpace()
para ver se o blob de 11 MB foi armazenado em getExternalCacheDir()
.
Existem também alguns testes internos que podem ser úteis para depuração, mas podem exigir a desativação das verificações de segurança para serem aprovados:
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