Wie kann ich eine ext4-formatierte SD-Karte mit korrekten Berechtigungen (mit Root) mounten?

9

Ich sehe hier einige Erwähnungen zum Erstellen einer SD-Karte im ext4-Format, aber keine Anleitung. Diese eng verwandte Frage legt nahe, dass es keine Möglichkeit gibt, dies zu tun, aber meine Frage unterscheidet sich darin, dass mein Telefon speziell verwurzelt ist.

Ich habe meine Karte als ext4 (GUID-Partitionstabelle) formatiert. Mein Cyanogenmod-Telefon hat es an montiert /mnt/fuse/sdcard1. Ich folgte Anweisungen hier um die Karte zu montieren /storage/sdcard1, indem Sie das folgende Skript/data/local/userinit.sh

#!/system/bin/sh
REALMNT=/mnt/fuse/sdcard1_real
if ! [ -d "$REALMNT" ]; then
  mkdir "$REALMNT" || exit 1
fi
mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023 &

Ich habe neu gestartet und versucht, eine Datei (mit ES File Explorer) zu kopieren und in das übergeordnete Verzeichnis einzufügen. Dies ist fehlgeschlagen:

/storage/sdcard1/foo/bar.mp3: open failed: EACCES (Permission denied).

Ich kann die Datei tatsächlich gut abspielen, damit ich sie öffnen kann. FWIW, wenn ich versuche, vom ursprünglichen Einhängepunkt ( /mnt/fuse/sdcard1) zu kopieren , wird ein etwas anderer Fehler angezeigt :

Failed to copy the file bar.mp3

Ich verwende ein Samsung Galaxy S3 mit Cyanogenmod 10.2.0-i9300.

== EDIT ==

su
ls -l /mnt/fuse
drwxrwxr-x media_rw media_rw   2014-03-04 22:08 sdcard1

Das war alles. Es gibt keine sdcard1_realin diesem Verzeichnis, also denke ich, dass das Skript fehlschlägt?

== EDIT2 ==

Ich habe versucht, das Skript zur Fehlerbehebung zu ändern. Das Skript beginnt einwandfrei, schlägt dann aber mkdir "$REALMNT"mit dem Fehler fehl /data/local/userinit.sh[6]: : not found.

== EDIT3 ==

Ich weiß, dass das Skript nicht funktioniert, daher könnte das Beheben meiner Frage meine Frage lösen, aber ich fand das Folgende interessant. Ich habe meine SD-Karte in meinem Linux-Computer formatiert und einige Dateien darauf übertragen. Seltsamerweise treten Berechtigungsfehler nur in den von mir erstellten Unterverzeichnissen auf. Im Stammverzeichnis der Partition (via /storage/sdcard1) habe ich bereits Schreibberechtigung.

Sparhawk
quelle
1
Als root bitte ausführen ls -l /mnt/fuse/und ls -l /mnt/fuse/sdcard1_real. Bearbeiten Sie dann Ihre Frage, um die Ergebnisse einzuschließen. Meine Vermutung ist "falsche Dateiberechtigungen" - entweder für den Mount oder für das foo/Verzeichnis auf der Karte. Denken Sie daran, ext4 unterstützt vollständige * nix-Dateiberechtigungen, inkl. Benutzer und Gruppen.
Izzy
Sie geben suTerminal ein, um root zu bekommen. Möglicherweise müssen Sie die Erteilung der Berechtigung am Telefon bestätigen, wenn Sie dies zum ersten Mal tun.
Chahk
Entweder schlägt das Skript fehl oder es wird überhaupt nicht ausgeführt. Möglicherweise möchten Sie eine Debug-Ausgabe hinzufügen, z. B. echo Script executed > /mnt/fuse/sdcard1/test.logprüfen, ob sie überhaupt ausgeführt wird. Wenn ja, machen Sie die vorletzte Zeile mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.logund überprüfen Sie die Fehlermeldung. Oder führen Sie das Skript manuell aus, um Folgendes anzuzeigen : su /data/local/userinit.sh.
Izzy
@Izzy touchzeigt, dass das Skript ausgeführt wird. Ich habe versucht, das Skript manuell mit auszuführen su /data/local/userinit.sh, aber dies ist fehlgeschlagen. Ich habe es auch versucht su echo foound bekomme einen ähnlichen Fehler : Unknown id: echo.
Sparhawk
Informationen zu Ihrer EDIT3 finden Sie in meinem ersten Kommentar: ext4 unterstützt vollständige * nix-Dateiberechtigungen, inkl. Benutzer und Gruppen . Sie haben diese Verzeichnisse mit einem Benutzer erstellt, der auf Ihrem Android-Gerät nicht vorhanden ist, sodass sie zu "unbekannter Benutzer / unbekannte Gruppe" gehören. Wenn Sie "world" keinen Schreibzugriff gewährt haben, kann dort nur root schreiben. Sie sollten sich mit diesen * nix-Grundlagen vertraut machen, wenn Sie ein solches Dateisystem auf tragbaren Medien verwenden;) Was das Skript betrifft, empfehle ich erneut, weitere Debug-Informationen hinzuzufügen, z. B. echoum jeden Befehl vor seiner Ausführung auszugeben und die Fehlerausgabe mit umzuleiten 2>>.
Izzy

