3 votes

Carte externe Ext4 montée uniquement pour Root ( !) sur Android 5.1 64 bits

En bref si je monte ma carte SD Ext4 de 8GB, seul Root (SU) peut voir il. Le reste des utilisateurs (donc, le reste des applications) ne le détectent pas.

Tant que mon Ext4 SD La carte n'est pas montée correctement (Android donne toujours Damaged SD card. Format it... blah blah blah ), j'ai suivi ce guide pour le monter. Et ça marche :

Carte SD est à carte SD /dev/block/mmcblk1 donc la première partition est à /dev/block/mmcblk1p1 .
J'ai effectué le processus ADB préalable (pas très clair pour moi) :

su
setprop service.adb.tcp.port 5555
adb kill-server
stop adbd
start adbd
HOME=/sdcard adb start-server
adb connect localhost
adb -s localhost:5555 shell
exit
stop adbd
cat /sdcard/.android/adbkey.pub >> /data/misc/adb/adb_keys
start adbd

Et puis la carte est correctement monté en faisant (comme Root) :

# mount -t ext4 /dev/block/mmcblk1p1 /storage/extSdCard && sleep 5 && /system/bin/vold

Notez comment cela fonctionne comme SU mais pas comme un utilisateur normal :

root@unknown:/ # ls /storage/sdcard1
lost+found
root@unknown:/ # exit
u0_a98@unknown:/ $ ls /storage/sdcard1
ls: can't open '/storage/sdcard1': Permission denied

J'ai testé les étapes ci-dessus via SSH (shell distant).
La carte SD a été formatée depuis Windows à l'aide de la fonction Minitool Partition Wizard .

J'ai aussi testé :

  • Modifier le /system/etc/permissions/platform.xml manuellement (en ajoutant <group gid=”media_rw” /> ) à WRITE_EXTERNAL_STORAGE section, comme indiqué ici.
  • SDFix .
  • Utilisation du cadre Xposed avec HandleExternalStorage module.

Mais les applications (Total Commander, Ghost Commander, ou tout autre programme) n'ont pas accès à la carte SDCard Ext4.

Qu'est-ce que je pourrais essayer d'autre ?
Solutions de contournement pour que les applications lisent (et écrivent) la carte SD acceptée aussi.

Données supplémentaires 1 :

Notez la sortie du mount pour les deux utilisateurs :

root@unknown:/ # mount | grep "sdcard" -i
/dev/block/mmcblk1p1 /storage/sdcard1 ext4 rw,seclabel,relatime,data=ordered 0 0
root@unknown:/ # exit
u0_a98@unknown:/ $ mount | grep "sdcard"
u0_a98@unknown:/ $ mount | grep "mmcblk"

Comme on peut le voir, l'utilisateur root a un périphérique monté que l'utilisateur normal n'a pas ( !). Je ne savais pas que cela pouvait arriver sous Linux.

3voto

Autian Points 31

Edit 2020-06-03 : Si vous souhaitez voir une réponse beaucoup plus détaillée sur le fonctionnement de l'écosystème de montage sous Android, vous pouvez consulter cette réponse : Comment lier le montage d'un dossier dans /sdcard avec les permissions correctes ?

Montage

Essayez de vous connecter en tant qu'utilisateur Root avec les autorisations de montage appropriées en utilisant

su -mm

Assurez-vous qu'il existe un répertoire qui reçoit le montage :

mkdir /mnt/arch1

Vous pouvez également créer un dossier vide dans votre espace de stockage interne et utiliser ce point de montage à la place si Apps ne vous permet pas de naviguer dans l'espace de stockage interne. / Répertoire racine.

Montez votre partition ext4 en utilisant

mount -t ext4 -o noatime /dev/block/mmcblk1p2 /mnt/arch1

alors que mmcblk1p2 est la deuxième partition de ma carte SD dans mon cas. Vous pouvez remplacer /mnt/arch1 avec tout autre chemin que vous souhaitez.

Ma première partition est formatée (et agit en tant que extSdCard) avec FAT32 comme solution de repli, afin que les applications y écrivent leur contenu pendant que ma partition ext4 est "sûre" et pour éviter que les systèmes d'exploitation ne formatent accidentellement toute la carte SD lorsqu'ils l'insèrent.

Vous devriez maintenant être en mesure de naviguer à l'intérieur de ce point de montage en utilisant soit votre terminal (enraciné et non enraciné) ou vos applications.

Pour monter automatiquement la partition au démarrage, vous pouvez utiliser cette ligne

su -mm -c mount -t ext4 -o noatime /dev/block/mmcblk1p2 /mnt/arch

dans Tasker par exemple.

Informations sur le démontage / montage

Veuillez noter que les points de montage de -mm à leur tour, ne sont pas visibles pour le Root "normal" (sans -mm ). Pour démonter la partition, vous devriez vous connecter avec -mm à nouveau et utiliser umount /dev/block/mmcblk1p2 o umount /mnt/arch1 à partir de là.

