Visualizza la versione completa : [Tutorial] Approfondimento su /data/media come /sdcard



PLUT
05-11-2012, 22:24
Approfondimento su /data/media come /sdcard




Ciao a tutti,

apro questa discussione per condividere un bel articolo segnalatomi da Dees_Troy (sviluppatore della Recovery TWRP) che mi ha chiarito alcune cose che non conoscevo sulla nuova gestione della ex partizione /sdcard e che oggi su molti devices viene gestita come un "di cui" della partizione /data (/data/media appunto).
Mi scuso in anticipo per la traduzione che in un paio di punti potrebbe non essere molto buona #) (non avendo appieno capito il senso di un paio di frasi).

A parte i riferimenti a funzioni specifiche della Recovery TWRP il mio interesse era per tutto ciò che riguarda motivi e metodi con i quali oggi viene gestita la memoria di archiviazione interna sui devices che utilizzano /data/media.

Spero che questa discussione si arricchisca di altri contenuti (e magari di correzzioni alla mia traduzione :)) e che possa chiarire anche ad altri i motivi di questa nuova gestione.


Autore: TeamWin

Sto scrivendo questa pagina, perché sembra che ci sia un sacco di confusione su come funzionino molti dei più recenti dispositivi Android. A partire dal Honeycomb 3.0 con la Xoom, Google ha cambiato il modo in cui viene gestita l’archiviazione. Invece di avere una partizione "dati" con le applicazioni e una partizione separata "sdcard" per lo stoccaggio, Google ha iniziato a gestire una singola partizione /data molto grande. All’interno della partizione /data esiste una cartella /data/media che contiene tutti i contenuti di ciò che voi pensate essere la vostra sdcard interna.

Da quando /data/media fa parte di /data, non abbiamo praticamente mai effettivamente formattato la partizione /data. La formattazione della partizione /data, naturalmente, elimina anche la cartella di supporto che contiene la sdcard interna (/data/media). Quando si sceglie nel menu “Wipe” della Recovery TWRP, il comando “Factory Reset”, invece di una formattazione, si usa il comando rm -rf per rimuovere tutte le cartelle tranne la cartella media in modo da poter rimuovere tutte le applicazioni e le impostazioni lasciando il vostro "sdcard" intatto. Nel menu “Wipe” della Recovery TWRP abbiamo anche un “Internal Storage” che esegue il comando rm-rf solo per la cartella /data/media e anche l'opzione "Format Data" che formatta tutta la partizione per poter ricreare l'intero file system in caso qualcosa vada completamente male o per rimuovere la crittografia del dispositivo (n.d.r. e con questo comando verrà ovviamente eliminata anche la /data/media).

Una volta avviato il sistema Android, Android usa “FUSE” (vedi nota sotto) per far apparire la cartella /media come /sdcard ed emula un filesystem FAT che non dispone delle autorizzazioni per le applicazioni legacy. Attualmente “FUSE” non è ancora gestito dalla recovery, quindi abbiamo semplicemente aggiunto un comando extra di mount per montare /data/media come /sdcard così nella recovery non dovete preoccuparvi delle autorizzazzioni in /sdcard.

Siccome la "sdcard interna" non è un vero e proprio filesystem FAT, non è possibile montarla mediante archiviazione USB (USB storage). Beh, questo non è tecnicamente vero, ma la stragrande maggioranza delle persone utilizza i computer Windows e Windows non riconosce i filesystem ext4. Se dovessimo permettere di montare la partizione /data via archiviazione USB (USB storage), Windows potrebbe affermare che il dispositivo non è stato formattato e di offrire a formattarlo per voi, che, come potete immaginare, sarebbe un disastro. La struttura del filesystem ext4 è un altro motivo per cui Android è passato all'utilizzo di MTP per trasferire i files. La maggior parte di questi dispositivi non hanno la necessaria configurazione del kernel per supportare anche la modalità di archiviazione USB (USB storage), quindi non è molto facile abilitare l’ archiviazione USB, anche volendo.

