Verwirrt durch die vielen Speicherorte der virtuellen /sdcard/

Einige Geräte (wie mein Nexus 4) haben keinen externen Steckplatz für eine SD-Karte. Stattdessen gibt es einen Stammordner namens /sdcard/, der genauso behandelt wird. Aber ich finde auch andere Pfade, die alle auf dieselben Dateien verweisen - es muss eine Art Weiterleitung geben (ich glaube, das wird unter Linux Symlinks genannt).

Alle diese Pfade enthalten dieselben Dateien:

/sdcard/
/storage/sdcard0/
/storage/emulated/0/
/storage/emulated/legacy/

Welcher Weg ist der "eigentliche"? Was ist mit den anderen Pfaden? Wozu dienen sie, warum gibt es sie?

Antworten (2)

Vortragsempfehlung: Warum wurde /sdcard/ mit 4.2 zu /sdcard/0/? .

Kurz gesagt: Es hat mit der mit Jelly Bean eingeführten Multi-User-Funktionalität zu tun:

  • /storage/emulated/0/: Meines Wissens bezieht sich dies auf die "emulierte MMC" ("Besitzerteil"). Normalerweise ist dies die interne. Die „0“ steht hier für den Benutzer, „0“ ist der erste Benutzer bzw. Gerätebesitzer. Wenn Sie weitere Benutzer erstellen, wird diese Zahl für jeden erhöht.
  • /storage/emulated/legacy/wie zuvor, zeigt aber auf den Teil des aktuell arbeitenden Benutzers (für den Eigentümer wäre dies ein Symlink zu /storage/emulated/0/). Dieser Weg soll also jeden User zu seinem "Teil" bringen.
  • /sdcard/: Laut einem Kommentar von Shywim ist dies ein Symlink zu...
    • /mnt/sdcard(Android < 4.0)
    • /storage/sdcard0(Android 4.0+)
  • /storage/sdcard0/: Da es hier kein legacyPendant gibt (siehe Kommentare unten), identifiziert die "0" in diesem Fall eher das Gerät (Karte) selbst. Man könnte schließlich einen Kartenleser mit einer anderen SD-Karte über OTG verbinden, was dann würde /storage/sdcard1(kein Beweis dafür, nur eine Vermutung - aber ich würde sagen, ein guter)

Obwohl man zu dem Schluss kommen könnte, dass es auch ein geben sollte /storage/sdcard/legacy, gibt es keins (siehe Kommentare) – was bei meiner Annahme, dass sich die Zahlen hier nicht auf den Benutzer beziehen, sondern auf mögliche Mehrfachkarten, völlig sinnvoll ist: „ 0" wäre immer diejenige im Kartensteckplatz des Geräts, daher ist hier kein "Legacy-Symlink" erforderlich.

Danke! Und nein, es gibt keinen /storage/sdcard/legacyWeg.
Komisch. Aber das könnte damit zu tun haben, dass es auf einer echten SD-Karte kaum Berechtigungen gibt (aufgrund des FAT-Dateisystems, das sie nicht unterstützt). Beachten Sie den Unterschied ( /sdcard0/versus /emulated/0), die "0" hier könnte für den Fall gedacht sein, dass man mehrere SD-Karten über einen Kartenleser und dann den USB-Host-Modus anschließt. Nur eine Vermutung, keine harte Tatsache – aber ich würde sagen, eine gute.
/sdcard/ist einfach ein symbolischer Link zu /storage/sdcard0/. Bei älteren Versionen als 4.0.0 ist es /mnt/sdcard/.
Und ich nehme an, auf Android 4.0+ /mnt/sdcard/ist ein Symlink zu /storage/sdcard0/? Da beide auf meinem Nexus 4 navigierbar sind.
Ich würde sagen, ja.
Ihr Kommentar zu /storage/sdcard0/widerspricht der Antwort auf die von Ihnen verlinkte Frage , in der Sie sagen, dass sich die "0" sdcard0auf die Benutzer-ID bezieht.
@superuser Nein. Nochmals lesen – und darauf achten, wo der Schrägstrich steht: /sdcard0ist die erste SD-Karte, während /sdcard/0der Teil der SD-Karte des ersten Benutzers ist :) Abgesehen davon wird hier nach 4.0+ gefragt – während diese Mehrbenutzer-Sachen waren erst mit 4.2+ eingeführt.
In Android6 (Marshmallow) wird /storage/emulated/legacy leer (zumindest auf Nexus-Geräten), wo es vor dem Upgrade auf Marshmallow dasselbe wie /storage/emulated/0 enthielt

Ja, ein bisschen verwirrend, aber das sind alternative Pfade für das Speicherlayout

/mnt/sdcard0/ (interne virtuelle SD-Karte)

und Izzy haben Sie Recht, wenn mehr Geräte angeschlossen sind, aber die Benennung kann je nach Gerät unterschiedlich sein.

Ex. /mnt/sdcard1/ (Physische SD-Karte im SD-Steckplatz)

aber auch andere geräte wie zB ein usb-stick mit adapter können aufgerufen werden

/mnt/media_rw/usbdisk (Android Kitkat 4.4 und höher?) oder /mnt/usbdisk (Jellybean 4.1 - 4.2)

Ja, die Benennung kann vom Gerät/Hersteller/ROM abhängen. Aber normalerweise /mnt/*ist es in all diesen Fällen nur ein Symlink – mit den "echten Reittieren" darunter /storage:)
Nun, ich habe auch einen Shell- Ordner unter mnt . Ich wechsle häufig das Geräte-ROM und daher verhält sich der Shell- Ordner für diese ROMs, die eine externe SD-Karte als Standardspeicher festlegen, wie mein interner Speicher, und für andere ROMs, die die SD-Karte nicht als internen Speicher austauschen, kommt die Shell nicht einmal ins Bild. Es bleibt einfach im Ordner mit allen intakten Daten, ist aber für den lokalen Dateimanager nicht zugänglich. Wollte wissen, was das genau ist.