Armazenamento adotável

O Android sempre suportou acessórios de armazenamento externo (como cartões SD), mas esses acessórios foram historicamente limitados ao simples armazenamento de arquivos, devido à sua impermanência esperada e à proteção mínima de dados 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 ligada ao dispositivo Android que a adotou, ela pode armazenar com segurança aplicativos e dados privados 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 desejam usar a mídia. Eles podem optar por adotar a mídia, que a formata e criptografa, ou podem continuar a usá-la como está para armazenamento simples de arquivos. Se decidirem adotar, a plataforma oferece a migração do conteúdo primário do armazenamento compartilhado (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 limite de armazenamento de arquivos de ~9ZB.

Os aplicativos podem ser colocados na mídia de armazenamento adotada somente quando o desenvolvedor tiver indicado 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á criptografia FBE e de metadados . Caso contrário, o armazenamento adotável utiliza criptografia de disco completo (FDE).

O layout do disco do dispositivo adotado reflete de perto a partição de dados interna, incluindo rótulos SELinux, etc. Quando multiusuário é compatível com o dispositivo Android, o dispositivo de armazenamento adotado também suporta multiusuário com o mesmo nível de isolamento que 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 usar 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ídias de armazenamento externas em locais estáveis, como um slot dentro de um compartimento de bateria ou atrás de uma tampa protetora, devem ser consideradas para adoção, para ajudar a evitar perda acidental ou corrupção 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 tipo 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. Caso o dispositivo adotado seja significativamente mais lento que o armazenamento interno, a plataforma avisa o usuário sobre uma possível experiência degradada. Este 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 desempenho ideal, o sistema de arquivos f2fs é recomendado para dispositivos de armazenamento baseados em flash.

Ao realizar 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 suporta o comando DISCARD ; mas o kernel, em vez disso, recorre ao comando ERASE , que o firmware do cartão SD pode optar por 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