Come nota speciale, se si sceglie di fare un “Factory Reset” dalla ROM, anche se la ROM dice che cancellerà tutto, compreso la memoria interna, beh, non è quello che TWRP farà. Una Recovery stock AOSP formatterebbe completamente /data tra cui "sdcard", ma TWRP userà il suo normale “Factory Reset” che lascia intatta la memoria interna.

Ci sono un paio di ottimi vantaggi con l'utilizzo di questa configurazione contro la vecchia partizione /data + archiviazione FAT (/sdcard). Con /data/media, l'utente ottiene un maggiore controllo sulla modalità di utilizzo dello spazio di archiviazione. Se si dispone di un sacco di applicazioni, quindi non ci sono problemi in quanto si dispone di una partizione enorme di dati su cui lavorare. Se non si dispone di un sacco di applicazioni, si ottiene più spazio da utilizzare per memorizzare le cose come i film. Inoltre, ext4 non soffre il limite di 4 GB di dimensione dei files che ha il filesystem FAT, in modo da poter avere anche film in alta definizione sul vostro dispositivo, se volete. Sono sicuro che un altro motivo fosse quello, per Android, di abbandonare il filesystem FAT che è una creazione di Microsoft. Le prestazioni su ext4 su Android sono probabilmente meglio di FAT. Come rovescio della medaglia, i dispositivi con /data/media, tendono a memorizzare molte più applicazioni in /data, e così i backup su questi dispositivi tendono ad essere più grandi.



Versione Originale:


I'm writing this page because there seems to be a lot of confusion about how many of the newer Android devices work. Starting in Honeycomb 3.0 with the Xoom, Google changed the way that they handled storage. Instead of having a "data" partition with your apps and a separate "sdcard" partition for storage, Google started giving you a single, very large data partition. Inside /data is a folder at /data/media that contains all of the contents of what you think of as your internal sdcard.

Since /data/media is part of /data, we pretty much never actually format the data partition. Formatting data, of course, also removes the media folder that contains the internal sdcard. When you choose a factory reset, instead of formatting, we use rm -rf commands to remove all the folders except for the media folder so that we can remove all of your apps and settings while leaving your "sdcard" intact. In TWRP we also have a wipe internal storage option that rm -rf's the media folder and a "Format Data" option that formats to recreate the entire file system in case something goes completely wrong or to remove device encryption.

When you're booted to Android, Android fuses the media folder to /sdcard and emulates a FAT files system that doesn't have permissions for legacy apps. We don't currently have fuse in recovery, so we just add an extra mount command to mount /data/media to /sdcard so in recovery you still have to worry about permissions on /sdcard.

Because the "internal sdcard" is not a true FAT file system, you can't mount it via USB storage. Well, that's not technically true, but the vast majority of people use Windows computers and Windows doesn't recognize ext4. If we were to allow you to mount the data partition via USB storage, Windows would claim that the device wasn't formatted and offer to format it for you, which, as you can imagine, would be a disaster. The whole ext4 setup is another reason that Android switched to using MTP for transferring files. Most of these devices don't have the necessary kernel configuration to even support USB storage mode, so it's not very easy to enable USB storage if we even wanted to try.

As a special note, if you choose to do a factory reset from your ROM, even if the ROM says that it will wipe everything including the internal storage, well, that's not what TWRP will do. A stock AOSP recovery would format data including the "sdcard" but TWRP will use its regular factory reset setup that leaves the internal storage intact.

There are a couple of nice gains with using this setup vs the old data + FAT storage partition. With /data/media you, as the user get more control over how you use your storage. If you have a ton of apps, then that's no problem since you have a huge data partition to work with. If you don't have a lot of apps, you get more room to use for storing things like movies. Further, ext4 doesn't suffer from the 4GB file size limit that FAT has, so you can have a large, high-def movie on your device if you like. I'm sure another motivating factor was to get Android away from using FAT which is a Microsoft creation. Performance on ext4 in Android is also probably better than FAT. As a downside, data media devices tend to store a lot more app data in the "data" section and so backups on these devices tend to be larger.


