Android zawsze obsługiwał akcesoria do pamięci zewnętrznej (takie jak karty SD), ale ze względu na ich przewidywany czas użytkowania i minimalną ochronę danych oferowaną przez tradycyjną pamięć zewnętrzną, były one używane głównie do prostego przechowywania plików. Android 6.0 wprowadził możliwość zastosowania zewnętrznych nośników danych do działania jak pamięć wewnętrzna.
Gdy zewnętrzny nośnik pamięci zostanie zaakceptowany, jest formatowany i szyfrowany tak, aby działał tylko z jednym urządzeniem z Androidem. Ponieważ nośnik jest mocno powiązany z urządzeniem z Androidem, które go zaadoptowało, może bezpiecznie przechowywać zarówno aplikacje, jak i dane prywatne wszystkich użytkowników.
Gdy użytkownicy wkładają nowe nośniki pamięci (np. kartę SD) do miejsca przeznaczonego do adoptowania, Android pyta, jak chcą go wykorzystać. Mogą zaadoptować nośnik, co spowoduje jego sformatowanie i zaszyfrowanie, albo mogą nadal z niego korzystać w niezmienionej formie w celu prostego przechowywania plików. Jeśli zdecyduje się na przyjęcie, platforma zaproponuje migrację zawartości głównego udostępnionego miejsca na dane (zazwyczaj zamontowanego w miejscu/sdcard
) na nowo przyjęte nośniki, co pozwoli zaoszczędzić cenne miejsce na dysku wewnętrznym. W przeciwieństwie do tradycyjnego miejsca na dane, które jest ograniczone do 2 TB ze względu na stosowanie MBR, adoptowalne miejsce na dane korzysta z GPT, a więc ma limit miejsca na dane wynoszący około 9 ZB.
Aplikacje można umieszczać na dostosowanych nośnikach pamięci tylko wtedy, gdy deweloper wskazał obsługę za pomocą atrybutu android:installLocation
.
Nowe instalacje obsługiwanych aplikacji są automatycznie umieszczane na urządzeniu pamięci masowej z największą ilością wolnego miejsca, a użytkownicy mogą przenosić obsługiwane aplikacje między urządzeniami pamięci masowej w aplikacji Ustawienia. Aplikacje przeniesione na nośniki adoptowane są zapamiętywane, gdy nośnik jest wyjmowany, i powracają, gdy jest ponownie wkładany.
Bezpieczeństwo
Platforma losowo generuje klucze szyfrowania dla każdego adoptowanego urządzenia i zapisuje je w pamięci wewnętrznej urządzenia z Androidem. Dzięki temu zaadoptowane media są tak samo bezpieczne jak pamięć wewnętrzna. Klucze są powiązane z adoptowanymi urządzeniami na podstawie identyfikatora GUID partycji.
Jeśli urządzenie jest skonfigurowane tak, aby używać szyfrowania na poziomie pliku (FBE) w pamięci wewnętrznej, pamięć adoptowana korzysta zarówno z FBE, jak i z szyfrowania metadanych. W przeciwnym razie adoptowane miejsce na dane używa szyfrowania całego dysku (FDE).
Układ na dysku adoptowanego urządzenia jest bardzo podobny do wewnętrznej partycji danych, w tym etykiet SELinux. Jeśli urządzenie z Androidem obsługuje tryb wieloużytkownika, adoptowane urządzenie do przechowywania danych również obsługuje ten tryb z tym samym poziomem izolacji co pamięć wewnętrzna.
Treści na adoptowanym urządzeniu pamięci masowej są silnie powiązane z urządzeniem z Androidem, które je adoptowało, dlatego kluczy szyfrujących nie można wyodrębnić z urządzenia nadrzędnego, a urządzenie pamięci masowej nie może być zamontowane gdzie indziej.
Jeśli Twoje urządzenie korzysta z FBE, zapoznaj się z dokumentacją dotyczącą FBE i dokumentacją dotyczącą szyfrowania metadanych, aby dowiedzieć się, jak skonfigurować szyfrowanie FBE i szyfrowanie metadanych w przypadku adoptowanego miejsca na dane.
Wydajność i stabilność
Należy rozważyć przyjęcie tylko zewnętrznych nośników danych w stabilnych miejscach, takich jak gniazdo w komorze baterii lub za osłoną ochronną, aby uniknąć przypadkowego utraty lub uszkodzenia danych. W szczególności nie należy brać pod uwagę urządzeń USB podłączonych do telefonu lub tabletu. Typowym wyjątkiem jest zewnętrzny dysk USB podłączony do urządzenia typu telewizor, ponieważ cały telewizor jest zwykle instalowany w stabilnym miejscu.
Gdy użytkownik wprowadzi nowe urządzenie pamięci masowej, platforma przeprowadzi test porównawczy i porówna jego wydajność z wydajnością pamięci wewnętrznej. Jeśli adoptowane urządzenie jest znacznie wolniejsze niż pamięć wewnętrzna, platforma ostrzega użytkownika o możliwym pogorszeniu jakości. Ten test porównawczy został opracowany na podstawie rzeczywistego zachowania we/wy w popularnych aplikacjach na Androida. Obecnie implementacja AOSP będzie tylko ostrzegać użytkowników, gdy przekroczą oni określony próg, ale producenci urządzeń mogą dostosować tę funkcję w dalszym zakresie, na przykład całkowicie odrzucić kartę, jeśli jest ona bardzo powolna.
Urządzenia adoptowane muszą być sformatowane za pomocą systemu plików obsługującego uprawnienia POSIX i atrybuty rozszerzone, takie jak ext4
lub f2fs
. Aby zapewnić optymalną wydajność, zalecamy system plików f2fs
na urządzeniach pamięci masowej opartych na technologii flash.
Podczas okresowej konserwacji platforma wysyła FI_TRIM
do zaadoptowanych multimediów tak samo jak do pamięci wewnętrznej.
Obecna specyfikacja karty SD nie obsługuje polecenia DISCARD
, ale jądro zamiast tego używa polecenia ERASE
, którego oprogramowanie układu karty SD może użyć do optymalizacji.
Testowanie
Aby sprawdzić, czy adoptowana pamięć działa, uruchom ten test CTS:
cts-tradefed run commandAndExit cts-dev \ -m CtsAppSecurityHostTestCases \ -t android.appsecurity.cts.AdoptableHostTest
Aby sprawdzić działanie dysków USB i kart SD, gdy urządzenie nie ma gniazda wewnętrznego lub gdy złącze USB jest używane do aktywnego połączenia adb, użyj:
adb shell sm set-virtual-disk true