Je vois ici quelques mentions de la création d'une carte SD au format ext4, mais pas de guide. Cette question étroitement liée suggère qu'il n'y a aucun moyen de le faire, mais ma question diffère en ce que mon téléphone est spécifiquement enraciné.
J'ai formaté ma carte en ext4 (table de partition GUID); mon téléphone CyanogenMod l'a monté à/mnt/fuse/sdcard1
. J'ai suivi les instructions ici pour monter la carte à /storage/sdcard1
, en créant le script suivant à/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 &
J'ai redémarré et tenté de copier un fichier (à l'aide de ES File Explorer) et de le coller dans son répertoire parent, ce qui a échoué:
/storage/sdcard1/foo/bar.mp3: open failed: EACCES (Permission denied).
Je peux effectivement lire le fichier correctement, donc je peux l' ouvrir. FWIW, lorsque j'essaie de copier à partir du point de montage d'origine ( /mnt/fuse/sdcard1
), j'obtiens une erreur légèrement différente:
Failed to copy the file bar.mp3
J'utilise un Samsung Galaxy S3 avec Cyanogenmod 10.2.0-i9300.
== EDIT ==
su
ls -l /mnt/fuse
drwxrwxr-x media_rw media_rw 2014-03-04 22:08 sdcard1
C'était tout. Il n'y sdcard1_real
en a pas dans ce répertoire, donc je suppose que le script échoue?
== EDIT2 ==
J'ai essayé de modifier le script pour dépanner. Le script commence bien, mais échoue ensuite mkdir "$REALMNT"
avec l'erreur/data/local/userinit.sh[6]: : not found
.
== EDIT3 ==
Je sais que le script ne fonctionne pas, donc le corriger pourrait résoudre ma question, mais je pensais que ce qui suit était intéressant. J'ai formaté ma carte SD dans mon ordinateur Linux et y ai transféré certains fichiers. Curieusement, les erreurs d'autorisation ne se produisent que dans les sous-répertoires que j'ai créés. À la racine de la partition (via /storage/sdcard1
), j'ai déjà une autorisation d'écriture.
su
terminal pour obtenir root. Vous devrez peut-être confirmer l'octroi de l'autorisation par téléphone, si vous le faites pour la première fois.
echo Script executed > /mnt/fuse/sdcard1/test.log
, et vérifier si elle est en cours d'exécution. Si c'est le cas, effectuez l'avant-dernière ligne mount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.log
et vérifiez le message d'erreur. Ou exécuter manuellement le script pour voir: su /data/local/userinit.sh
.
touch
montre que le script est en cours d'exécution. J'ai essayé d'exécuter le script manuellement avec su /data/local/userinit.sh
, mais cela a échoué. J'ai aussi essayé su echo foo
, et obtenir une erreur semblable: Unknown id: echo
.
echo
pour sortir chaque commande avant son exécution et rediriger la sortie d'erreur avec 2>>
.
ls -l /mnt/fuse/
etls -l /mnt/fuse/sdcard1_real
. Modifiez ensuite votre question pour inclure les résultats. Ma supposition est "de mauvaises autorisations de fichier" - soit pour le montage, soit pour lefoo/
répertoire sur la carte. N'oubliez pas, ext4 prend en charge les autorisations de fichier nix * complètes, y compris. utilisateur et groupes.