Almacenamiento Adoptable

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

Cuando se adopta un medio de almacenamiento externo, se formatea y cifra para que solo funcione con un solo 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 para 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 los medios. Pueden optar por adoptar los medios, que los formatean y cifran, o pueden continuar usándolos tal cual para el almacenamiento de archivos simple. Si eligen adoptar, la plataforma ofrece migrar los contenidos de almacenamiento compartido principal (generalmente montados en /sdcard ) a los medios recién adoptados, 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 usa 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 los medios adoptados se recuerdan mientras se expulsan los medios y regresan cuando se reinsertan los medios.

Seguridad

La plataforma genera aleatoriamente claves de cifrado para cada dispositivo adoptado y las almacena en el almacenamiento interno del dispositivo Android. Esto hace que los medios adoptados sean tan seguros como el almacenamiento interno. Las claves se asocian con dispositivos adoptados en función del GUID de partición adoptado.

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

El diseño en disco del dispositivo adoptado refleja fielmente la partición de datos interna, incluidas las etiquetas de SELinux, etc. Cuando se admite multiusuario en el dispositivo Android, el dispositivo de almacenamiento adoptado también admite multiusuario con el mismo nivel de aislamiento que el dispositivo 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 externo 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 televisor, ya que el televisor completo generalmente se instala en una ubicación estable.

Cuando un usuario adopta un nuevo dispositivo de almacenamiento, la plataforma ejecuta un punto de referencia y compara su rendimiento con el 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 las aplicaciones populares de Android. Actualmente, la implementación de AOSP solo advertirá a los usuarios más allá de un único umbral, 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 estar formateados 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 el mantenimiento inactivo periódico, la plataforma emite FI_TRIM para los medios adoptados, al igual que lo hace para el almacenamiento interno. La especificación actual de la tarjeta SD no admite el comando DISCARD ; pero el núcleo, en cambio, 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 las 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