“FUSE” (Filesystem in USErspace)(fonte Wikipedia):

è un progetto open source, rilasciato sotto la licenza GPL e LGPL, volto alla realizzazione di un modulo per il kernel Linux che permetta agli utenti non privilegiati di un sistema, di creare un proprio file system senza la necessità di scrivere codice a livello kernel. Questo obiettivo è raggiunto eseguendo il codice del filesystem in spazio utente mentre il modulo FUSE funziona solamente come "bridge" per l'interfaccia del kernel.
FUSE è divenuto ufficialmente parte del codice del kernel Linux a partire dalla release 2.6.14.
FUSE è particolarmente utile per scrivere filesystem virtuali. A differenza dei filesystem tradizionali che si preoccupano principalmente di organizzare e memorizzare i dati su disco, i filesystem virtuali non memorizzano realmente i dati per conto proprio. Agiscono infatti come un tramite fra l'utente ed il filesystem reale sottostante. FUSE è un sistema molto potente: virtualmente ogni risorsa disponibile ad essere implementata sfruttando FUSE può divenire un filesystem virtuale. Sono infatti stati realizzati, ad esempio, filesystem quali SSHFS, che permette di montare un sistema remoto in connessione SSH come un filesystem, o addirittura GmailFS, che utilizza lo spazio fornito da Google Inc. per le caselle e-mail del proprio sistema Gmail.com per ricavarne un filesystem virtuale.


Ciaoooo

s8vuoto
13-11-2012, 12:02
ottimo articolo.Era quasiquello che volevo sapere. grazie plut.
ma tornando al discorso. se la una parte della mia sd esterna la formatto in ext4 mi "aggiunge" spazio in /data/media?

PLUT
13-11-2012, 12:16
No quella della memoria esterna è fisicamente una memoria separata e anche il sistema la gestisce separatamente.
Il vantaggio lo avresti in termini di sicurezza dei dati, e la possibilità di salvare file più grossi di 4Gb.
Molti usano exfat che è un file system supportato da diversi kernel.

Ciaoooo

Inviato dal mio GT-I9300 con Tapatalk 2

ferioki
15-11-2012, 12:43
Occhio che con l'aggiornamento del GNexus a 4.2 sono state cambiate tutte le tabelle delle partizioni....quindi prevedo che sia una nuova impostazione introdotta con Android 4.2 per gestire meglio il sistema.

A breve un aggiornamento dei nuovi indirizzi.;)

inviato dal mio ferioki Mobile

PLUT
16-11-2012, 08:01
Sono proprio curioso di vedere come le hanno cambiate, con che obiettivo e con che risultati.
Ma sono certo che saranno solo vantaggi.
Spero non richiedano però a questo punto (almeno su Samsung) che per passare da 4.2 a precedente o viceversa si debba sempre usare il file Pit per ricreare da zero le partizioni.
Ma stiamo a vedere le novità

Inviato dal mio GT-I9300 con Tapatalk 2

bono
16-11-2012, 08:50
Ad ora in molti lamentano il fatto che la SD si chiama sdcard/0 e ad ogni wipe da recovery si aggiunge uno zero :urka1

Sdcard/0/0 etc.

La twrp per ora non legge proprio la SD su 4.2

Inviato dal mio Galaxy Nexus con Tapatalk 2

PLUT
21-12-2012, 16:02
Ciao a tuti,all

a discussione aggiungo anche un breve approfondimento legato alla gestione del multiuser e le suripercussioni nella gestione della /sdcard (/data/media).


Sempre da una nota scritta dal TeamWin creatori della Recovery TWRP.

Con Android 4.2, Google ha introdotto la gestione multiutente. Al fine di soddisfare più utenti, Google fornisce a ciascun utente una propria cartella per la memorizzazione. Se aggiornate alla versione 4.2 dalla 4.1, allora la ROM 4.2 cercherà un certo file in /data per determinare se è necessario eseguire la migrazione di tutti i file alla nuova struttura multi-utente. Per impostazione predefinita, 4.2 migra tutti /data/media in / data/media/0.

