Warum ist die SD-Karte in "/ sdcard / external_sd" anstelle von "/ sdcard" (oder "/ mnt / sdcard") eingebunden?

18

Ich habe kürzlich mein Handy auf ein LG Motion 4G (Android 4 ICS) aktualisiert. Ich sehe, dass die SD-Karte bei eingehängt ist /sdcard/external_sd. Mir ist auch aufgefallen, dass dies auch bei einigen anderen neueren Modellen der Fall zu sein scheint. Apps erwarten, dass sich die SD-Karte auf befindet /sdcard. Ich gehe davon aus, dass die Hersteller viel internen Speicher einbinden möchten, aber warum internen Speicher an /sdcardeinbinden? Sollte dies nicht gegen irgendeine Form von Android-Spezifikationsstandard sein?

Sepero
quelle
4
Bezüglich des "Spezifikationsstandards" sollte dies keine Probleme aufwerfen : Wie Sie in der Entwicklerdokumentation zu External Storage nachlesen können , sollten Apps den Speicherort / die Verfügbarkeit mithilfe von API-Aufrufen (hier: getExternalStorageState () ) und nicht mithilfe von fest codierten Pfaden ermitteln .
Izzy
Guter Punkt, Izzy, aber anscheinend leiten einige Hersteller Apps fälschlicherweise über getExternalStorageDirectory () in den internen Bereich um. stackoverflow.com/questions/11281010/…
Sepero
Ah, auch ein guter Punkt - als Nicht-Entwickler war mir das nicht bewusst. Aber ich sehe, Flow lieferte eine sehr gute Erklärung - wieder mit Punkten, die ich nicht kannte ...
Izzy

Antworten:

26

Der Grund ist die Geschichte von Android: Die erste Generation von Android-Geräten verfügte nur über einen geringen internen Speicher (ca. 100-400 MB), unter dem gemountet wurde /data.

Als nächstes kamen Geräte mit einer damals externen SD-Karte heraus. Die SD-Karte wurde unter montiert /mnt/sdcard.

Danach kamen Geräte mit großem internen Speicher auf den Markt. Dieser Speicher wurde aufgeteilt, da er /mnt/sdcardzum Standardspeicherort für Big-Data-Chunks aus Apps, Bildern und dergleichen geworden war. Die Android-Umgebung musste also ein /dataund /mnt/sdcard-Verzeichnis haben. Daher war eine Partition für /data, die andere für /mnt/sdcard. Dies ist der Grund, warum der Speicherplatz (die /dataPartition) niedrig werden kann, selbst wenn genügend Speicherplatz vorhanden ist /mnt/sdcard.

Diese Situation wurde mit Android 3.0 verbessert: /dataund /mnt/sdcardverweisen jetzt auf dieselbe Partition. Gute Arbeit Google, das hätte man schon vor Versionen machen können. Dies ist auch der Grund, warum app2sd unter Android 3.0 oder höher nicht mehr benötigt wird: Sie würden die Daten nur innerhalb desselben Volumes verschieben.

Nun kommen wir zur Antwort auf Ihre Frage: Da /mnt/sdcardbereits auf dem internen Speicher gemountet ist, muss eine externe SD-Karte einen anderen Mount-Punkt verwenden. Und dieser Einhängepunkt wird von Google nicht angegeben. Es könnte sein

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

Der API-Aufruf zeigt getExternalStorageDirectory()normalerweise auf das interne Speicherverzeichnis. Dieses Verhalten ist dokumentiert. Es gibt Open-Source-Projekte, die Tools zum kanonischen Auffinden des externen SD-Kartenverzeichnisses bereitstellen .

Fließen
quelle
Bedeutet das, dass es für Apps keine "transparente Möglichkeit" gibt, die SD-Karte zu bestimmen? Natürlich isExternalStorageRemovable()ist zu prüfen, ob der "externe" Speicher austauschbar ist. Außerdem kann man die Mount-Punkte (mithilfe des mountBefehls) ermitteln und nach Mount-Flags suchen für seine App selbst herauszufinden, und es gibt keinen einfachen API-Aufruf, um das für ihn zu tun?
Izzy
Das ist richtig. Es gibt die von mir verknüpften Bibliotheken, die versuchen, diese Funktion hinzuzufügen, aber es gibt keinen offiziellen API-Aufruf, um dies zu tun.
Flow
Wenn sowohl der externe Speicher als auch die /dataPartition zusammengeführt werden, wie kann ich dann meine SD-Karte sicher ein- / aushängen, um sie beispielsweise in meinen PC einzustecken? Es scheint mir, dass es logisch ist, getrennte Partitionen zu haben, und ich verstehe nicht, warum das alles passieren musste.
Jadkik94
Es ist nicht der externe Speicher, sondern die sogenannte "interne SD" und die /dataPartition, die zusammengeführt wird.
Flow
This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. Nur zu Ihrer Information, das gilt NICHT für mindestens ein Telefon mit Android 4.0 (Pantech Burst), bei dem /dataes sich um eine 1 GB ext4-Partition und /mnt/sdcardeine 12 GB FAT32-Partition handelt.
Netvope
3

/mnt/sdcardEs ist technisch nicht sinnvoll, externe SD-Mounts vom Markt zu verdrängen. Auf diese Weise hilft Google Hardwareanbietern, einen Differenzierungspunkt für Telefone mit mehr internem Speicher zu schaffen.

