Almacenamiento adoptable

Android siempre ha admitido accesorios de almacenamiento externo (como tarjetas SD), pero estos accesorios históricamente se limitaban al simple almacenamiento de archivos, debido a su esperada impermanencia y a la mínima protección de datos que ofrecía el almacenamiento externo tradicional . Android 6.0 introdujo la capacidad de adoptar medios de almacenamiento externos para que actúen como almacenamiento interno.

Cuando se adopta un medio de almacenamiento externo, se formatea y cifra para que funcione únicamente con un único dispositivo Android a la vez. Debido a que los medios están fuertemente vinculados al dispositivo Android que los adoptó, pueden almacenar de forma segura tanto aplicaciones como datos privados de todos los usuarios.

Cuando los usuarios insertan nuevos medios de almacenamiento (como una tarjeta SD) en una ubicación adoptable, Android les pregunta cómo quieren usar esos medios. Pueden optar por adoptar el medio, que lo formatea y cifra, o pueden continuar usándolo tal como está para un almacenamiento simple de archivos. Si deciden adoptarlo, la plataforma ofrece migrar el contenido del almacenamiento compartido principal (normalmente montado en /sdcard ) al medio recién adoptado, liberando espacio valioso en el almacenamiento interno. A diferencia del almacenamiento tradicional, que está limitado a 2 TB debido al uso de MBR , el almacenamiento adoptable utiliza GPT y, por lo tanto, tiene un límite de almacenamiento de archivos de ~9ZB.

Las aplicaciones se pueden colocar en medios de almacenamiento adoptados solo cuando el desarrollador haya indicado soporte a través del atributo android:installLocation . Las nuevas instalaciones de aplicaciones compatibles se colocan automáticamente en el dispositivo de almacenamiento con más espacio libre y los usuarios pueden mover aplicaciones compatibles entre dispositivos de almacenamiento en la aplicación Configuración . Las aplicaciones movidas a medios adoptados se recuerdan mientras se expulsa el medio y regresan cuando se reinserta el medio.

Seguridad

La plataforma genera aleatoriamente claves de cifrado para cada dispositivo adoptado y las almacena en el almacenamiento interno del dispositivo Android. Esto efectivamente hace que los medios adoptados sean tan seguros como el almacenamiento interno. Las claves están asociadas con los dispositivos adoptados según el GUID de la partición adoptada.

Si el dispositivo está configurado para utilizar cifrado basado en archivos (FBE) en su almacenamiento interno, el almacenamiento adoptable utiliza tanto FBE como cifrado de metadatos . De lo contrario, el almacenamiento adoptable utiliza cifrado de disco completo (FDE).

El diseño en disco del dispositivo adoptado refleja fielmente la partición de datos interna, incluidas las etiquetas SELinux, etc. Cuando el dispositivo Android admite la función multiusuario, el dispositivo de almacenamiento adoptado también admite la función multiusuario con el mismo nivel de aislamiento que el interno. almacenamiento.

Debido a que el contenido de un dispositivo de almacenamiento adoptado está fuertemente vinculado al dispositivo Android que lo adoptó, las claves de cifrado no deben poder extraerse del dispositivo principal y, por lo tanto, el dispositivo de almacenamiento no se puede montar en otro lugar.

Si su dispositivo usa FBE, consulte la documentación de FBE y la documentación de cifrado de metadatos para saber cómo configurar FBE y el cifrado de metadatos en el almacenamiento adoptable.

Rendimiento y estabilidad

Solo se debe considerar la adopción de medios de almacenamiento externos en ubicaciones estables, como una ranura dentro del compartimiento de la batería o detrás de una cubierta protectora, para ayudar a evitar la pérdida o corrupción accidental de datos. En particular, nunca se debe considerar la adopción de dispositivos USB conectados a un teléfono o tableta. Una excepción común sería una unidad USB externa conectada a un dispositivo estilo TV, porque todo el televisor generalmente se instala en una ubicación estable.

Cuando un usuario adopta un nuevo dispositivo de almacenamiento, la plataforma realiza una evaluación comparativa y compara su rendimiento con el del almacenamiento interno. Si el dispositivo adoptado es significativamente más lento que el almacenamiento interno, la plataforma advierte al usuario sobre una posible experiencia degradada. Este punto de referencia se derivó del comportamiento real de E/S de aplicaciones populares de Android. Actualmente, la implementación de AOSP solo advertirá a los usuarios más allá de un umbral único, pero los fabricantes de dispositivos pueden adaptar esto aún más, como rechazar la adopción por completo si la tarjeta es extremadamente lenta.

Los dispositivos adoptados deben formatearse con un sistema de archivos que admita permisos POSIX y atributos extendidos, como ext4 o f2fs . Para un rendimiento óptimo, se recomienda el sistema de archivos f2fs para dispositivos de almacenamiento basados ​​en flash.

Al realizar un mantenimiento inactivo periódico, la plataforma emite FI_TRIM a los medios adoptados tal como lo hace con el almacenamiento interno. La especificación actual de la tarjeta SD no admite el comando DISCARD ; pero el kernel recurre al comando ERASE , que el firmware de la tarjeta SD puede optar por utilizar con fines de optimización.

Pruebas

Para probar que el almacenamiento adoptable funciona, ejecute esta prueba CTS:

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

Para verificar el comportamiento de las unidades USB y tarjetas SD cuando un dispositivo no tiene una ranura incorporada o cuando el conector USB se usa para una conexión adb activa, use:

adb shell sm set-virtual-disk true