RÉPONSE COURTE
Allez dans les paramètres de Magisk et définissez Mount Namespace Mode
a Global
une fois pour toutes. Sur Application SuperSU , désactiver Mount Namespace Separation
.
OU
Pour une solution ponctuelle, utilisez cette commande à la place :
~$ su -mm -c 'mount <device> <mountpoint>'
LONGUE RÉPONSE
mais après un certain temps, la partition est démontée automatiquement et je dois la remonter.
Android NAMESPACES
Ce comportement est dû à Espace de nom de montage implémenté par Android depuis Android-6 pour le sandboxing/isolement des applications. Afin de contrôler l'accès des applications aux ressources du système et aux systèmes de fichiers - en particulier les cartes SDCard - chaque application (Dalvik ou ART VM qui traite le bytcode Java pour en faire un binaire exécutable .dex) est démarrée par zygote (un processus init Android) dans un nouvel espace de noms mount où elle peut indépendamment démonter tout système de fichiers (sauf rootfs) ou le remonter, sans affecter les autres espaces de noms. Chaque processus lancé par l'application vit dans le même espace de noms isolé (ou plus loin).
Habituellement mnt
(monture) et net
(réseau) sont activés par défaut dans le noyau Android. Autres espaces de noms pid
, user
y uts
peut être activé en reconstruisant le noyau.
ESPACE DE NOMS GLOBAL
Le tout premier processus lancé par le noyau au démarrage : init, ainsi que tous les processus du noyau (kworkers, etc.) et les autres processus du démon init (tels que ueventd, logd, servicemanager, vndbinder, mediaserver, netd, etc. Espace de nom global / racine . Lorsque nous installons des mods (tels que Magisk, Xposed, etc.), ils démarrent également en tant que processus dans l'espace de noms Root, généralement à l'étape initiale du processus de démarrage.
Les systèmes de fichiers Android (réels ou pseudo ; /system, /data, /proc etc.) sont également montés initialement dans l'espace de noms global. Tous les montages (y compris rootfs) de l'espace de nom d'une application sont définis comme suit slave
de sorte que tout nouveau montage à l'intérieur de ceux-ci dans l'espace de noms Root, se propage dans l'espace de noms de l'application mais pas vice versa. Voir propagation des monts .
ESPACE DE NOMS OUTILS
Commande Linux lsns
peut être utilisé pour afficher tous les espaces de noms. Un espace de noms de montage peut être créé par unshare -m
. Pour entrer un espace de nom, nsenter
est un wrapper SETNS facilement disponible. Dans la plupart des cas, ces commandes ne fonctionnent pas sans les privilèges de Root.
SUPER UTILISATEUR ET MONTER NS
Lorsque nous exécutons su
dans une application émulateur de terminal, un nouveau processus (shell) est lancé avec des capacités élevées. Ce processus vit dans le même espace de noms de montage que celui de l'application Terminal. Ainsi, le mount
est également exécutée dans le même espace de noms et le système de fichiers n'est donc visible que dans cet espace de noms. Une fois que nous exit
ce shell, le point de montage ne montrera pas le contenu du système de fichiers. S'il n'y a pas de processus en cours d'exécution dans un espace de nom, il est automatiquement nettoyé.
Veuillez noter que une application est complètement tuée quand son processus Dalvik est tué par Force Stop ou par La gestion de la mémoire d'Android .
Si l'application Terminal n'a pas été complètement détruite, su
peuvent entrer dans le même espace de noms, uniquement lorsque Inherited Namespace
est activée dans Magisk. Isolated Namespace
créera toujours un nouvel espace de nom de montage.
Venons-en maintenant à votre question :
Même lorsqu'il est monté, son contenu n'est pas visible dans les applications d'exploration de fichiers comme MiXplorer et ES Explorer, et n'est visible que dans le terminal.
Ceci est dû au fait que les explorateurs (applications) sont exécutés dans leurs propres espaces de noms de montage. Exécutez cette commande en tant que Root pour avoir une vue d'ensemble :
~# ps f -p2 --ppid 2 --deselect -o mntns,pid,cmd --sort=mntns
Vous pouvez utiliser Termux pour une version complète de ps
.
Lorsque je configure cette commande pour qu'elle s'exécute au démarrage en la plaçant dans le répertoire init.d dans /etc, alors elle fonctionne normalement et la partition ext4 ne se démonte pas automatiquement.
C'est parce que ce script init.d est exécuté par init
dans l'espace de noms global.
Alors, quel est le meilleur moyen de monter une partition ext4 dans Android de manière persistante et quelle est la raison d'un tel comportement ?
Pour échapper à toute cette énigme, montez toujours vos systèmes de fichiers fréquemment utilisés dans l'espace de noms de montage global. (bien qu'elle soit vulnérable aux failles de sécurité) sauf nécessité contraire. Une simple vérification si nous sommes dans un espace de nom global :
~# [ "$(readlink /proc/self/ns/mnt)" = "$(readlink /proc/1/ns/mnt)" ] && echo 'In Global NS.' || echo 'Not in Global NS.'
NOTE : Ce test ne fonctionne que dans le PID NS initial.
Une autre possibilité est de créer un espace de nom avec unshare -m --propagation shared
. Maintenant, tout nouveau montage dans cet espace de nom se propagera à tous les espaces de nom. Mais ceci n'est pas applicable aux espaces de noms des applications déjà créées. mount --make-rshared /
ne fonctionne pas (du moins pour moi) si l'espace de noms a été créé à l'origine avec la commande slave
o private
la propagation.
Ver ce fil de discussion pour plus de détails.
0 votes
J'utilise l'application Magisk. Je rencontre ce problème uniquement lorsque je l'exécute dans l'application Android terminal. Mais lorsque je configure cette commande pour qu'elle soit exécutée au démarrage en la plaçant dans le répertoire init.d dans etc. Ensuite, il fonctionne normalement et la partition ext4 ne se démonte pas automatiquement. Je ne comprends pas pourquoi cela fonctionne ainsi dans ce cas. Quelqu'un peut-il l'expliquer ?