Es gibt keinen Grund, warum Anwendungen einen Weg finden müssen, um die externe Karte zu lokalisieren, wenn /mnt/sdcardeindeutig der Ort war, an dem die SD-Karte sein sollte, und Googles undefinierte Art des Ladens einer externen SD-Karte ist eine andere weniger als verbraucherfreundliche Methode, um die externe SD-Karte weniger nützlich zu machen neuere Android-Geräte. Es gibt keinen Grund, warum /dataund /mnt/sdcardmusste in der gleichen Partition auf neueren Version von Android mit Ausnahme des Herstellers zusammengeführt werden, um Telefone mit größerem internen Speicher von kostengünstigeren Einheiten mit weniger internem Speicher zu unterscheiden. Selbst wenn die Zusammenführung durchgeführt werden müsste, hätte Google einen STANDARD klar definieren könnenneuer Einhängepunkt für die externen SD-Karten, statt sie völlig vage zu lassen. Dies wirkt vollständig der Verhinderung einer weiteren "Segmentierung" des Android-Ökosystems durch ein unbeholfenes Design entgegen, um die Unterscheidung der Anbieter von Telefonen der oberen Preisklasse von Geräten mit geringerem internen Speicher zu unterstützen.

Android-App-Binärdateien sind winzig, Telefone mit 1-2 GB internem Speicher sollten mehr als genug Platz für Hunderte von Apps haben, und all die großen Datenmengen könnten sicher auf einer externen SD-Karte gespeichert werden. Aber dann erkannten die Anbieter, dass sie einen Weg finden mussten, um ihr höheres Endprodukt zu differenzieren, und die Behauptung, dass ein höherer interner Speicher Teil dieses Schemas wird und die Nützlichkeit des externen Speichers beeinträchtigt, ist der andere integrierte Teil, den dieses Schema benötigt, um vollständig zu funktionieren weniger hilfreiche API, um externe SD-Karten und die nicht standardisierten Befestigungspunkte zu finden.

Also: Nein, die Installation der SD-Karte an einem anderen Ort /mnt/sdcardist nichts anderes als eine Geschäftsstrategie für den Verkauf teurerer neuer Telefone unter einer neueren Version von Android, nichts weiter. Stellen Sie sich vor, wenn das Nexus 4 8 GB und das Nexus 16 GB jeweils 64 GB externe SD-Karte für Anwendungen und Medien verwenden können. Gibt es einen Grund für jemanden, die 16 GB-Version zu kaufen? Diese zusätzlichen 8 GB NAND-Speicher sind mit Sicherheit keinen Preisunterschied von 50 USD wert, wenn externe SD-Karten beteiligt sind. Da die meisten Komponenten in einem Smartphone fast identisch sein müssen (RAM, Prozessor, Radios), bleibt nur noch der interne Speicherplatz und damit der seltsame externe Speicherplatz übrig.

Hat auch jeder mitbekommen, dass die aktuelle Ernte von Android-Geräten der Marke "Google" keine externe SD-Unterstützung bietet? Dieser Trend wird sich bei Android-Geräten der Spitzenklasse fortsetzen. Die Unterstützung externer SD-Karten war eine wichtige Differenzierung für Android-Geräte, um die Dominanz des iPhones auf dem Mobilfunkmarkt zu überholen. Jetzt, da Android im Zahlenspiel überlegen ist, muss diese Gewinnabschöpfungspraxis nicht mehr lange aufrechterhalten werden.

Android 5.0 wird mich nicht überraschen, die Unterstützung externer SD-Karten gehört der Vergangenheit an. Weil, wenn es für Apps schwierig ist, externe SD-Karten zu finden, die meisten Programme einfach die bekannten /dataund /mnt/sdcardgeografischen Orte verwenden und die meisten Apps immer mehr gespeicherte Daten für ihren Betrieb verwenden, wird eine lebendige Produktmarkierungsstrategie aus dem Nichts heraus erstellt msgstr "einfach keine externe SD - Karte einbinden /mnt/sdcard.

Deecee
quelle
1
Das nenne ich eine Textwand . Scheint auch ein bisschen ranty zu sein. Bitte fügen Sie Ihrer Antwort einige Absätze hinzu. Außerdem verstehe ich nicht, warum es "keinen Grund zum Zusammenführen /dataund /mnt/sdcard" gibt, da ich eindeutig einen Grund sehe: Vermeidung der Fragmentierung des internen Speichers.
Flow
1
Das war auf jeden Fall ein Scherz, Deecee, aber ich weiß Ihre Beiträge zu schätzen. Cheers
Sepero
Und eines noch: Bei Geräten, bei denen die xternale SD-Karte in die interne eingelegt wird (z. B. /sdcard/external_sdbeim LG P880), umfasst das Sichern von "Shared Storage" beides und erstellt ein riesiges Archiv. Keine Möglichkeit, die interne SD nur auf einfache Weise zu sichern. Was nicht viel Sinn macht, da es viel einfachere Möglichkeiten gibt, die externe Karte zu sichern. Eine Tatsache, die mich verrückt macht, wie ich das erwähnte Gerät habe ...
Izzy
2

Sie sollten sich bewusst sein, dass Sie (wenn Sie als Root angemeldet sind) in /system/etc/vold.fstab die Einhängepunkte für / sdcard und /mnt/external_sd austauschen können, damit sich Ihre SD-Karte erwartungsgemäß auf / sdcard befindet und der verbleibende "interne Speicher" wird in / mnt / external_sd gemountet oder wenn Sie es vorziehen / sdcard / external_sd /

Rudi Pittman
quelle
Dies funktioniert bei einigen Telefonmodellen, jedoch nicht bei allen. Es funktioniert nicht für mein LG Motion 4G, Android 4.0.4. Thx
Sepero