O Android sempre ofereceu suporte a acessórios de armazenamento externo (como cartões SD), mas esses acessórios eram limitados ao armazenamento de arquivos simples devido à impermanence esperada e à proteção mínima de dados oferecida ao armazenamento externo tradicional. O Android 6.0 introduziu a capacidade de adotar mídias de armazenamento externo para atuar como armazenamento interno.
Quando a mídia de armazenamento externo é adotada, ela é formatada e criptografada para funcionar apenas com um único dispositivo Android por vez. Como a mídia está fortemente vinculada ao dispositivo Android que a adotou, ela pode armazenar com segurança apps e dados particulares de todos os usuários.
Quando os usuários inserem uma nova mídia de armazenamento (como um cartão SD) em um local
adotável, o Android pergunta como eles querem usar a mídia. Eles podem
adotar a mídia, que é formatada e criptografada, ou continuar usando-a
como está para armazenamento de arquivos simples. Se eles optarem pela adoção, a plataforma vai oferecer a
migração do conteúdo de armazenamento compartilhado principal (normalmente montado em
/sdcard
) para a mídia recém-adotada, liberando espaço valioso no
armazenamento interno. Ao contrário do armazenamento tradicional, que é limitado a 2 TB devido ao uso de
MBR,
o armazenamento adaptável usa
GPT
e, portanto, tem um limite de armazenamento de arquivos de aproximadamente 9 ZB.
Os apps só podem ser colocados em mídias de armazenamento adotadas quando o desenvolvedor indicou
o suporte pelo atributo android:installLocation
.
As novas instalações de apps com suporte são colocadas automaticamente no
dispositivo de armazenamento com mais espaço livre, e os usuários podem mover apps com suporte
entre dispositivos de armazenamento no app Configurações. Os apps movidos para mídia
adotada são lembrados enquanto a mídia é ejetada
e retornam quando a mídia é reinserida.
Segurança
A plataforma gera aleatoriamente chaves de criptografia para cada dispositivo adotado e as armazena no armazenamento interno do dispositivo Android. Isso faz com que a mídia adotada seja tão segura quanto o armazenamento interno. As chaves são associadas a dispositivos adotados com base no GUID da partição adotada.
Se o dispositivo estiver configurado para usar a criptografia baseada em arquivos (FBE) no armazenamento interno, o armazenamento adotável usará a FBE e a criptografia de metadados. Caso contrário, o armazenamento adaptável usa a criptografia de disco completo (FDE).
O layout no disco do dispositivo adotado reflete de perto a partição de dados interna, incluindo rótulos do SELinux etc. Quando há suporte para vários usuários no dispositivo Android, o dispositivo de armazenamento adotado também oferece suporte a vários usuários com o mesmo nível de isolamento do armazenamento interno.
Como o conteúdo de um dispositivo de armazenamento adotado está fortemente vinculado ao dispositivo Android que o adotou, as chaves de criptografia não podem ser extraídas do dispositivo pai. Portanto, o dispositivo de armazenamento não pode ser montado em outro lugar.
Se o dispositivo usar FBE, consulte a documentação do FBE e a documentação de criptografia de metadados para saber como configurar a criptografia de metadados e FBE no armazenamento adaptável.
Desempenho e estabilidade
Somente mídias de armazenamento externas em locais estáveis, como um slot dentro de um compartimento de bateria ou atrás de uma capa protetora, devem ser consideradas para adoção para evitar a perda ou corrupção acidental de dados. Em particular, dispositivos USB conectados a um smartphone ou tablet nunca devem ser considerados para adoção. Uma exceção comum seria um drive USB externo conectado a um dispositivo semelhante a uma TV, porque toda a TV normalmente é instalada em um local estável.
Quando um usuário adota um novo dispositivo de armazenamento, a plataforma executa um comparativo de mercado e compara o desempenho com o armazenamento interno. Se o dispositivo adotado for significativamente mais lento que o armazenamento interno, a plataforma vai avisar o usuário sobre uma experiência possivelmente degradada. Esse comparativo foi derivado do comportamento real de E/S de apps Android conhecidos. No momento, a implementação do AOSP só avisa os usuários além de um único limite, mas os fabricantes de dispositivos podem adaptar isso ainda mais, como rejeitar a adoção completamente se o cartão for extremamente lento.
Os dispositivos adotados precisam ser formatados com um sistema de arquivos que ofereça suporte a permissões
POSIX e atributos estendidos, como ext4
ou
f2fs
. Para um desempenho ideal, o sistema de arquivos f2fs
é
recomendado para dispositivos de armazenamento flash.
Ao realizar a manutenção periódica ociosa, a plataforma emite
FI_TRIM
para a mídia adotada, assim como faz para o armazenamento interno.
A especificação atual do cartão SD não oferece suporte ao comando DISCARD
,
mas o kernel volta ao comando ERASE
,
que o firmware do cartão SD pode usar para fins de otimização.
Teste
Para testar se o armazenamento adaptável está funcionando, execute este teste do CTS:
cts-tradefed run commandAndExit cts-dev \ -m CtsAppSecurityHostTestCases \ -t android.appsecurity.cts.AdoptableHostTest
Para verificar o comportamento de pen drives e cartões SD quando um dispositivo não tem um slot integrado ou quando o conector USB está sendo usado para uma conexão adb ativa, use:
adb shell sm set-virtual-disk true