Antworten:

6

Dies wurde angeblich vor einigen Monaten behoben, aber die Leute berichten immer noch über Probleme. Ich kann Elemente auf der Karte lesen, habe jedoch keine Schreibberechtigung. Um dies zu beheben, habe ich Strategien aus einigen Quellen kombiniert .

  1. Partitionskarte mit MS-DOS-Partitionstabelle und ext4-Dateisystem. Ich habe GParted auf meinem (Linux) Desktop-Computer verwendet.
  2. Legen Sie die Karte in Ihr Telefon ein. (Sie werden jetzt wahrscheinlich keinen Schreibzugriff haben.)
  3. Öffnen Sie den Terminalemulator , der standardmäßig in Cyanogenmod installiert ist.
  4. Geben Sie Folgendes ein (ich empfehle WiFi-Tastatur für große Textblöcke). Geben Sie dem Emulator Root-Berechtigungen, wenn er sie anfordert.

Die Eingabeaufforderungen $und #geben an, geben Sie sie also nicht ein.

$ su
# chown media_rw:media_rw /mnt/media_rw/sdcard1
# chmod g+w /mnt/media_rw/sdcard1

Dies ändert die Berechtigungen der SD-Karte. Der Eigentümer und die Gruppe wechseln von systemzu media_rwund geben der Gruppe Schreibzugriff.

Sparhawk
quelle
brauche -R für rekursives Chown -R media_rw: media_rw / mnt / media_rw / sdcard1
m3asmi
1

Sie sind sich nicht sicher, ob es Hilfe gibt, aber möglicherweise liegt das Problem darin, dass Sie versuchen, am falschen Ort zu montieren? Dies ist mein Arbeitsskript, das auf einem S3 mini mit CM11 funktioniert:

#!/system/bin/sh
REALMNT=/mnt/media_rw/sdcard1
if ! [ -d "$REALMNT" ]; then
mkdir "$REALMNT" || exit 1
fi
mount -t ext4 -o rw,noatime /dev/block/mmcblk1p1 "$REALMNT"
sdcard "$REALMNT" /storage/sdcard1 1023 1023 

Der REALMNT-Standort existierte bereits, daher wurde der mkdir natürlich nie aufgerufen. Und media_rw / sdcard1 gehört bereits media_rw

Ich musste auch /etc/permissions/platform.xml aktualisieren, um Folgendes einzuschließen: <group id="media_rw"/> in: <permission name="android.permission.WRITE_EXTERNAL_STORAGE">

user59177
quelle
Vielen Dank. Ich hatte dies etwas aufgegeben, da ich mit meinem Skript auch einen hohen Batterieverbrauch hatte. Da es im Kofferraum repariert ist, werde ich mich nicht mehr um eine Problemumgehung kümmern. Danke aber und +1.
Sparhawk
@Sparhawk: Ich bin mir nicht sicher, welche CYM-Version Sie verwenden, aber meine SD-Karte wird nicht automatisch gemountet.
Luis A. Florit
@ LuisA.Florit Ich bin mir nicht sicher, ob Sie auf diese Antwort antworten wollten . Wie auch immer, ich verwende 11-20140804-SNAPSHOT-M9-i9300. Ich habe weitere Informationen in einer anderen Antwort gepostet .
Sparhawk
@Sparhawk: Meine Karte ist noch nicht einmal gemountet, und der Mount-Vorgang in den Einstellungen schlägt fehl. Vielleicht hängt das Problem mit meiner Frage hier zusammen ( android.stackexchange.com/questions/82089/… kannsu nicht gemountet ): werden. `` Ich verwende cm-11-20140804-SNAPSHOT-M9-mondrianwifi.zip.
Luis A. Florit
@ LuisA.Florit Nicht wirklich sicher. Vielleicht eine neue Frage stellen?
Sparhawk
0

Es gab eine Antwort von adasdadasd , die ich akzeptieren wollte, die aber inzwischen gelöscht wurde. Ich werde es unten reproduzieren und meine Antwort akzeptieren, aber wenn adasdadasd wieder auftaucht, poste es bitte neu und ich werde es löschen und deine akzeptieren.

https://jira.cyanogenmod.org/browse/CYAN-332

https://github.com/CyanogenMod/android_packages_providers_MediaProvider/commit/faf3f77b9222554227740aed8127714ea9e3f407

Standardmäßig behoben? Neue Änderung in Github.

Sparhawk
quelle