Externer Speicher wird über eine Kombination aus vold
-Instanzen verwaltet
und StorageManagerService
-Systemdienst. Montage von
Die physischen externen Speicher-Volumes werden von vold
verwaltet,
führt Staging-Vorgänge aus, um die Medien vorzubereiten, bevor sie für Anwendungen freigegeben werden.
Hinweis: Unter Android 8.0 wird die
MountService
Kurs wurde umbenannt in
StorageManagerService
.
Dateizuordnungen
Unter Android 4.2.2 und niedriger wird die gerätespezifische vold.fstab
Die Konfigurationsdatei definiert Zuordnungen von Sysfs-Geräten zur Dateisystembereitstellung
und jede Zeile hat folgendes Format:
dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
label
: Label für das Volume.mount_point
: Dateisystempfad, in dem das Volume bereitgestellt werden soll.partition
: Partitionsnummer (1-basiert) oder „auto“ für die erste nutzbare Partition.sysfs_path
: Ein oder mehrere Sysfs-Pfade zu Geräten, die diese Bereitstellung bereitstellen können Punkt. Sie sind durch Leerzeichen getrennt und jedes Zeichen muss mit/
beginnen.flags
: Optionale, durch Kommas getrennte Liste von Flags. Sie darf/
nicht enthalten. Mögliche Werte sindnonremovable
undencryptable
.
Unter Android 4.3 und höher wurden die verschiedenen fstab-Dateien, die von init, vold und
Wiederherstellung wurden in der Datei /fstab.<device>
vereinheitlicht. Für externe
die von vold
verwaltet werden, sollten die Einträge die
folgendes Format:
<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
src
: Pfad unter „sysfs“ (normalerweise unter „/sys“) zu dem Gerät, das den Mountpoint angeben können. Der Pfad muss mit/
beginnen.mount_point
: Dateisystempfad, in dem das Volume bereitgestellt werden soll.type
: Der Typ des Dateisystems auf dem Volume. Bei externen Karten ist dies normalerweisevfat
.mnt_flags
:Vold
ignoriert dieses Feld und sollte festgelegt werden. bisdefaults
fs_mgr_flags
:Vold
ignoriert alle Zeilen im einheitlichen fstab. die in diesem Feld nicht das Flagvoldmanaged=
enthalten. Dieses Flag muss gefolgt von einer Beschreibung der Karte und einer Partitionsnummer oder dem Wortauto
Hier ein Beispiel:voldmanaged=sdcard:auto
. Weitere mögliche Flags sindnonremovable
,encryptable=sdcard
,noemulatedsd
undencryptable=userdata
.
Konfigurationsdetails
Externe Speicherinteraktionen auf und oberhalb der Framework-Ebene werden verarbeitet.
bis StorageManagerService
. Aufgrund von Konfigurationsänderungen in
Unter Android 6.0 (wie das Entfernen des Ressourcen-Overlays „storage_list.xml“) wird der
Konfigurationsdetails sind in zwei Kategorien unterteilt.
Android 5.x und niedriger
Die gerätespezifische storage_list.xml
-Konfiguration
-Datei, die normalerweise über ein frameworks/base
-Overlay bereitgestellt wird, definiert das
Attribute und Einschränkungen von Speichergeräten. Das <StorageList>
-Element
enthält ein oder mehrere <storage>
-Elemente, von denen genau eines markiert werden muss
primär. Zu den <storage>
-Attributen gehören:
mountPoint
: Dateisystempfad dieser Bereitstellung.storageDescription
: Stringressource, die diese Bereitstellung beschreibt.primary
: „true“, wenn diese Bereitstellung der primäre externe Speicher ist.removable
: „true“, wenn diese Halterung Wechseldatenträger enthält, z. B. eine physische SD-Karte .emulated
: „true“, wenn diese Bereitstellung emuliert und durch den internen Speicher gesichert wird, möglicherweise mit einem FUSE-Daemon.mtp-reserve
: Anzahl der MB Speicher, die MTP kostenlos reservieren soll. Speicherplatz. Wird nur verwendet, wenn die Halterung als emuliert gekennzeichnet ist.allowMassStorage
: „true“, wenn diese Bereitstellung über einen USB-Massenspeicher freigegeben werden kann.maxFileSize
: maximale Dateigröße in MB
Geräte können externen Speicher bereitstellen, indem sie ein
berechtigungsloses Dateisystem mit internem Speicher. Eine Möglichkeit
wird vom FUSE-Daemon in system/core/sdcard
bereitgestellt, der
als gerätespezifischer init.rc
-Dienst hinzugefügt:
# virtual sdcard daemon running as media_rw (1023) service sdcard /system/bin/sdcard <source_path> <dest_path> 1023 1023 class late_start
Dabei ist source_path
der unterstützende interne Speicher und dest_path
der
Zielbereitstellungspunkt.
Beim Konfigurieren eines gerätespezifischen init.rc
-Skripts wird der EXTERNAL_STORAGE
Umgebungsvariable muss als Pfad zur primären externen
Speicherplatz. Der Pfad /sdcard
muss möglicherweise in denselben Speicherort aufgelöst werden.
über einen Symlink. Wenn ein Gerät den Standort des externen Speichers zwischen
sollten Symlinks erstellt werden, damit alte Pfade weiterhin funktionieren.
Android 6.0
Die Konfiguration des Speichersubsystems konzentriert sich jetzt auf die
gerätespezifische fstab
-Datei und mehrere frühere statische Konfigurationsdateien/Variablen
entfernt, um ein dynamischeres Verhalten zu unterstützen:
- Das Ressourcen-Overlay
storage_list.xml
wurde entfernt und wird vom Framework nicht mehr verwendet. Speichergeräte werden jetzt dynamisch konfiguriert, wenn sie vonvold
erkannt werden. - Die Umgebungsvariablen
EMULATED_STORAGE_SOURCE/TARGET
wurden entfernt und werden von Zygote nicht mehr für folgende Aktionen verwendet: nutzerspezifische Bereitstellungspunkte konfigurieren. Stattdessen wird die Nutzertrennung mit nutzerspezifischen GIDs und der freigegebene Primärspeicher wird vonvold
zur Laufzeit bereitgestellt.- Entwickler können Pfade weiterhin dynamisch oder statisch erstellen,
für ihren Anwendungsfall. Das Einschließen der UUID in den Pfad kennzeichnet jede Karte, die erstellt werden soll
Entwicklern die Standorterkennung erleichtern. (Beispielsweise ist
/storage/ABCD-1234/report.txt
eine andere Datei als/storage/DCBA-4321/report.txt
.)
- Entwickler können Pfade weiterhin dynamisch oder statisch erstellen,
für ihren Anwendungsfall. Das Einschließen der UUID in den Pfad kennzeichnet jede Karte, die erstellt werden soll
Entwicklern die Standorterkennung erleichtern. (Beispielsweise ist
- Die hartcodierten FUSE-Dienste wurden aus gerätespezifischen
init.rc
-Dateien entfernt und bei Bedarf dynamisch ausvold
verzweigt.
Zusätzlich zu diesen Konfigurationsänderungen enthält Android 6.0 das Konzept akzeptablen Speicher. Bei Geräten mit Android 6.0 werden alle physischen Medien, die nicht als tragbar angesehen wird.
Verwendbarer Speicher
Um ein geeignetes Speichergerät in fstab
anzugeben, verwenden Sie das Attribut encryptable=userdata
im Feld fs_mgr_flags
. Hier eine typische Definition:
/devices/platform/mtk-msdc.1/mmc_host* auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata
Wenn ein Speichergerät verwendet wird, löscht die Plattform die Inhalte und schreibt eine GUID-Partitionstabelle, die zwei Partitionen definiert:
- eine kleine leere
android_meta
-Partition, die für die zukünftige Verwendung reserviert ist. Der Partitionstyp GUID lautet 19A710A2-B3CA-11E4-B026-10604B889DCF. - eine große Partition
android_ext
, die mit dm-crypt verschlüsselt und abhängig von den Kernel-Funktionen mitext4
oderf2fs
formatiert ist. Der Partitionstyp GUID lautet 193D1EA4-B3CA-11E4-B075-10604B889DCF.
Mobiler Speicher
Im fstab
gelten Speichergeräte mit dem Attribut voldmanaged
standardmäßig als tragbar, es sei denn, ein anderes Attribut
z. B. encryptable=userdata
definiert ist. Hier ist zum Beispiel eine typische Definition für USB-OTG-Geräte:
/devices/*/xhci-hcd.0.auto/usb* auto auto defaults voldmanaged=usb:auto
Die Plattform verwendet blkid
, um Dateisystemtypen vor der Bereitstellung zu erkennen, und Nutzer können die
wenn das Dateisystem nicht unterstützt wird.