Le stockage externe est géré par une combinaison de l'initialisation vold
et le service système StorageManagerService
. Installation de
volumes de stockage externes physiques est géré par vold
, qui
effectue des opérations de préproduction pour préparer le contenu multimédia avant de l'exposer aux applications.
Remarque:Dans Android 8.0, le
La classe MountService
a été renommée en
StorageManagerService
Mappages de fichiers
Pour Android 4.2.2 et versions antérieures, le vold.fstab
propre à l'appareil
définit les mappages entre les appareils sysfs et l'installation du système de fichiers
et le format de chaque ligne est le suivant:
dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
label
: libellé du volume.mount_point
: chemin d'accès au système de fichiers où le volume doit être installé.partition
: numéro de partition (basé sur 1) ou "auto" pour la première partition utilisable.sysfs_path
: un ou plusieurs chemins d'accès sysfs vers des périphériques pouvant fournir ce montage point d'accès. Séparés par des espaces, chacun d'entre eux doit commencer par/
.flags
: liste facultative d'indicateurs séparés par une virgule. Ne doit pas contenir/
. Les valeurs possibles sontnonremovable
etencryptable
.
Pour Android 4.3 et versions ultérieures, les différents fichiers fstab utilisés par init, vold et
la récupération ont été unifiées dans le fichier /fstab.<device>
. Externe
volumes de stockage gérés par vold
, les entrées doivent avoir
le format suivant:
<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
src
: chemin d'accès sous sysfs (généralement installé dans /sys) vers le périphérique qui peut fournir le point d'installation. Le chemin d'accès doit commencer par/
.mount_point
: chemin d'accès au système de fichiers où le volume doit être installé.type
: type du système de fichiers sur le volume. Pour les cartes externes, il s'agit généralement devfat
.mnt_flags
:Vold
ignore ce champ et doit être défini àdefaults
fs_mgr_flags
:Vold
ignore toutes les lignes du fichier fstab unifié qui n'incluent pas l'optionvoldmanaged=
dans ce champ. Cet indicateur ne doit être suivie d'une étiquette décrivant la carte, et d'un numéro de partition ou du motauto
Voici un exemple:voldmanaged=sdcard:auto
. Les autres options possibles sontnonremovable
,encryptable=sdcard
,noemulatedsd
etencryptable=userdata
.
Détails de la configuration
Les interactions avec le stockage externe au niveau du framework et au-dessus sont gérées
à StorageManagerService
. En raison de modifications de configuration dans
Android 6.0 (comme la suppression de la superposition de ressources storage_list.xml), la
les détails de configuration
sont divisés en deux catégories.
Android 5.x et versions antérieures
Configuration storage_list.xml
spécifique à l'appareil
, généralement fourni via une superposition frameworks/base
, définit le
les attributs et les contraintes
des périphériques de stockage. L'élément <StorageList>
contient un ou plusieurs éléments <storage>
, dont un seul doit être marqué
principale. Les attributs <storage>
incluent:
mountPoint
: chemin d'accès au système de fichiers de ce montage.storageDescription
: ressource de chaîne qui décrit l'installation.primary
: "true" si cet installation est la mémoire de stockage externe principale.removable
: vrai si ce support est équipé d'un support amovible, tel qu'une carte SD physique .emulated
: "true" si ce montage est émulé et sauvegardé par la mémoire de stockage interne. éventuellement à l'aide d'un daemon FUSE.mtp-reserve
: nombre de Mo de stockage que MTP doit réserver sans frais stockage. Utilisé uniquement lorsque l'installation est marquée comme émulée.allowMassStorage
: "true" si ce support peut être partagé via la mémoire de stockage de masse USB.maxFileSize
: taille maximale du fichier en Mo.
Les appareils peuvent fournir un stockage externe en émulant
Système de fichiers sans autorisation sauvegardé par la mémoire de stockage interne. Une possibilité
implémentation est fournie par le daemon FUSE dans system/core/sdcard
, qui peut
en tant que service init.rc
spécifique à l'appareil:
# virtual sdcard daemon running as media_rw (1023) service sdcard /system/bin/sdcard <source_path> <dest_path> 1023 1023 class late_start
Où source_path
est la mémoire de stockage interne de sauvegarde et dest_path
est la
le point d'installation cible.
Lors de la configuration d'un script init.rc
spécifique à l'appareil, EXTERNAL_STORAGE
doit être définie comme étant le chemin d'accès à l'instance
stockage. Le chemin d'accès /sdcard
doit aussi pointer vers le même emplacement, éventuellement
via un lien symbolique. Si un appareil modifie l'emplacement du stockage externe entre
mises à jour de la plateforme, des liens symboliques
doivent être créés pour que les anciens chemins continuent de fonctionner.
Android 6.0
La configuration du sous-système de stockage se concentre désormais
spécifique à l'appareil fstab
et plusieurs fichiers/variables de configuration statiques historiques ont été
supprimé pour permettre un comportement plus dynamique:
- La superposition de ressources
storage_list.xml
a été supprimée et n'est plus utilisée par le framework. Les appareils de stockage sont désormais configurés de manière dynamique lorsqu'ils sont détectés parvold
. - Les variables d'environnement
EMULATED_STORAGE_SOURCE/TARGET
ont été supprimées et ne sont plus utilisées par Zygote pour configurer des points d'installation spécifiques à l'utilisateur. À la place, la séparation des utilisateurs est désormais appliquée avec des GID spécifiques aux utilisateurs, et le stockage principal partagé est installé parvold
au moment de l'exécution.- Les développeurs peuvent continuer à créer des chemins d'accès de manière dynamique ou statique en fonction
leur cas d'utilisation. Le fait d'inclure l'UUID dans le chemin permet d'identifier chaque fiche à créer
pour les développeurs. Par exemple, le fichier
/storage/ABCD-1234/report.txt
est clairement différent de/storage/DCBA-4321/report.txt
.
- Les développeurs peuvent continuer à créer des chemins d'accès de manière dynamique ou statique en fonction
leur cas d'utilisation. Le fait d'inclure l'UUID dans le chemin permet d'identifier chaque fiche à créer
pour les développeurs. Par exemple, le fichier
- Les services FUSE codés en dur ont été supprimés des fichiers
init.rc
spécifiques à l'appareil et sont dupliqués dynamiquement à partir devold
si nécessaire.
Outre ces modifications de configuration, Android 6.0 inclut la notion de stockage adoptable. Pour les appareils Android 6.0, tout support physique qui n'est pas adoptée est considérée comme portable.
Stockage adoptable
Pour indiquer un périphérique de stockage adoptable dans le fstab
, utilisez l'attribut encryptable=userdata
dans le champ fs_mgr_flags
. Voici une définition typique:
/devices/platform/mtk-msdc.1/mmc_host* auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata
Lorsqu'un périphérique de stockage est adopté, la plate-forme efface le contenu et écrit un Table de partition GUID définissant deux partitions:
- une petite partition
android_meta
vide réservée pour une utilisation ultérieure. Le GUID de type de partition est 19A710A2-B3CA-11E4-B026-10604B889DCF - Une grande partition
android_ext
chiffrée à l'aide de dm-crypt et formatée à l'aide deext4
ouf2fs
selon les capacités du noyau. Le GUID de type de partition est 193D1EA4-B3CA-11E4-B075-10604B889DCF
Mémoire de stockage externe
Dans le fstab
, les périphériques de stockage avec l'attribut voldmanaged
sont considérés comme portables par défaut, sauf si un autre attribut
comme encryptable=userdata
. Par exemple, voici une définition classique pour les appareils USB OTG:
/devices/*/xhci-hcd.0.auto/usb* auto auto defaults voldmanaged=usb:auto
La plate-forme utilise blkid
pour détecter les types de systèmes de fichiers avant l'installation, et les utilisateurs peuvent choisir de formater le
média lorsque le système de fichiers n'est pas pris en charge.