9 votes

Comment puis-je monter une carte SD formatée en ext4 avec des permissions correctes (avec Root) ?

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/ y ls -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 les foo/ 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 suivante mount -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 .

7voto

Sparhawk Points 326

C'était soi-disant corrigée il y a plusieurs mois, mais les gens continuent de signaler des problèmes. Je peux lire les éléments de la carte, mais je n'ai pas le droit d'écriture. Pour résoudre ce problème, j'ai combiné les stratégies d'un quelques sources .

  1. Carte de partition avec table de partition MS-DOS et système de fichiers ext4. J'ai utilisé GParted sur mon ordinateur de bureau (Linux).
  2. Insérez la carte dans votre téléphone. (Vous n'aurez probablement pas d'accès en écriture maintenant).
  3. Ouvrez le émulateur de terminal installé par défaut dans Cyanogenmod.
  4. Tapez ce qui suit (je recommande Clavier WiFi pour les gros blocs de texte). Donnez à l'émulateur les privilèges Root lorsqu'il les demande.

Le site $ y # indiquent des invites, alors ne les tapez pas.

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

Cela modifie les autorisations de la carte SD. Le propriétaire et le groupe passent de system a media_rw et il donne également au groupe un accès en écriture.

0 votes

Besoin de -R pour recursif chown -R media_rw:media_rw /mnt/media_rw/sdcard1

2voto

matt Points 21

Je ne sais pas si cela peut vous aider, mais il est possible que le problème soit que vous essayez de monter au mauvais endroit ? Voici mon script de travail qui fonctionne sur un S3 mini avec CM11 :

#!/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 

L'emplacement REALMNT existait déjà, donc bien sûr le mkdir n'a jamais été appelé. Et media_rw/sdcard1 appartient déjà à media_rw.

J'ai également dû mettre à jour /etc/permissions/platform.xml pour inclure : <group id="media_rw"/> dans : <permission name="android.permission.WRITE_EXTERNAL_STORAGE">

0 votes

Merci. J'avais un peu abandonné cette idée, car j'avais aussi une forte consommation de batterie avec mon script. Puisque c'est corrigé dans le tronc, je ne m'embêterai plus avec une solution de contournement. Merci quand même, et +1.

0 votes

@Sparhawk : Je ne sais pas quelle version de CYM vous utilisez, mais ma carte SD n'est pas montée automatiquement.

0 votes

@LuisA.Florit Je ne suis pas sûr que vous vouliez répondre à cette réponse . Bref, j'utilise la version 11-20140804-SNAPSHOT-M9-i9300. J'ai posté plus d'informations dans une autre réponse .

0voto

Sparhawk Points 326

Une réponse a été postée par adasdadasd que je voulais accepter, mais qui a été supprimé depuis. Je la reproduis ci-dessous et accepte ma réponse, mais si adasdadasd refait surface, veuillez la reposter et je la supprimerai pour accepter la vôtre.

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

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

Fixé par défaut ? Nouvelle modification dans github.

0voto

Ykg Points 1

Voici la simpeline

#!/system/bin/sh
REALMNT="/mnt/media_rw/extSdCard"
mount -t ext4 -o rw,noatime /dev/block/mmcblk1p1     "$REALMNT"
sdcard "$REALMNT" /storage/extSdCard 1023 1023 &

Et ici ext4 inscriptible sur le sd externe

#!/system/bin/sh
chown media_rw:media_rw /mnt/media_rw/extSdCard
chmod g+w /mnt/media_rw/extSdCard

Vous pouvez changer "extSdCard" comme "sdcard1" où votre sdcard externe monté

J'ai utilisé stockrom avec Kingroot, mais si j'essaie Supersu, il a des problèmes avec le montage du système de fichiers.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X