Un problema è sorto con le Recovery Custom. Una Recovery Custom preserva la cartella /data/media durante un reset di fabbrica (wipe factory reset). Quando fate il ripristino di fabbrica e quindi avviare di nuovo un 4.2 ROM, la ROM 4.2 migreranno tutto in /data/media/0 di nuovo. Ogni volta che farete un reset di fabbrica con successivo avvio di una Rom 4.2 questa migrazione verrà rieseguita. Questa migrazione multipla provoca il fenmeno delle cartelle "0" una dentro l'altra (/sdcard/0 oppure /sdcrad/0/0 etc etc).

Nella TWRP 2.3.2.0 abbiamo corretto questo problema facendo in modo di non eliminare il file speciale durante un reset di fabbrica. Tuttavia, se vi trovate già in questa condizione (/sdcrad/0 oppure /sdcrad/0/0 o pggio) sarà necessario spostare o unire di nuovo in / sdcard. Inoltre, se si è spostato la cartella TWRP da / data/media/0 a /data/media in modo da poter ripristinare i backup durante l'utilizzo di versioni precedenti TWRP, potrebbe essere necessario spostare la cartella TWRP di nuovo in / data/media/0 .

Come nota speciale, se si ripristina un backup di una versione precedente di Android, potrebbe essere necessario spostare i file su /data/media/0 e in /data/media per essere in grado di vederli di nuovo. Inoltre, il downgrade a 4.1 o precedenti e successiva installazione di una Rom 4.2 può innescare un altro "upgrade" del file system. Non è consigliabile quidi un vai e torna da Rom 4.2 a 4.1 e viceversa.

Originale:

With Android 4.2, Google introduced multiple users as a new feature. In order to accommodate multiple users, Google is now giving each user a their own folder for storage. If you upgraded to 4.2 from 4.1, then the 4.2 ROM will look for a certain file in /data to determine whether it needs to migrate all of your files to the new multi-user data structure. By default, 4.2 migrates all of /data/media to /data/media/0.

A problem arose though with custom recoveries. A custom recovery retains the /data/media folder during a factory reset. When you factory reset and then boot a 4.2 ROM again, the 4.2 ROM will migrate everything in /data/media again. It will migrate your files every time you factory reset. This multiple migration is what resulted in some people having their files moved to /sdcard/0 or even /sdcard/0/0 etc.
In TWRP 2.3.2.0 we have corrected this problem by ensuring that we do not delete the special file during a factory reset. However, if ended up having your files upgraded you will need to move or merge them back into /sdcard. Also, if you have moved your TWRP folder from /data/media/0 to /data/media so that you could restore backups while using prior TWRP versions, you may now need to move the TWRP folder back into /data/media/0.
As a special note, if you restore a backup to a prior version of Android, you may have to move your files out of /data/media/0 and into /data/media to be able to see them again. Also, downgrading to 4.1 or below then installing 4.2 again may trigger another "upgrade" of your file system. It is not recommended to flip flop between 4.1 and 4.2 ROMs.




Edit:
il file presente in /data/media che identifica il tipo di struttura (se multiutente o no) è il file .layout_version
Se con un wipe data questo file viene cancellato l'installazione di una Rom 4.2 provocherà anche la migrazione di /data/media in /data/media/0.


Ciaooooooo

spynacio
20-02-2013, 23:58
.
Come nota speciale, se si ripristina un backup di una versione precedente di Android, potrebbe essere necessario spostare i file su /data/media/0 e in /data/media per essere in grado di vederli di nuovo. Inoltre, il downgrade a 4.1 o precedenti e successiva installazione di una Rom 4.2 può innescare un altro "upgrade" del file system. Non è consigliabile quidi un vai e torna da Rom 4.2 a 4.1 e viceversa.

Il problema del backup si ha ovviamente solo qual ora esso venga salvato appunto sulla "SD interna" giusto?
Non mi è chiaro il discorso del downgrade,il ripristino di un nandroid backup completo non è paragonabile ad un flash con odin?in fondo vado a riscrivere tutto,no?



