Em versões anteriores do Android, o sistema transferia todos os arquivos de propriedade de um um app específico para medir o uso do disco. Essa medição manual pode levar alguns minutos para calcular antes de exibir os resultados aos usuários em "Configurações".
Além disso, o algoritmo interno para limpar arquivos de dados em cache só analisava em todos os apps. Isso permitia que apps maliciosos prejudicassem a a experiência geral do usuário definindo horários de modificação distantes para situações preferirem a si mesmos em relação a outros apps.
Para melhorar essas experiências, o Android 8.0 se oferece para aproveitar os recursos "cota" para retornar estatísticas de uso do disco quase instantaneamente. Esta cota também melhora a estabilidade do sistema, impedindo 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 o recurso de cota automaticamente quando ativado em um
um sistema de arquivos específico. O sistema retoma de forma automática e transparente
cálculo manual quando o recurso de cota não estiver ativado ou não for compatível com a
dispositivo de transferência por blocos sendo medido.
Para ativar o suporte à cota em um dispositivo de transferência por blocos específico:
- Ative
CONFIG_QUOTA
,CONFIG_QFMT_V2
e Opções de kernelCONFIG_QUOTACTL
. - Adicionar a opção
quota
à partição de dados do usuário no fstab arquivo:/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 VMs
dispositivos. Na primeira inicialização, após mudar a opção fstab
,
fsmgr
força uma passagem fsck
a atualizar todos os dados de cota
o que pode fazer com que a primeira inicialização demore um pouco mais. Depois
inicializações não serão afetadas.
O suporte a cotas só foi testado em ext4 e Linux 3.18 ou mais recente. Se ativar em outros sistemas de arquivos ou em versões mais antigas do kernel, os fabricantes de dispositivos responsável por testar e verificar a precisão das estatísticas.
Não é necessário suporte de hardware especial.
Validação
Há testes CTS em StorageHostTest
, que exercem testes públicos
APIs para medir o uso do disco. Espera-se que essas APIs retornem valores corretos
independentemente do suporte a cotas estar ativado ou desativado.
Depuração
O app de teste aloca cuidadosamente as 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âncias. Por exemplo, se um teste falhar com um delta de 11 MB, examine o
Utils.useSpace()
para ver se o blob de 11 MB foi armazenado em
getExternalCacheDir()
.
Há também alguns testes internos que podem ser úteis para depuração, mas eles pode exigir a desativação das verificações de segurança para passar em:
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