Spazio di archiviazione adottabile

Android ha sempre supportato accessori di archiviazione esterni (come le schede SD), ma questi accessori erano storicamente limitati alla semplice archiviazione di file, a causa della loro prevista impermanenza e della protezione minima dei dati offerta dall'archiviazione esterna tradizionale . Android 6.0 ha introdotto la possibilità di adottare supporti di memorizzazione esterni per agire come memoria interna.

Quando viene adottato un supporto di archiviazione esterno, viene formattato e crittografato per funzionare solo con un singolo dispositivo Android alla volta. Poiché il supporto è fortemente legato al dispositivo Android che lo ha adottato, può archiviare in modo sicuro sia le app che i dati privati ​​per tutti gli utenti.

Quando gli utenti inseriscono un nuovo supporto di memorizzazione (come una scheda SD) in una posizione adottabile, Android chiede loro come desiderano utilizzare il supporto. Possono scegliere di adottare il supporto, che lo formatta e lo crittografa, oppure possono continuare a utilizzarlo così com'è per la semplice archiviazione dei file. Se scelgono di adottare, la piattaforma offre la possibilità di migrare i contenuti primari dello storage condiviso (tipicamente montati su /sdcard ) sul supporto di nuova adozione, liberando spazio prezioso sullo storage interno. A differenza dello storage tradizionale, che è limitato a 2 TB a causa dell'utilizzo di MBR , lo storage adottabile utilizza GPT e pertanto ha un limite di archiviazione file di ~9ZB.

Le app possono essere posizionate sui supporti di archiviazione adottati solo quando lo sviluppatore ha indicato il supporto tramite l'attributo android:installLocation . Le nuove installazioni delle app supportate vengono automaticamente posizionate sul dispositivo di archiviazione con più spazio libero e gli utenti possono spostare le app supportate tra dispositivi di archiviazione nell'app Impostazioni . Le app spostate sul supporto adottato vengono ricordate mentre il supporto viene espulso e ritornano quando il supporto viene reinserito.

Sicurezza

La piattaforma genera in modo casuale chiavi di crittografia per ciascun dispositivo adottato e le memorizza nella memoria interna del dispositivo Android. Ciò rende effettivamente i media adottati sicuri quanto l’archiviazione interna. Le chiavi sono associate ai dispositivi adottati in base al GUID della partizione adottata.

Se il dispositivo è configurato per utilizzare la crittografia basata su file (FBE) nella propria memoria interna, lo spazio di archiviazione adottabile utilizza sia la crittografia FBE che quella dei metadati . Altrimenti, lo storage adottabile utilizza la crittografia dell'intero disco (FDE).

Il layout su disco del dispositivo adottato rispecchia fedelmente la partizione dati interna, comprese le etichette SELinux, ecc. Quando il multiutente è supportato sul dispositivo Android, il dispositivo di archiviazione adottato supporta anche il multiutente con lo stesso livello di isolamento del dispositivo interno. magazzinaggio.

Poiché il contenuto di un dispositivo di archiviazione adottato è fortemente legato al dispositivo Android che lo ha adottato, le chiavi di crittografia non dovrebbero essere estraibili dal dispositivo genitore e pertanto il dispositivo di archiviazione non può essere montato altrove.

Se il tuo dispositivo utilizza FBE, consulta la documentazione di FBE e la documentazione sulla crittografia dei metadati per sapere come configurare FBE e la crittografia dei metadati sullo spazio di archiviazione adottabile.

Prestazioni e stabilità

Dovrebbero essere presi in considerazione solo i supporti di memorizzazione esterni in posizioni stabili, come uno slot all’interno del vano batteria o dietro una copertura protettiva, per evitare la perdita accidentale o il danneggiamento dei dati. In particolare, i dispositivi USB collegati a un telefono o tablet non dovrebbero mai essere presi in considerazione per l’adozione. Un'eccezione comune sarebbe un'unità USB esterna collegata a un dispositivo in stile TV, poiché l'intero televisore è generalmente installato in una posizione stabile.

Quando un utente adotta un nuovo dispositivo di archiviazione, la piattaforma esegue un benchmark e confronta le sue prestazioni con quelle dello storage interno. Se il dispositivo adottato è significativamente più lento della memoria interna, la piattaforma avvisa l'utente di un'esperienza potenzialmente degradata. Questo benchmark è stato derivato dall'effettivo comportamento I/O delle più diffuse app Android. Attualmente, l’implementazione AOSP avviserà gli utenti solo oltre una singola soglia, ma i produttori di dispositivi potrebbero adattarla ulteriormente, ad esempio rifiutando completamente l’adozione se la scheda è estremamente lenta.

I dispositivi adottati devono essere formattati con un filesystem che supporti le autorizzazioni POSIX e gli attributi estesi, come ext4 o f2fs . Per prestazioni ottimali, si consiglia il file system f2fs per i dispositivi di archiviazione basati su flash.

Quando si esegue la manutenzione periodica inattiva, la piattaforma invia FI_TRIM ai supporti adottati proprio come fa per l'archiviazione interna. Le specifiche attuali della scheda SD non supportano il comando DISCARD ; ma il kernel ricorre invece al comando ERASE , che il firmware della scheda SD può scegliere di utilizzare per scopi di ottimizzazione.

Test

Per verificare che lo storage adottabile funzioni, esegui questo test CTS:

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

Per verificare il comportamento delle unità USB e delle schede SD quando un dispositivo non dispone di uno slot integrato o quando il connettore USB viene utilizzato per una connessione adb attiva, utilizzare:

adb shell sm set-virtual-disk true