:
il file presente in /data/media che identifica il tipo di struttura (se multiutente o no) è il file .layout_version
Se con un wipe data questo file viene cancellato l'installazione di una Rom 4.2 provocherà anche la migrazione di /data/media in /data/media/0.


Ciao @PLUT, ho letto ora questo tuo interessantissimo post e mi sono sorte alcune domande al riguardo.
Chiedo scusa se risulteranno essere assurde.

Allora, a quanto ho capito dalla 4.2 in poi con l avvento del multiutente si rischia un creazione infinita di sottocartelle data/media/0/0/0/0/ecc...
Questa cosa quali problemi può causare?
Viene man mano succhiato spazio nella partizione?

Nel articolo si parla di ripristino ai dati di fabbrica ma se si parla di recovery custom quale azione scatena questo problema?il wipe factory?( perche a quanto ho capito il wipe ad ed eliminare il contenuto della partizione data/media)

Nel changelog delle varie recovery cosa bisogna guardare per verificare che abbiano adottato le stesse acortezze della TWRP?

Vi è un modo per eliminare questo problema alla radice rimuovendo ciò che riguarda la multiutenza?

Scusate per le mille domande ma sono parecchio curioso :D

PLUT
21-02-2013, 09:48
Ciao spynacio,
*
per il primo discorso sul nandroid backup il problema non è la posizione in cui lo fai (quello magari ti mette a rischi di perdere i backup su /sdcard se fai un wipe data con recovery stock oppure un ripristino dati di fabbrica con una Rom Stock); ma il contenuto.
*
La cartella /data/media viene gestita dalla recovery come se fosse una partizione a se e quindi non viene backuppata.
Quando restori un nandroid backup con una vecchia recovery questo restora tutto (/system /cache /data) ma non tocca /data/media.
Il risultato è che se avevi installato una Rom 4.2.1 la tua /sdcrad si trovava in /data/media/0 e quando restori il backup i dati resteranno in /data/media/0 ma la Rom restorata (es. 4.1.1) non gestisce correttamente la /sdcard in /data/media/0 ma si aspetta i dati in /data/media.
Ecco perchè in caso di restore di una vecchia versione potrebbe essere necessario dopo spostare i dati da /data/media/0 in /data/media.
Ora non ho fatto prove o non ricordo se le ho fatte, ma credo che le ultime recovery quando ripristini un backup di una Rom 4.1.x o precedente si preoccupi anche di spostare il contenuto di /data/media/0 in /data/media.
Ma non garantisco questo e quindi di volta in volta è meglio verificare dove si trovano i propri dati sapendo che su 4.2.x devono essere in /data/media/0 nelle versioni precedenti in /data/media
*
La creazione di cartelle multiple /0/0/0 è un problema che hanno solo le installazioni di Rom 4.2.x fatte con vecchie recovery (CWM < 6.0.1.9) che non testavano il file layout_version e quindi se facevi 2 o 3 installazioni successive (con una vecchia recovery) il risultato era che ogni volta 'installazione spostava il contenuto di /data/media in /data/media/0 e cos' facendo alla seconda installazione il contenuto veniva spostato giù di un livello e così via all'infinito.
*
Problemi di spazio non ne provoca in quanto non veniva copiato il contenuto ma spostato, i problemi erano solo di gestione in quanto le apk la Rom si aspettano di trovare i dati in /data/media/0 ed invece se li ritrovavano in /data/media/0/0/0 e quindi alcune apk non trovavano più i loro files di configurazione anche i salvatagg di fotocamera o altro finivano in posizioni strane e tutta una serie di incovenienti risolti solo con la gestione da parte della recovery del file layout_version.
*
Per il discorso wipe ci sono 2 modi di farlo:
1) Ripristino dati di fabbrica (funzione interna alla Rom che trovi in genere in Impostazioni/memoria ... mi pare)
2) Wipe data factory reset fatto da Recovery
*
A seconda del tipo di recovery che monti il risultato è diverso:
*
Caso A: Recovery Stock (quella ufficiale samsung con 4 opzioni in croce):
- sia il metodo 1 che 2 provocano la cancellazione totatle della partizione /data quindi anche /data/media => perdi tutti i dati della /sdcard
*
Caso B: Recovery CWM:
- il metodo 1 non ricordo se l'ho provato*... ma credo cancelli tutto compreso /data/media
- il metodo 2 preserva /data/media quindi cancella tutto /data TRANNE la /sdcard
*
Caso C: Recovery TWRP:
- il metodo 1 non ricordo se l'ho provato*... ma da quello che scrive Deestroy dovrebbe*preservare*/data/media
- il metodo 2 preserva /data/media quindi cancella tutto /data TRANNE la /sdcard
*
Io personalmente comunque lo faccio sempre da Recovery e quindi so che usando il wipe data factory reset con una recovery CWM o TWRP non corro rischi.
Nella TWRP se vuoi piallare tutto compreso /data/media c'è l'opzione "format data".
*
Sui changelog non saprei cosa guardare io so che le CWM dalla 6.0.1.9 in poi gestiscono la cartella /data/media/0 e per le TWRP dalla 2.3.3.0 e successive*(ma forse anche qualche versione precedente non ricordo a memoria).
*

