Je vois quelques mentions ici de la création d'une carte SD formatée en ext4, mais pas de guide. Ce site Une question étroitement liée suggère qu'il n'y a aucun moyen de le faire, mais ma question diffère dans la mesure où 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ée à l'adresse /mnt/fuse/sdcard1
. J'ai suivi les instructions aquí pour monter la carte à /storage/sdcard1
en créant le script suivant à l'adresse /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 (en utilisant l'explorateur de fichiers ES) 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 lire le fichier sans problème, donc je puede l'ouvrir. Pour information, lorsque j'essaie de copier à partir du point de montage original ( /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 a pas sdcard1_real
dans ce répertoire, donc je suppose que le script échoue ?
\==EDIT2==
J'ai essayé de modifier le script pour résoudre le problème. Le script commence bien, mais échoue ensuite sur 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 j'ai pensé que ce qui suit était intéressant. J'ai formaté ma carte SD dans mon ordinateur Linux, et j'y ai transféré quelques fichiers. Curieusement, les erreurs de permission ne se produisent que dans les sous-répertoires que j'ai créés. Dans la racine de la partition (via /storage/sdcard1
), j'ai déjà la permission d'écrire.
1 votes
En tant que Root, veuillez exécuter
ls -l /mnt/fuse/
yls -l /mnt/fuse/sdcard1_real
. Ensuite, modifier votre question pour inclure les résultats. Mon devinez est "autorisations de fichiers incorrectes" - soit pour le montage, soit pour lesfoo/
sur la carte. Rappelez-vous, ext4 supporte les permissions complètes de fichiers *nix, y compris l'utilisateur et les groupes.0 votes
Vous tapez
su
dans le terminal pour obtenir Root. Vous devrez peut-être confirmer l'octroi de la permission sur le téléphone, si vous le faites pour la première fois.0 votes
Soit le script échoue, soit il n'est pas exécuté du tout. Vous pouvez ajouter une sortie de débogage, par ex.
echo Script executed > /mnt/fuse/sdcard1/test.log
et vérifiez s'il fonctionne. Si c'est le cas, mettez l'avant-dernière ligne suivantemount -t ext4 /dev/block/mmcblk1p1 "$REALMNT" 2> /mnt/fuse/sdcard1/test.log
et vérifiez le message d'erreur. Ou exécutez le script manuellement pour voir :su /data/local/userinit.sh
.0 votes
@Izzy
touch
montre que le script est en cours d'exécution. J'ai essayé d'exécuter le script manuellement avecsu /data/local/userinit.sh
mais cela a échoué. J'ai également essayésu echo foo
et j'obtiens une erreur similaire :Unknown id: echo
.0 votes
Quant à votre EDIT3, voir mon premier commentaire : ext4 soutient les permissions complètes de fichier de *nix, y compris l'utilisateur et les groupes . Vous avez créé ces répertoires avec un utilisateur qui n'existe pas sur votre appareil Android, ils appartiennent donc à "utilisateur inconnu / groupe inconnu". Si vous n'avez pas accordé l'accès en écriture à "world", seul Root pourrait y écrire. Vous devriez vous familiariser avec ces bases *nix lorsque vous utilisez un tel système de fichiers sur un support portable ;) En ce qui concerne le script, je suggère à nouveau d'ajouter des informations de débogage supplémentaires, par exemple en utilisant les éléments suivants
echo
pour afficher chaque commande avant qu'elle ne soit exécutée, et rediriger la sortie d'erreur avec2>>
.0 votes
@Izzy Si je comprends bien, le but du script est de corriger ces incohérences de permission ? I hat faire plus de débogage, mais peut-être que EDIT2 n'était pas assez clair. Le script s'est exécuté jusqu'à
exit 1
puis a échoué avec l'erreur indiquée.0 votes
Se pourrait-il que le script soit exécuté trop tôt, et que
/mnt/fuse
n'est pas présent lorsque vous essayez demkdir
(essayez de mettre unls /mnt
avant lemount
) ? Si oui, unmkdir -p "$REALMNT" || exit 1
pourrait contourner cela - mais je ne suis pas sûr des effets secondaires lorsque le système essaie de créer/mnt/fuse
plus tard et il existe déjà.0 votes
En rapport : Comment lier le montage d'un dossier dans /sdcard avec les permissions correctes ?
0 votes
@IrfanLatif Je n'ai plus de téléphone avec une carte SD, mais contrairement à votre réponse dans le lien, je ne me souviens pas de problèmes avec "chaque application créera des fichiers avec son propre UID", comme dans ma réponse ci-dessous. Je ne peux plus vraiment vérifier cela, malheureusement. En tout cas, j'espère que votre lien sera utile à certains ici.