Perché la scheda SD è montata su “/ sdcard / external_sd” invece di “/ sdcard” (o “/ mnt / sdcard”)?


18

Di recente ho aggiornato il mio telefono a un LG Motion 4G (Android 4 ICS). Vedo che la sdcard è montata su /sdcard/external_sd. Ho anche notato che questo sembra essere lo stesso con alcuni altri modelli più recenti. Le app prevedono che la sdcard sia disponibile /sdcard. Presumo che i produttori vogliano includere molta memoria interna, ma perché montare la memoria interna su /sdcard? Non dovrebbe essere contro una qualche forma di standard delle specifiche Android?


4
Per quanto riguarda lo "standard di specifica", ciò non dovrebbe comportare problemi: come puoi leggere nella documentazione per gli sviluppatori su Storage esterno , le app dovrebbero determinare la posizione / disponibilità usando le chiamate API (qui: getExternalStorageState () ), non usando percorsi hardcoded .
Izzy

Buon punto Izzy, ma a quanto pare alcuni produttori stanno reindirizzando erroneamente le app allo spazio interno tramite getExternalStorageDirectory (). stackoverflow.com/questions/11281010/...
Sepero

Ah, anche un buon punto: non ero a conoscenza di un non sviluppatore. Ma vedo che Flow ha fornito un'ottima spiegazione - di nuovo con punti di cui non ero a conoscenza ...
Izzy

Risposte:


26

Il motivo è la storia di Android: la prima generazione di dispositivi Android aveva solo una piccola quantità di memoria interna (circa 100-400 MiB) che era montata sotto /data.

Successivamente, sono usciti dispositivi con una scheda SD esterna, allora. La scheda SD è stata montata sotto /mnt/sdcard.

Successivamente, sono arrivati ​​sul mercato dispositivi con una grande memoria interna. Questo spazio di archiviazione era /mnt/sdcardsuddiviso in porzioni , poiché era diventato il luogo predefinito per i blocchi di big data di app, immagini e simili. Quindi l'ambiente Android doveva avere una /datae /mnt/sdcarddirectory. Quindi una partizione era per /data, l'altra per /mnt/sdcard. Questo è il motivo per cui lo spazio di archiviazione potrebbe ridursi (la /datapartizione) anche se c'è molto spazio libero /mnt/sdcard.

Questa situazione è stata migliorata con Android 3.0: /datae /mnt/sdcardora punta alla stessa partizione. Ottimo lavoro Google, che avrebbe potuto essere fatto versioni fa. Questo è anche il motivo per cui app2sd non è più necessario su Android 3.0 o versioni successive: spostare i dati all'interno dello stesso volume.

Ora arriviamo alla risposta se la tua domanda: poiché /mnt/sdcardè già montata sulla memoria interna, una scheda SD esterna deve utilizzare un punto di montaggio diverso. E questo punto di montaggio non è specificato da Google. Potrebbe essere

  • /mnt/sdcard/ext_sd
  • /mnt/external
  • /mnt/extSdCard
  • /mnt/sdcard/external_sd
  • eccetera.

La chiamata API di getExternalStorageDirectory()solito punta alla directory di archiviazione interna. Questo comportamento è documentato. Esistono progetti open source che forniscono strumenti per trovare la directory della scheda SD esterna in modo canonico.


Significa che non esiste un "modo trasparente" per le app per determinare la scheda SD? Ovviamente, c'è isExternalStorageRemovable()da vedere se lo spazio di archiviazione "esterno" è rimovibile, in più si possono determinare i punti di montaggio (usando il mountcomando) e verificare la presenza di flag di montaggio ecc. Ma se non mi sbaglio qui, ciò significa che ogni sviluppatore ha bisogno capire da solo la sua app, e non c'è una semplice chiamata API per farlo per lui?
Izzy

È corretto. Ci sono le librerie che ho collegato che provano ad aggiungere quella funzione, ma non esiste una chiamata API ufficiale per farlo.
Flusso

Se sia la memoria esterna che la /datapartizione vengono unite, come posso montare / smontare in sicurezza la mia scheda SD per collegarla, diciamo, al mio PC? Mi sembra che avere partizioni separate sia logico e non vedo perché tutto ciò debba accadere.
jadkik94,

Non è la memoria esterna, è la cosiddetta "SD interna" e la /datapartizione che viene unita.
Flusso

This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. Solo FYI, questo NON è vero su almeno un telefono con Android 4.0 (Pantech Burst), dove /datac'è una partizione ext4 da 1 GB ed /mnt/sdcardè una partizione FAT32 da 12 GB .
netvope l'

3

Forzare il supporto SD esterno da /mnt/sdcardnon ha alcun merito tecnico, è il modo di Google di aiutare i fornitori di hardware a creare un punto di differenziazione per i telefoni con più memoria interna.

