Système de fichiers en lecture seule sur Android
J'ai récemment enraciné mon Droid X et tout semble fonctionner parfaitement. J'ai apporté quelques modifications à build.prop
et quand je fais adb push build.prop /system/
j'obtiens l'erreur suivante: failed to copy 'c:build.prop' to '/system//build.prop': Read-only file system
.
Comment puis-je résoudre ce problème?
21 réponses
Tous les téléphones et les versions d'android n'ont pas les mêmes choses.
Limiter les options lors du remontage serait préférable.
Il suffit de remonter en rw (lecture / écriture):
# mount -o rw,remount /system
Une fois que vous avez terminé de faire des modifications, remontez à ro (lecture seule):
# mount -o ro,remount /system
Obtenu CE sur un forum Android où j'ai posé la même question. Espérons que cela aide quelqu'un d'autre.
Sur un émulateur de terminal sur le téléphone:
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
Ensuite, sur l'invite cmd, faites le adb push
adb remount
Fonctionne pour moi et semble être la solution la plus simple.
Bien que je sache que la question concerne le périphérique réel, au cas où quelqu'un arriverait avec un problème similaire dans l'émulateur, avec les outils les plus récents en février 2017, l'émulateur doit être lancé à partir de la ligne de commande avec:
-writable-system
Pour que tout soit accessible en écriture sur le /system
. Sans cet indicateur, aucune combinaison de remount
ou mount
ne permettra d'écrire dans /system
.
Après l'émulateur est lancé avec le drapeau, un seul adb remount
après adb root
est suffisant pour obtenir autorisations pour pousser vers /system
.
Voici un exemple de la ligne de commande que j'utilise pour exécuter mon émulateur:
./emulator -writable-system -avd Nexus_5_API_25 -no-snapshot-load -qemu
La valeur des indicateurs -avd
provient de:
./emulator -list-avds
Je pense que le moyen le plus sûr est de remonter le système / en lecture-écriture, en utilisant:
mount -o remount,rw /system
Et une fois terminé, remontez-le en lecture seule:
mount -o remount,ro /system
Sur mon Samsung galaxy mini S5570 (après avoir pris racine sur le téléphone portable):
Poing, comme racine, j'ai couru:
systemctl start adb
En tant qu'utilisateur normal:
adb shell
su
Accorder des autorisations root sur l'écran tactile
mount
Liste tous les points de montage que nous avons et nous pouvons voir, dans mon cas, que / dev / stl12 a été monté sur / system en tant que ro (prêt seulement), donc nous avons juste besoin de faire:
mount -o rw,remount /dev/stl12 /system
Essayez ce qui suit à l'invite de commande:
>adb remount
>adb push framework-res_old.apk /system/framework-res.apk
Voici ce qui a fonctionné pour moi. J'exécutais un appareil Android 7.1.1 émulé (Nougat).
Sur un terminal, j'appuie sur la commande suivante. Une chose à remarquer est l'indicateur-writable-system
./emulator -writable-system -avd Nexus_6_API_25 -partition-size 280
Sur un autre onglet
./adb shell
su
mount -o rw,remount -t ext4 /dev/block/vda /system
Toutes les modifications que vous effectuez sur le contenu / system survivront à un redémarrage.
adb disable-verity
adb reboot
adb root
adb remount
Cela fonctionne pour moi, et est la solution la plus simple.
Ouvrez l'émulateur de terminal sur le téléphone: alors
adb shell
Après que le démon est démarré
su
mount -o rw,remount /mnt/sdcard
Ensuite, la lecture seule est convertie en lecture-écriture.
J'ai trouvé cet article de google, et j'ai pensé ajouter les étapes nécessaires sur un Sony Xperia Z (4.2.2).
Le Sony a un processus de surveillance qui détecte quand vous avez changé ro pour rw sur / et /système (ce sont les seuls que j'essayais de modifier) et peut-être d'autres.
Ce qui suit était ce que j'ai couru pour effectuer les changements que j'essayais de réaliser. Je les ai collés dans une fenêtre, car la suppression du bit d'exécution de / sbin / ric doit être faite rapidement afin de l'arrêter le redémarrage de lui-même. (J'ai essayé stop ric
; cela ne fonctionne pas-bien que cela ait fonctionné sur une version précédente d'android sur le téléphone).
pkill -9 ric; mount -o rw,remount -t rootfs /
chmod 640 /sbin/ric
mount -o rw,remount /system
J'ai modifié le fichier hosts ici, c'est donc l'endroit où vous effectuez les modifications dont vous avez besoin sur le système de fichiers. Pour laisser les choses comme nous les avons trouvées, faites ceci:
mount -o ro,remount /system
chmod 750 /sbin/ric
mount -o ro,remount -t rootfs /
À quel point RIC devrait redémarrer automatiquement. (Il a redémarré pour moi automatiquement.)
Ajouter un peu plus à la réponse de Jan Bergström: parce que Android est un système basé sur Linux, et le chemin dans Linux contient des barres obliques (../ ), tout en utilisant la commande push, utilisez " / " pour définir le chemin de destination dans L'appareil Android.
Par exemple, la commande va: ADB push C:\Users\admin\Desktop\1.JPG carte SD / images /
Notez qu'ici, les barres obliques arrière sont utilisées pour définir le chemin source du fichier à pousser à partir du PC windows et les barres obliques avant sont utilisées pour définir la destination chemin parce que Android est un système basé sur Linux. Vous n'avez pas besoin d'agir en tant que root pour utiliser cette commande et cela fonctionne parfaitement sur les périphériques de production.
Parfois, vous obtenez l'erreur parce que l'emplacement de destination dans le téléphone n'existe pas. Par exemple, un emplacement de stockage externe de téléphone android est /storage/emulated/legacy
au lieu de /storage/emulated/0
.
Merci, Sérgio , pour la commande "mount" sans idée de paramètres.
Je devrais faire adb push
dans /data/data/com.my.app/lib
pour un problème de test, et obtenir un message "système de fichiers en lecture seule".
Commande Ls me montre:
root@android:/ # ls -l /data/data/com.my.app/
drwxrwx--x u0_a98 u0_a98 2016-05-06 09:16 cache
drwxrwx--x u0_a98 u0_a98 2016-05-06 09:04 files
lrwxrwxrwx system system 2016-05-06 11:43 lib -> /mnt/asec/com.my.app-1/lib
Donc, il est entendu que le répertoire "lib" est séparé des autres répertoires d'applications.
Commande
mount -o rw,remount /mnt/asec
n'a pas résolu le problème "r / o fs" , il veut le paramètre de périphérique avant le paramètre de répertoire.
La commande " df " n'a pas aidé aussi, mais montre que mon Le répertoire /mnt/asec/com.my.app-1
se trouve au point de montage séparé.
Alors je regarde par {[5] } et voila!
root@android:/ # mount
.........
/dev/block/dm-4 /mnt/asec/com.my.app-1 ext4 ro,dirsync,relatime 0 0
Les étapes suivantes sont déjà décrites vers le haut: remonter à RW, pousser et remonter à RO.
Il sames qui doit extraire et remballer initrc.img et modifier le fichier init
avec le code de mount / system
This worked for me
#Mount as ReadOnly
su -c "mount -o rw,remount /system"
# Change Permission for file
su -c "chmod 777 /system/build.prop"
#Edit the file to add the property
su -c "busybox vi /system/build.prop"
# Add now
service.adb.tcp.port=5678
# Reset old permissions
su -c "chmod 644 /system/build.prop"
# Mount as readonly again once done
su -c "mount -o ro,remount /system"
S'il y a un échec dans la copie du fichier en lecture seule, vous pouvez essayer de localiser le fichier original dans le répertoire racine et le modifier avec un éditeur de texte racine (de préférence) éditeur de texte RB, il est livré avec L'application ROM Toolbox.
Essayez ceci dans un émulateur de Terminal en tant que root:
restorecon -v -R /data/media
Dans mon cas, j'utilisais la commande adb push ~/Desktop/file.txt ~/sdcard/
Je l'ai changé en ~/Desktop/file.txt /sdcard/
et puis ça a marché.
Assurez-vous de déconnecter et de reconnecter le téléphone.
Copier des fichiers sur la carte SD?
Eh bien, je suppose que vous aimez copier des données sur la carte Sd à partir de l'ordinateur des développeurs? Vous pourriez avoir enraciné la devise et rendu la zone que vous adressez disponible?) J'ai eu à peu près le même problème pour télécharger des fichiers de données pour mon application (Android Studio 1.3.2 dans Win7), mais.
- Tout d'abord, le shell de commande adb doit être trouvé dans le chemin: Chemin= % Chemin%;C:\Users\XXXXX\AppData\Local\Android\sdk\platform-tools (le dossier AppData est caché, vous devez donc définir la configuration du dossier ne cache pas les fichiers cachés et le dossier pour le trouver, le chemin fonctionne indépendamment)
- vous devez épeler le chemin du dossier à droite ou vous obtenez un message d'erreur en lecture seule, très probablement il doit commencer par / sdcard ou il est en lecture seule zone. Dès que je n'ai pas de problème à pousser le fichier vers l'émulateur.
Ainsi, par exemple, la bad commande peut ressembler à ceci:
Push Adb C:\testdata\t.txt /sdcard/download/t.txt