Verwendbarer Speicher

Android unterstützt seit jeher externes Speicherzubehör wie SD-Karten. Aufgrund der erwarteten begrenzten Lebensdauer und des geringen Datenschutzes bei traditionellem externem Speicher war dieses Zubehör jedoch bisher auf den einfachen Dateispeicher beschränkt. Mit Android 6.0 können externe Speichermedien als interner Speicher verwendet werden.

Wenn externe Speichermedien verwendet werden, werden sie formatiert und verschlüsselt, damit sie jeweils nur mit einem einzigen Android-Gerät verwendet werden können. Da die Medien stark mit dem Android-Gerät verknüpft sind, auf dem sie verwendet werden, können darauf sowohl Apps als auch private Daten für alle Nutzer sicher gespeichert werden.

Wenn Nutzer neue Speichermedien (z. B. eine SD-Karte) an einem anpassbaren Speicherort einlegen, werden sie von Android gefragt, wie sie die Medien verwenden möchten. Sie können die Medien übernehmen, die dann formatiert und verschlüsselt werden, oder sie für den einfachen Dateispeicher unverändert verwenden. Wenn er sich dafür entscheidet, bietet die Plattform an, den primären freigegebenen Speicherinhalt (normalerweise unter /sdcard bereitgestellt) auf die neu verwendeten Medien zu migrieren, um wertvollen Speicherplatz im internen Speicher freizugeben. Im Gegensatz zu herkömmlichem Speicher, der aufgrund der Verwendung von MBR auf 2 TB beschränkt ist, verwendet anpassbarer Speicher GPT und hat daher eine Dateispeicherbeschränkung von etwa 9 ZB.

Apps können nur dann auf unterstützten Speichermedien abgelegt werden, wenn der Entwickler die Unterstützung über das Attribut android:installLocation angegeben hat. Neu installierte unterstützte Apps werden automatisch auf dem Speichergerät mit dem größten freien Speicherplatz abgelegt. Nutzer können unterstützte Apps in den Einstellungen zwischen Speichergeräten verschieben. Apps, die auf bereitgestellte Medien verschoben wurden, werden bei Auswerfen des Mediums gespeichert und kehren zurück, wenn das Medium wieder eingesetzt wird.

Sicherheit

Die Plattform generiert nach dem Zufallsprinzip Verschlüsselungsschlüssel für jedes unterstützte Gerät und speichert sie im internen Speicher des Android-Geräts. Dadurch sind die verwendeten Medien so sicher wie der interne Speicher. Schlüssel werden Geräten basierend auf der GUID der übernommenen Partition zugewiesen.

Wenn das Gerät für die Verwendung der dateibasierten Verschlüsselung (File-Based Encryption, FBE) auf dem internen Speicher konfiguriert ist, wird für den anpassbaren Speicher sowohl die FBE als auch die Metadatenverschlüsselung verwendet. Andernfalls wird für den anpassbaren Speicher die Datenträgervollverschlüsselung (Full Disk Encryption, FDE) verwendet.

Das Layout auf dem Laufwerk des übernommenen Geräts entspricht weitgehend der internen Datenpartition, einschließlich SELinux-Labels usw. Wenn auf dem Android-Gerät die Nutzung durch mehrere Nutzer unterstützt wird, unterstützt das übernommene Speichergerät auch die Nutzung durch mehrere Nutzer mit derselben Isolationsebene wie der interne Speicher.

Da der Inhalt eines adoptierten Speichergeräts eng mit dem Android-Gerät verknüpft ist, von dem es übernommen wurde, sollten die Verschlüsselungsschlüssel nicht vom übergeordneten Gerät extrahiert werden können. Daher kann das Speichergerät nicht an anderer Stelle bereitgestellt werden.

Wenn auf Ihrem Gerät FBE verwendet wird, finden Sie in der FBE-Dokumentation und in der Dokumentation zur Verschlüsselung von Metadaten Informationen dazu, wie Sie FBE und die Verschlüsselung von Metadaten auf einem anpassbaren Speicher konfigurieren.

Leistung und Stabilität

Es sollten nur externe Speichermedien an stabilen Standorten wie einem Steckplatz im Akkufach oder hinter einer Schutzabdeckung verwendet werden, um versehentliche Datenverluste oder Beschädigungen zu vermeiden. Insbesondere USB-Geräte, die mit einem Smartphone oder Tablet verbunden sind, sollten niemals in Betracht gezogen werden. Eine häufige Ausnahme ist ein externes USB-Speichergerät, das mit einem Fernseher verbunden ist, da der gesamte Fernseher in der Regel an einem stabilen Ort installiert ist.

Wenn ein Nutzer ein neues Speichergerät verwendet, führt die Plattform einen Benchmark aus und vergleicht die Leistung mit dem internen Speicher. Wenn das verwendete Gerät deutlich langsamer als der interne Speicher ist, warnt die Plattform den Nutzer vor einer möglicherweise beeinträchtigten Leistung. Dieser Benchmark wurde aus dem tatsächlichen I/O-Verhalten beliebter Android-Apps abgeleitet. Derzeit warnt die AOSP-Implementierung Nutzer nur, wenn ein bestimmter Grenzwert überschritten wird. Gerätehersteller können dies jedoch weiter anpassen, z. B. die Nutzung vollständig ablehnen, wenn die Karte extrem langsam ist.

Übernommene Geräte müssen mit einem Dateisystem formatiert sein, das POSIX-Berechtigungen und erweiterte Attribute unterstützt, z. B. ext4 oder f2fs. Für eine optimale Leistung wird das f2fs-Dateisystem für flashbasierte Speichergeräte empfohlen.

Bei der regelmäßigen Inaktivitätswartung gibt die Plattform FI_TRIM für adoptierte Medien aus, genau wie für den internen Speicher. Die aktuelle SD-Karten-Spezifikation unterstützt den Befehl DISCARD nicht. Der Kernel greift stattdessen auf den Befehl ERASE zurück, den die SD-Karten-Firmware möglicherweise zu Optimierungszwecken verwendet.

Testen

Führen Sie diesen CTS-Test aus, um zu prüfen, ob der anpassbare Speicher funktioniert:

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

Wenn Sie das Verhalten von USB-Speichern und SD-Karten prüfen möchten, wenn ein Gerät keinen integrierten Anschluss hat oder der USB-Anschluss für eine aktive ADB-Verbindung verwendet wird, verwenden Sie Folgendes:

adb shell sm set-virtual-disk true