El almacenamiento externo se administra mediante una combinación del init vold
y el servicio del sistema StorageManagerService
. Montaje de
de los volúmenes de almacenamiento externo físico son controlados por vold
, que
Realiza operaciones de etapa de pruebas para preparar el contenido multimedia antes de exponerlo a las apps.
Nota: En Android 8.0, la
Se cambió el nombre de la clase MountService
a
StorageManagerService
Asignaciones de archivos
Para Android 4.2.2 y versiones anteriores, la vold.fstab
específica del dispositivo
El archivo de configuración define las asignaciones de dispositivos sysfs a activación del sistema de archivos
puntos, y cada línea sigue este formato:
dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
label
: Etiqueta para el volumen.mount_point
: Es la ruta de acceso del sistema de archivos en la que se debe activar el volumen.partition
: Número de partición (basado en 1) o “automático” para la primera partición que se pueda usar.sysfs_path
: Una o más rutas de acceso de sysfs a dispositivos que pueden proporcionar este soporte punto. Deben estar separadas por espacios y cada una debe comenzar con/
.flags
: Es la lista de marcas opcionales separadas por comas, no debe contener/
. Entre los valores posibles, se incluyennonremovable
yencryptable
.
Para las versiones 4.3 y posteriores de Android, los distintos archivos fstab utilizados por init, vold y
la recuperación se unificaron en el archivo /fstab.<device>
. Para uso externo
volúmenes de almacenamiento administrados por vold
, las entradas deben tener
con el siguiente formato:
<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
src
: Es una ruta de acceso en sysfs (generalmente activada en /sys) al dispositivo que puede proporcionar el punto de activación. La ruta de acceso debe comenzar con/
.mount_point
: Es la ruta de acceso del sistema de archivos en la que se debe activar el volumen.type
: Es el tipo de sistema de archivos en el volumen. En el caso de las tarjetas externas, suele servfat
.mnt_flags
:Vold
ignora este campo y debe configurarse paradefaults
fs_mgr_flags
:Vold
ignora cualquier línea en la fstab unificada que no incluyen la marcavoldmanaged=
en este campo. Esta marca debe estará seguida de una etiqueta que describe la tarjeta y un número de partición o la palabraauto
Este es un ejemplo:voldmanaged=sdcard:auto
. Otras marcas posibles sonnonremovable
,encryptable=sdcard
,noemulatedsd
yencryptable=userdata
.
Detalles de configuración
Se controlan las interacciones de almacenamiento externo en el nivel del framework y por encima de él.
a través de StorageManagerService
. Debido a cambios de configuración en
Android 6.0 (como la eliminación de la superposición de recursos storage_list.xml), el
de configuración de Terraform se dividen en dos categorías.
Android 5.x y versiones anteriores
La configuración de storage_list.xml
específica del dispositivo
, generalmente proporcionado a través de una superposición de frameworks/base
, define la
atributos y restricciones de los dispositivos de almacenamiento. El elemento <StorageList>
contiene uno o más elementos <storage>
, de los cuales se debe marcar exactamente uno
primario. Entre los atributos de <storage>
, se incluyen los siguientes:
mountPoint
: Es la ruta de acceso del sistema de archivos de esta activación.storageDescription
: Es el recurso de cadenas que describe esta activación.primary
: Es verdadero si esta activación es el almacenamiento externo principal.removable
: Es verdadero si este soporte tiene medios extraíbles, como una tarjeta SD física. tarjeta.emulated
: Es verdadero si este soporte se emula y está respaldado por el almacenamiento interno. tal vez con un daemon FUSE.mtp-reserve
: Cantidad de MB de almacenamiento que MTP debe reservar de forma gratuita y almacenamiento de los datos. Solo se usa cuando el soporte se marca como emulado.allowMassStorage
: Es verdadero si este soporte se puede compartir mediante el almacenamiento masivo USB.maxFileSize
: Es el tamaño máximo del archivo en MB.
Los dispositivos pueden proporcionar almacenamiento externo emulando
un sistema de archivos sin permisos respaldado por el almacenamiento interno. Una posible
la proporciona el daemon del FUSE en system/core/sdcard
, que puede
agregarse como un servicio init.rc
específico del dispositivo:
# virtual sdcard daemon running as media_rw (1023) service sdcard /system/bin/sdcard <source_path> <dest_path> 1023 1023 class late_start
Donde source_path
es el almacenamiento interno de copia de seguridad y dest_path
es el almacenamiento interno de copia de seguridad.
punto de activación de destino.
Cuando configuras una secuencia de comandos init.rc
específica del dispositivo, el EXTERNAL_STORAGE
variable de entorno debe definirse como la ruta de acceso a la red
y almacenamiento de los datos. La ruta de acceso /sdcard
también debe resolverse en la misma ubicación, posiblemente
a través de un symlink. Si un dispositivo ajusta la ubicación del almacenamiento externo entre
de la plataforma, se deben crear symlinks para que las rutas antiguas sigan funcionando.
Android 6.0
La configuración del subsistema de almacenamiento ahora se concentra
archivo fstab
específico del dispositivo y se cargaron varios archivos/variables históricos de configuración estática
se quitaron para admitir un comportamiento más dinámico:
- Se quitó la superposición de recursos
storage_list.xml
, y el framework ya no la usa. Los dispositivos de almacenamiento ahora se configuran de forma dinámica cuando los detectavold
. - Se quitaron las variables de entorno
EMULATED_STORAGE_SOURCE/TARGET
, y Zygote ya no las usa para configurar puntos de activación específicos del usuario. En su lugar, la separación de usuarios ahora se aplica con GID específicos del usuario, y el almacenamiento compartido principal se activa en el lugar mediantevold
durante el tiempo de ejecución.- Los desarrolladores pueden seguir creando rutas de forma dinámica o estática según
su caso de uso. Incluir el UUID en la ruta identifica cada tarjeta que se debe crear
una ubicación más clara para los desarrolladores. (Por ejemplo,
/storage/ABCD-1234/report.txt
es claramente un archivo diferente a/storage/DCBA-4321/report.txt
).
- Los desarrolladores pueden seguir creando rutas de forma dinámica o estática según
su caso de uso. Incluir el UUID en la ruta identifica cada tarjeta que se debe crear
una ubicación más clara para los desarrolladores. (Por ejemplo,
- Los servicios de FUSE codificados se quitaron de los archivos
init.rc
específicos del dispositivo y, en su lugar, se bifurcan de forma dinámica desdevold
cuando es necesario.
Además de estos cambios de configuración, Android 6.0 incluye la noción de y el almacenamiento adoptable. Para dispositivos con Android 6.0, cualquier medio físico que no sea adoptado se considera portátil.
Almacenamiento adoptable
Para indicar un dispositivo de almacenamiento adoptable en fstab
, usa el atributo encryptable=userdata
en el campo fs_mgr_flags
. Esta es una definición típica:
/devices/platform/mtk-msdc.1/mmc_host* auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata
Cuando se adopta un dispositivo de almacenamiento, la plataforma borra el contenido y escribe Tabla de particiones GUID que define dos particiones:
- una pequeña partición de
android_meta
vacía que se reserva para uso futuro. El GUID del tipo de partición es 19A710A2-B3CA-11E4-B026-10604B889DCF. - una partición
android_ext
grande que se encripta con dm-crypt y se formatea conext4
of2fs
, según las funciones del kernel El GUID del tipo de partición es 193D1EA4-B3CA-11E4-B075-10604B889DCF.
Almacenamiento portátil
En fstab
, los dispositivos de almacenamiento con el atributo voldmanaged
se consideran portátiles de forma predeterminada, a menos que se utilice otro atributo.
como encryptable=userdata
. Por ejemplo, esta es una definición típica de dispositivos USB OTG:
/devices/*/xhci-hcd.0.auto/usb* auto auto defaults voldmanaged=usb:auto
La plataforma usa blkid
para detectar los tipos de sistemas de archivos antes de activarse, y los usuarios pueden optar por formatear el
cuando el sistema de archivos no es compatible.