Vérification de whoami ne révèlera pas que vous êtes connecté avec ou sans -mm .

Autorisations de l'application

Edition 2020-06-03 : Après toutes ces années d'utilisation de cette approche, je dois ajouter que même avec des autorisations rwx sur ma partition spéciale ext4 sdcard, les applications peuvent ne pas être en mesure de lire les fichiers à moins que la politique SELinux ne soit définie sur "permissive". Pour une solution rapide, je laisse Tasker exécuter su -c setenforce permissive à chaque démarrage. J'ai besoin de le faire de toute façon parce que j'utilise le traitement des effets audio ViPER4Android et il ne fonctionnerait pas sans le paramètre permissif. Pour cette raison, j'ai remarqué la dépendance permissive tout récemment.

Ce que je ne peux pas répondre

Malheureusement, je n'ai aucune idée de la façon de la monter de manière à ce que votre partition ext4 soit affichée comme un véritable stockage externe par les gestionnaires de fichiers standard. Vous devriez faire le contournement en créant un répertoire dans votre stockage interne mentionné plus tôt.

Comment j'ai compris

J'ai connu exactement le même problème. J'ai réfléchi au fait que les autres applications ne peuvent pas accéder au montage. Peut-être que l'utilisateur Root n'est pas censé monter les partitions pour les applications Android. J'ai remarqué un répertoire appelé media_rw est détenu par media_rw (oui, les mêmes noms) donc j'ai pensé à su en tant que media_rw et en appliquant les étapes ci-dessus.

En lisant la page d'aide avec su --help dans Android, je suis tombé sur cette partie :

-m, -p,
-mm, --mount-master          connect to a shell that can manipulate the
                             master mount namespace - requires su to be
                             running as daemon, must be first parameter

J'ai donc essayé de me connecter en tant qu'utilisateur Root avec l'option -mm Au lieu de cela, j'ai monté ma partition à partir de là et surprise - j'ai pu voir mes affaires dans Total Commander et ouvrir des fichiers multimédia à partir de là avec VLC.

Mon appareil en particulier est le Planet Computers Gemini, utilisant Android 7.1.1 (Nougat) stock, enraciné avec SuperSU. Edition 2020-06-03 : Android 8.1 (Oreo rooté avec Magisk ; même appareil) également.

1voto

rascalking Points 1422

@djsumdog et @Sopalajo de Arrierez Désolé pour la réponse tardive.

Les choses ont été réorganisées et rationalisées. En unifiant ceux qui utilisent le fstab des fichiers. Par exemple, le init , vold et la récupération tout en /fstab.<device> maintenant. Une partie est gérée par Vold et, à première vue, cela ressemble à un problème de permissions, car avec Root, c'est comme une dérogation avec son système d'exploitation. R/W pouvoirs. Linux avait un problème avec Android lors du formatage à cause de cela, mais je ne sais pas si cela a été corrigé.

" PEUVENT FOURNIR UN STOCKAGE EXTERNE EN ÉMULANT UN SYSTÈME DE FICHIERS INSENSIBLE À LA CASSE ET SANS PERMISSION, SOUTENU PAR UN STOCKAGE INTERNE. "

" Lors de la configuration d'un dispositif spécifique init.rc la variable d'environnement EXTERNAL_STORAGE doit être définie comme le chemin d'accès au stockage externe primaire. Le site /sdcard doit également être résolu au même endroit, éventuellement par le biais d'un lien symbolique. Si un dispositif ajuste l'emplacement du stockage externe entre les mises à jour de la plateforme, des liens symboliques doivent être créés afin que les anciens chemins continuent de fonctionner."

"Une implémentation possible est fournie par le démon FUSE en system/core/sdcard qui peut être ajouté en tant que dispositif spécifique init.rc service" :

virtual sdcard daemon running as media_rw (1023)
service sdcard /system/bin/sdcard <source_path> <dest_path> 1023 1023
    class late_start

"Où source_path est la mémoire interne de sauvegarde et dest_path est le point de montage cible".

Référence

0voto

David White Points 21

Merci pour cette discussion. Voici ce qui fonctionne "plus ou moins" sur mon ordinateur TV Android 5.1 :

su -mm -c mount -t ext4 -o noatime /dev/block/mmcblk0p1 /storage/sdcard1 &&  sleep 5 && /system/bin/vold
chown -R root:sdcard_r /storage/sdcard1
chmod 771 /storage/sdcard1

Je dis "en quelque sorte" parce que ce n'est pas encore considéré comme une véritable carte de stockage externe par Android ou les applications de gestion de fichiers (et autres). Cependant, toutes les applications peuvent lire/écrire/traverser l'arborescence des dossiers et faire ce dont elles ont besoin. Vous n'avez PAS besoin d'être Root sauf pour faire cela. En l'état actuel des choses, je dois réaffirmer ce point à chaque redémarrage d'Android. Mais l'utilisation de Tasker rend cela assez facile à accomplir.

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