Das /sdcard-Verzeichnis und andere Verzeichniskonventionen: Wie ist das Android-Dateisystem strukturiert?

Ich verwende den Befehl "adb shell", um entweder auf ein LG P690 (Gerät A) oder ein Samsung Galaxy SIII (Gerät B) zuzugreifen. In Gerät A ist auch eine 32-GB-microSD-Karte eingesteckt, in Gerät B nicht. Wenn ich von der Shell auffordere cd /sdcardund eine mache, dfbekomme ich:

  • Auf Gerät A: /sdcardGröße 14G Blksize 8192
  • Auf Gerät B: /sdcardGröße 12G Blksize 4096

Bezieht sich das auf den internen Speicher? Gerät B hat auch ein /storageVerzeichnis, das 0 Bytes enthält (was ist das?).

Außerdem haben beide ein /dataVerzeichnis, von dem ich weiß, dass es dort installierte Apps gibt. Liegt das auch am internen Speicher? Woher weiß ich, ob /dataes sich um eine interne oder externe SD handelt?

Ich bin verwirrt darüber, warum sich ein aufgerufenes Verzeichnis /sdcardauf den internen und nicht auf den externen Speicher bezieht. Gibt es für das Android-Dateisystem keinen FHS-Standard wie für Linux?

Antworten (1)

Das sind zwei verschiedene Dinge, zumindest das erste abhängig von a) Android-Version, b) Hersteller und c) manchmal sogar dem betreffenden Gerät:

  • vor Android 4.0 /sdcardwar normalerweise dort, wo die externe SDCard zu finden war
  • Ab Android 4.0 (oder gar 3.x?) änderte sich dies für die meisten Geräte und wurde normalerweise zum Platz der sogenannten internen SDCard
  • Wo die externe SDCard bei letzterer Gruppe zu finden ist, unterscheidet sich stark. Mir bekannte Orte sind:
    • /sdcard_ext
    • /sdcard/external_sd

mountWas sich wirklich wo befindet, können Sie mit Befehlen wie oder überprüfen df. Während mountalle gemounteten Dateisysteme (einschließlich der "virtuellen" wie zB /procund /sys) aufgelistet werden, zusammen mit Details darüber, woher sie gemountet wurden und welche Optionen verwendet wurden, könnte dies etwas verwirrend sein (zumindest für Anfänger). Vielleicht möchten Sie also lieber verwenden df, das sich an die "echten Dateisysteme" hält: Es zeigt nicht an, woher sie gemountet sind, sondern zeigt stattdessen ihren gesamten / belegten / freien Speicherplatz, was noch nützlicher sein könnte, um herauszufinden, was passt am besten.

Was /data: Ja, dies befindet sich normalerweise im internen Speicher – kann aber auch von der Implementierung abhängen. Bei Android 4.x sind „interner Speicher“ und „interne SD-Karte“ oft „vereinheitlicht“ (dh die „interne SD-Karte“ ist oft nichts anderes als ein Verzeichnis auf dem internen Speicher). Dies wurde unter anderem gemacht, um das Problem eines vollen internen Speichers (der kann jetzt in den internen SD-Bereich "erweitern") oder einer vollen internen SD-Karte und viel Platz auf dem internen Speicher (kann den anderen "erweitern") zu beseitigen auch andersherum - da es immer derselbe "Antrieb" ist).

Auf Gerät B zeigt der df-Befehl jedoch /data und /storage/sdcard0 als unterschiedliche Partitionen an, obwohl beide die gleiche Kapazität haben und die gleiche Menge an belegtem Speicherplatz anzeigen. Auf diesem Gerät befinden sich wahrscheinlich die internen und externen SD-Karten /storage/sdcard0 und /storage/extSdCard.
Sieht für mich richtig aus. Was den internen Speicher / die interne SD-Karte betrifft: Wie ich bereits geschrieben habe, hängt das sehr von der Implementierung ab. Es wird empfohlen, „Unified Storage“ zu verwenden (siehe diesen Blog und dieses Sitzungsprotokoll ), aber es wird in keiner Weise erzwungen.