Android ha sempre supportato gli accessori di archiviazione esterna (come le schede SD), ma in passato questi accessori erano limitati alla semplice archiviazione dei file, a causa della loro temporaneità prevista e della protezione minima dei dati offerta dall'archiviazione esterna tradizionale. Android 6.0 ha introdotto la possibilità di adottare supporti di archiviazione esterni in modo che funzionino come unità di archiviazione interna.
Quando viene adottato un supporto di archiviazione esterno, viene formattato e criptato per funzionare solo con un singolo dispositivo Android alla volta. Poiché i contenuti multimediali sono strettamente legati al dispositivo Android che li ha adottati, possono archiviare in sicurezza sia le app sia i dati privati di tutti gli utenti.
Quando gli utenti inseriscono nuovi supporti di archiviazione (ad esempio una scheda SD) in una posizione adottabile, Android chiede loro come vogliono utilizzarli. Possono scegliere di adottare i contenuti multimediali, che vengono formattati e criptati, oppure continuare a utilizzarli così come sono per una semplice archiviazione dei file. Se sceglie di adottarli, la piattaforma offre di eseguire la migrazione dei contenuti di archiviazione condivisi principali (in genere montati su /sdcard
) ai nuovi media adottati, liberando spazio prezioso sullo spazio di archiviazione interno. A differenza dello spazio di archiviazione tradizionale, che è limitato a 2 TB a causa dell'utilizzo di MBR, lo spazio di archiviazione adottabile utilizza GPT e, pertanto, ha un limite di archiviazione dei file di circa 9 ZB.
Le app possono essere posizionate sui supporti di archiviazione adottati solo se lo sviluppatore ha indicato il supporto tramite l'attributo android:installLocation
.
Le nuove installazioni di app supportate vengono posizionate automaticamente sul dispositivo di archiviazione con più spazio libero e gli utenti possono spostare le app supportate tra i dispositivi di archiviazione nell'app Impostazioni. Le app spostate sui contenuti multimediali adottati vengono memorizzate quando i contenuti multimediali vengono espulsi e tornano quando vengono reinseriti.
Sicurezza
La piattaforma genera in modo casuale le chiavi di crittografia per ogni dispositivo adottato e le memorizza nella memoria interna del dispositivo Android. In questo modo, i contenuti multimediali adottati sono protetti come quelli memorizzati nella memoria interna. Le chiavi vengono associate ai dispositivi adottati in base al GUID della partizione adottata.
Se il dispositivo è configurato per utilizzare la crittografia basata su file (FBE) sullo spazio di archiviazione interno, lo spazio di archiviazione adottabile utilizza sia la crittografia FBE sia la crittografia dei metadati. In caso contrario, lo spazio di archiviazione adottabile utilizza la crittografia del disco completo (FDE).
Il layout sul disco del dispositivo adottato rispecchia fedelmente la partizione dei dati interni, incluse le etichette SELinux e così via. Se il multiutente è supportato sul dispositivo Android, il dispositivo di archiviazione adottato supporta anche il multiutente con lo stesso livello di isolamento dell'archiviazione interna.
Poiché i contenuti di un dispositivo di archiviazione adottato sono strettamente legati al dispositivo Android che lo ha adottato, le chiavi di crittografia non devono essere estraibili dal dispositivo principale e, pertanto, il dispositivo di archiviazione non può essere montato altrove.
Se il tuo dispositivo utilizza la crittografia lato file, consulta la documentazione sulla crittografia lato file e la documentazione sulla crittografia dei metadati per scoprire come configurare la crittografia lato file e la crittografia dei metadati sullo spazio di archiviazione adottabile.
Prestazioni e stabilità
Per evitare la perdita o il danneggiamento accidentale dei dati, devono essere presi in considerazione solo supporti di archiviazione esterni in posizioni stabili, ad esempio uno slot all'interno del vano batteria o dietro una copertura protettiva. In particolare, i dispositivi USB collegati a uno smartphone o tablet non devono mai essere presi in considerazione per l'adozione. Un'eccezione comune è un'unità USB esterna collegata a un dispositivo tipo TV, perché in genere l'intera TV è installata in una posizione stabile.
Quando un utente adotta un nuovo dispositivo di archiviazione, la piattaforma esegue un benchmark e confronta le relative prestazioni con quelle dello spazio di archiviazione interno. Se il dispositivo adottato è molto più lento dello spazio di archiviazione interno, la piattaforma avvisa l'utente di un possibile peggioramento dell'esperienza. Questo benchmark è stato ricavato dal comportamento I/O reale delle app Android più diffuse. Al momento, l'implementazione AOSP avverte solo gli utenti che superano 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 file system che supporti le autorizzazioni e gli attributi estesi POSIX, ad esempio ext4
o
f2fs
. Per un rendimento ottimale, il file system f2fs
è consigliato per i dispositivi di archiviazione basati su flash.
Quando esegui la manutenzione periodica in stato di inattività, la piattaforma emette FI_TRIM
per i contenuti multimediali adottati, come per lo spazio di archiviazione interno.
L'attuale specifica della scheda SD non supporta il comando DISCARD
, ma il kernel utilizza il comando ERASE
, che il firmware della scheda SD può scegliere di utilizzare a scopo di ottimizzazione.
Test
Per verificare che lo spazio di archiviazione 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 ha un slot integrato o quando il connettore USB è in uso per una connessione adb attiva, usa:
adb shell sm set-virtual-disk true