Non vi è alcun motivo per cui le applicazioni debbano trovare un modo per individuare la scheda esterna quando /mnt/sdcardera chiaramente il luogo in cui la sdcard avrebbe dovuto essere e il modo indefinito di Google di caricare una scheda SD esterna è un altro motivo in meno rispetto al consumatore per rendere la scheda SD esterna meno utile in dispositivi Android più recenti. Non vi è alcun motivo per cui /datae /mnt/sdcardsia stato necessario unire la stessa partizione nella versione più recente di Android, ad eccezione del produttore per differenziare i telefoni con memoria interna più grande da unità a basso costo con meno memoria interna. Anche se la fusione dovesse essere fatta, Google avrebbe potuto definire chiaramente uno STANDARDnuovo punto di montaggio per le schede SD esterne invece di lasciarlo completamente vago. Tutto ciò sta lavorando contro la prevenzione di un'ulteriore "segmentazione" dell'ecosistema Android attraverso un design goffo per aiutare la differenziazione dei telefoni di fascia più alta rispetto alle unità a basso costo con meno memoria integrata.

I file binari delle app Android sono minuscoli, i telefoni con 1-2 GB di memoria interna dovrebbero avere spazio più che sufficiente per centinaia di app e tutti i dati di grandi dimensioni potrebbero essere nascosti in modo sicuro su una scheda SD esterna. Ma poi i venditori si sono resi conto che dovevano avere un modo per differenziare il loro prodotto finale più elevato, e affermando che una memoria interna più alta diventasse parte di quello schema e paralizzando l'utilità della memoria esterna è l'altra parte integrata che questo schema ha richiesto per far funzionare completamente questo da qui il API meno utile per trovare schede SD esterne e punti di montaggio non standardizzati.

Quindi: No, montare la scheda SD in un posto diverso da quello /mnt/sdcardnon è altro che una strategia aziendale per vendere nuovi telefoni più costosi con la versione più recente di Android, nient'altro. Immagina, se il Nexus 4 da 8 GB e il Nexus da 16 GB possono entrambi utilizzare 64 GB di scheda SD esterna per applicazioni e supporti, c'è un motivo per cui qualcuno acquista la versione da 16 GB? Che 8 GB di memoria NAND extra non valgono sicuramente una differenza di prezzo di $ 50 se sono coinvolte schede SD esterne. Poiché la maggior parte dei componenti di uno smartphone deve essere praticamente la stessa (RAM, processore, radio), l'unica area rimasta per un maggiore margine di profitto è lo spazio di memoria interno, e quindi lo strano punto di montaggio della memoria esterna.

Inoltre, tutti hanno notato l'assenza di supporto SD esterno dal raccolto corrente di dispositivi Android con marchio "Google"? Questa tendenza continuerà ad espandersi nei dispositivi Android di "livello superiore". Il supporto di schede SD esterne è stata una differenziazione chiave per i dispositivi Android per superare il dominio di iPhone nel mercato mobile. Ora con Android che domina supremo nel gioco dei numeri, non c'è molto bisogno che questa pratica di riduzione del profitto sia mantenuta per molto più tempo.

Non sarei sorpreso da Android 5.0, il supporto per schede SD esterne sarebbe un ricordo del passato. Perché se è difficile per le app trovare la scheda SD esterna, la maggior parte dei programmi utilizzerà semplicemente i luoghi /datae le /mnt/sdcardposizioni conosciute , con la maggior parte delle app utilizza sempre più dati memorizzati per il suo funzionamento, una vibrante strategia di markup del prodotto viene creata dal nulla "semplicemente non montare una scheda SD esterna su /mnt/sdcard.


1
Questo è ciò che chiamo un muro di testo . Sembra anche un po 'ranty. Aggiungi alcuni paragrafi alla tua risposta. Inoltre non capisco perché non vi sia "alcun motivo per unire /datae /mnt/sdcard", poiché vedo chiaramente un motivo: evitare la frammentazione della memoria interna.
Flusso

1
Deecee è stato sicuramente un rant, ma a prescindere, apprezzo il tuo contributo. Saluti
Sepero

E c'è un'altra cosa: con i dispositivi che posizionano la scheda SD esterna all'interno di quella interna (ad es. /sdcard/external_sdSu LG P880), il backup di "memoria condivisa" include entrambi e crea un enorme archivio. Non è possibile eseguire il backup della SD interna solo con un approccio semplice. Il che non ha molto senso, poiché ci sono modi molto più semplici per il backup della scheda esterna. Un fatto che mi fa impazzire, dato che ho il dispositivo citato ...
Izzy

2

Dovresti essere consapevole (se rootato) puoi andare in /system/etc/vold.fstab e scambiare i punti di mount con / sdcard e /mnt/external_sd....questo consentirà alla tua sdcard di essere su / sdcard come ti aspetti e la "memoria interna" rimanente verrà montata su / mnt / external_sd o se preferisci / sdcard / external_sd /


Funziona con alcuni modelli di telefoni, ma non tutti. Non funziona con il mio LG Motion 4G, Android 4.0.4. Thx
Sepero
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.