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_real
in 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.
su
Terminal 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.
echo Script executed > /mnt/fuse/sdcard1/test.log
prü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.log
und überprüfen Sie die Fehlermeldung. Oder führen Sie das Skript manuell aus, um Folgendes anzuzeigen : su /data/local/userinit.sh
.
touch
zeigt, 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 foo
und bekomme einen ähnlichen Fehler : Unknown id: echo
.
echo
um jeden Befehl vor seiner Ausführung auszugeben und die Fehlerausgabe mit umzuleiten 2>>
.
ls -l /mnt/fuse/
undls -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 dasfoo/
Verzeichnis auf der Karte. Denken Sie daran, ext4 unterstützt vollständige * nix-Dateiberechtigungen, inkl. Benutzer und Gruppen.