Ciaooooo

Iconoclast
28-02-2013, 10:01
Le cartelle multiple 0/0/0 ecc..avvengono non solo con ke vecchie cwm come descrivi ma anche con la nuova trwp 2.4.x.x. Adesso io mi ritrovo con le cartelle 0/0 quindi doppia. Posso cancellare la cartella 0 ?. E poi cosa servono le altre partizioni o cartelle UsbdriveA/b/c/d/e/f

Inviato dal mio GT-I9300 con Tapatalk 2

PLUT
28-02-2013, 11:25
A me come a moltissimi altri che usano la TWRP non succede.
La cartella 0 nasce la prima volta che passi da una 4.1.x ad una 4.2.x
Se poi continui a fleshare 4.2.x sia con Odin che con Recovery recenti problemi non succedono.
Ma se inizi a restorare nandroid di 4.1 oppure a flashare 4.1 e poi tornare a 4.2.... Come è ben scritto su questa discussione il problema delle cartelle 0 nasce.

Il tutto viene gestito correttamente se ovviamente in /data è presente il file layout version.

Ripeto a me con cyano 10.1 mai più avuto problemi dalle prime cwm 6.0.1.9.

Per il discorso se puoi cancellare .... Certo che puoi.
Ricordati solo che se hai una 4.1.x i dati della tua memoria interna si devono trovare in /data/media; se invece hai una 4.2.x li devi avere in /data/media/0

Ciaooooo

Inviato dal mio GT-I9300 con Tapatalk 2

Iconoclast
01-03-2013, 11:33
Mi spieghi questa situazione e normale?[Only registered and activated users can see links]
La Sdcard0 è la copia della sd interna? E le altre?
Inviato dal mio GT-I9300 con Tapatalk 2

PLUT
01-03-2013, 12:29
Non sono copie sono "punti di mount".
Tipo le icone collegamento che usi in windows.
In pratica sono percorsi diversi per andare nello stesso posto.

La memoria interna è fisicamente in /data/media o /data/media/0
Ma agli stessi contenuti ci arrivi anche con i seguenti percorsi:
/MNT/sdcard
/storage/sdcard0

Ma è sempre lo stessa cosa solo con percorsi diversi per arrivarci.

Gli altri elementi che trovi sono la stessa cosa.
Uno punta alla microsd
Gli UsbDriveA non lo so di preciso ma credo servano quando colleghi via OTG un dispositivo USB.

Ciaooooo

Inviato dal mio GT-I9300 con Tapatalk 2

spynacio
01-03-2013, 14:29
Esattamente come dice plut il primo dopo la SD interna lo usi quando colleghi via org la chiavetta USB io la collego spesso.

#rst