Armazenamento Adotável

O Android sempre deu suporte a acessórios de armazenamento externo (como cartões SD), mas esses acessórios eram historicamente limitados ao armazenamento de arquivos simples, devido à sua impermanência esperada e à proteção de dados mínima oferecida ao armazenamento externo tradicional . O Android 6.0 introduziu a capacidade de adotar mídia de armazenamento externo para atuar como armazenamento interno.

Quando a mídia de armazenamento externa é 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 aplicativos e dados privados para 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 desejam usar a mídia. Eles podem optar por adotar a mídia, que a formata e criptografa, ou podem continuar usando-a como está para armazenamento de arquivos simples. Se eles optarem por adotar, a plataforma oferece a migração do conteúdo do armazenamento compartilhado primário (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 adotável usa GPT e, portanto, tem um limite de armazenamento de arquivos de ~ 9ZB.

Os aplicativos podem ser colocados na mídia de armazenamento adotada somente quando o desenvolvedor indicou suporte por meio do atributo android:installLocation . Novas instalações de aplicativos compatíveis são colocadas automaticamente no dispositivo de armazenamento com mais espaço livre, e os usuários podem mover aplicativos compatíveis entre dispositivos de armazenamento no aplicativo Configurações . Os aplicativos movidos para a 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 efetivamente torna a mídia adotada tão segura quanto o armazenamento interno. As chaves são associadas aos dispositivos adotados com base no GUID da partição adotada.

Se o dispositivo estiver configurado para usar criptografia baseada em arquivo (FBE) em seu armazenamento interno, o armazenamento adotável usará FBE e criptografia de metadados . Caso contrário, o armazenamento adotável usa criptografia de disco completo (FDE).

O layout em disco do dispositivo adotado espelha de perto a partição de dados interna, incluindo rótulos SELinux, etc. Quando multiusuário é suportado no dispositivo Android, o dispositivo de armazenamento adotado também suporta multiusuário com o mesmo nível de isolamento interno armazenar.

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 devem ser extraídas do dispositivo pai e, portanto, o dispositivo de armazenamento não pode ser montado em outro lugar.

Se o seu dispositivo usa FBE, consulte a documentação do FBE e a documentação de criptografia de metadados para saber como configurar o FBE e a criptografia de metadados no armazenamento adotável.

Desempenho e estabilidade

Somente mídia de armazenamento externa em locais estáveis, como um slot dentro de um compartimento de bateria ou atrás de uma tampa protetora, deve ser considerada para adoção para ajudar a evitar perda ou corrupção acidental de dados. Em particular, dispositivos USB conectados a um telefone ou tablet nunca devem ser considerados para adoção. Uma exceção comum seria uma unidade USB externa conectada a um dispositivo estilo TV, porque a TV inteira normalmente é instalada em um local estável.

Quando um usuário adota um novo dispositivo de armazenamento, a plataforma executa um benchmark e compara seu desempenho com o armazenamento interno. Se o dispositivo adotado for significativamente mais lento que o armazenamento interno, a plataforma avisa o usuário sobre uma experiência possivelmente degradada. Esse benchmark foi derivado do comportamento real de E/S de aplicativos Android populares. Atualmente, a implementação do AOSP só avisará os usuários além de um único limite, mas os fabricantes de dispositivos podem adaptar isso ainda mais, como rejeitar completamente a adoção se o cartão for extremamente lento.

Os dispositivos adotados devem ser formatados com um sistema de arquivos que suporte permissões POSIX e atributos estendidos, como ext4 ou f2fs . Para um desempenho ideal, o sistema de arquivos f2fs é recomendado para dispositivos de armazenamento baseados em flash.

Ao realizar manutenções periódicas ociosas, 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 suporta o comando DISCARD ; mas o kernel volta para o comando ERASE , que o firmware do cartão SD pode escolher usar para fins de otimização.

Teste

Para testar se o armazenamento adotável está funcionando, execute este teste CTS:

cts-tradefed run commandAndExit cts-dev \
    -m CtsAppSecurityHostTestCases \
    -t android.appsecurity.cts.AdoptableHostTest

Para verificar o comportamento de unidades USB e cartões SD quando um dispositivo não possui 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