Système de fichiers en lecture seule sur Android


212

J'ai récemment rooté mon Droid X et tout semble fonctionner parfaitement. J'ai fait quelques changements build.propet quand je fais , adb push build.prop /system/je reçois l'erreur suivante: failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

Comment puis-je réparer cela?


19
avez-vous essayé adb remount, qu'obtenez-vous?
silverfox

Android est la pile logicielle de Google ... Pour les questions non destinées aux développeurs, voir android.stackexchange.com
Selvin

2
Veuillez noter que cette question ne doit pas être confondue avec le cas où le code d' application Android échoue avec une erreur de système de fichiers en lecture seule. Cela est généralement dû à la tentative d'écriture d'un fichier sans spécifier d'emplacement, c'est-à-dire à la tentative d'écriture dans le répertoire racine. Cette question concerne uniquement la modification de l'installation d'Android lui-même sur des appareils rootés / de développement / d'ingénierie.
Chris Stratton

1
Existe-t-il un moyen de le faire avec un émulateur Android ?? Aucune de ces solutions ne fonctionne pour mon émulateur.
MikeSchem

Réponses:


388

Tous les téléphones et versions d'Android n'ont pas les mêmes choses.
Il serait préférable de limiter les options lors du remontage.

Remontez simplement en rw (lecture / écriture):

# mount -o rw,remount /system

Une fois que vous avez terminé vos modifications, remontez sur ro (lecture seule):

# mount -o ro,remount /system

30
Vous pouvez également le faire sur votre PC. adb shell mount -o rw, remount / system
Matthias Weiler

8
À utiliser avec adb rootou vous obtiendrez une autorisation refusée lors de la transmission du fichier.
KrisWebDev

1
@MikeHenke, il semble que vous n'étiez pas root lorsque vous l'avez exécuté.
CurtisLeeBolin

21
Ne fonctionne pas pour moi:Balazss-MBP:tools varh1i$ adb shell generic_x86_64:/ # mount -o rw,remount /system '/dev/block/vda' is read-only
Balazs Varhegyi

2
Depuis que j'avais root quand même, j'ai copié le fichier vers / sdcard, puis utilisé (dans mon cas)mv hosts /system/etc/hosts
Lauri Elias

85
adb remount

fonctionne pour moi et semble être la solution la plus simple.


6
"adb remount - Si vous avez rencontré des erreurs en essayant de pousser des fichiers vers / system car il est en mode lecture seule, adb remount remontera / system en mode lecture-écriture --- à condition que le shell ait la racine correcte les autorisations nécessaires. Cela remplace la saisie manuelle d'une commande plus longue, telle que mount -o rw, remount / system (en tant que root) ou quelque chose. " ( source ). Si vous rencontrez des problèmes avec les autorisations root, essayez "adb root" avant.
KrisWebDev

4
J'ai Not running as root. Try "adb root" first.. Et puis adbd cannot run as root in production builds.
Vadzim

1
Sur les appareils plus récents, il semble que nous devons également $ adb disable-verityredémarrer l'appareil avant de pouvoir l'exécuter$ adb remount
Nebel22

1
$ adb disable-verity give: disable-verity ne fonctionne que pour les builds userdebug
William

3
il ne fonctionne pas: Not running as root. Try "adb root" first.. Je suis entré adb rootpuis à nouveau adb remountmais toujours la même erreur:Not running as root. Try "adb root" first.
user924

78

Je l'ai retiré d'un forum Android où j'ai posé la même question. J'espère 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, à l'invite cmd, effectuez la adb push


3
adb shell <command>peut être utilisé depuis l'ordinateur (si vous n'avez pas de terminal sur votre téléphone)
Fletcher91

73

Bien que je sache que la question concerne le véritable appareil, 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 au /system. Sans ce drapeau, aucune combinaison de remountou mountne permettra d'écrire /system.

Une fois l'émulateur lancé avec cet indicateur, un seul adb remountaprès adb rootsuffit pour obtenir les autorisations pour pousser /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 -avddrapeaux provient de:

./emulator -list-avds

mon invite de commande devient extrêmement lente jusqu'à ce que je ne puisse pas continuer avec adb root et adb remount après le lancement de l'émulateur avec -writable-system, n'importe qui peut aider?
Beeing Jk

29

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

6
Bienvenue chez SO! Votre réponse est techniquement utile, mais essentiellement un double de la réponse précédente de curtlee2002. Cela aurait pu être mieux comme un commentaire sur sa réponse disant "Je suis d'accord qu'il est plus sûr de revenir en lecture seule après avoir fait le tour du monde en mode lecture-écriture." Nous avons des millions de questions, il y aura donc toujours une autre question où vous serez le premier à proposer une excellente solution ou une nouvelle perspective!
Jonathan Van Matre

1
cela n'a fonctionné pour moi qu'une fois que j'ai supprimé le "," de la déclaration. ie "" mount -o remount rw / system ""
propjk007

@TechnikEmpire, il ne fait pas référence à la réponse acceptée.
Paschalis

16

Sur mon Samsung Galaxy mini S5570 (après avoir rooté sur le téléphone portable):

Poing, en tant que root, j'ai couru:

systemctl start adb

en tant qu'utilisateur normal:

adb shell 
su 

Accorder des autorisations root sur l'écran tactile

mount 

listez tous les points de montage que nous avons et nous pouvons voir, dans mon cas, que / dev / stl12 a été monté sur / system comme ro (prêt uniquement), nous avons donc juste besoin de faire:

mount -o rw,remount /dev/stl12 /system

Merci pour cette réponse. Pour une raison quelconque, je n'ai jamais regardé l'écran de mon téléphone pour accorder des autorisations root et l'accès était refusé, quoi que j'aie essayé.
Graham Mitchell

disant "Vous devez spécifier un type de système de fichiers avec -t.", qu'est-ce que cela signifie?
NehaK

mount -o rw, remount -t ext4 / dev / block / vda / system, -t signifie le type de système de fichiers dans mon exemple ext4
Sérgio

11

Essayez ce qui suit sur l'invite de commande:

>adb remount
>adb push framework-res_old.apk /system/framework-res.apk

Cela devrait êtreadb root remount
tqjustc

10
adb disable-verity
adb reboot
adb root
adb remount

Cela fonctionne pour moi et c'est la solution la plus simple.


7

Voici ce qui a fonctionné pour moi. J'utilisais un appareil émulé Android 7.1.1 (Nougat).

Sur un terminal, j'ai frappé la commande suivante. Une chose à noter 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 apportez au contenu / system survivront à un redémarrage.


4

J'ai vérifié avec l'émulateur et j'ai travaillé.

  1. redémarrage adb
  2. adb root && adb remount && adb push ~ / Desktop / hosts / system / etc / hosts

Comme mentionné ci-dessus également, exécutez la deuxième étape en une seule fois.


3

Ouvrez l'émulateur de terminal sur le téléphone: puis

adb shell

après le démarrage de ce démon

su
mount -o rw,remount /mnt/sdcard

alors la lecture seule est convertie en lecture-écriture.


2
mount -o rw,remount /dev/stl12 /system

travaille pour moi


2
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"

1

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 lorsque vous avez changé ro en rw sur / et / système (ce sont les seuls que j'essayais de modifier) ​​et éventuellement d'autres.

Voici ce que j'ai exécuté pour effectuer les changements que j'essayais de réaliser. Je les ai collées dans une fenêtre, car la suppression du bit d'exécution de / sbin / ric doit être effectuée rapidement afin de l'empêcher de redémarrer. (J'ai essayé stop ric; cela ne fonctionne pas - même si cela fonctionnait 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 apportez les modifications dont vous avez besoin au système de fichiers. Pour laisser les choses telles que nous les avons trouvées, procédez comme suit:

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é automatiquement pour moi.)


1

Ajoutant un peu plus à la réponse de Jan Bergström: Parce qu'Android est un système basé sur Linux et que le chemin dans Linux contient des barres obliques (../), lors de l'utilisation de 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 sdcard / pictures /

Notez qu'ici, les barres obliques inversées sont utilisées pour définir le chemin source du fichier à pousser depuis le PC Windows et les barres obliques sont utilisées pour définir le chemin de destination car Android est un système basé sur Linux. Vous n'avez pas besoin d'agir en tant que root pour utiliser cette commande et aussi, cela fonctionne parfaitement sur les appareils de production.


1

Parfois, vous obtenez l'erreur car 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 à la /storage/emulated/legacyplace de /storage/emulated/0.


1

Merci, Sérgio , pour la commande "mount" sans idée de paramètres. Je dois fait adb pushdans /data/data/com.my.app/libun certain problème de test, et obtenir un message « lecture seule du système de fichiers ».

La 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

Il est donc entendu que le répertoire "lib" est séparé des autres répertoires d'application.

La commande mount -o rw,remount /mnt/asec n'a pas résolu le problème "r / o fs", elle veut un paramètre de périphérique avant le paramètre de répertoire.

La commande "df" n'a pas aidé non plus, mais montre que mon /mnt/asec/com.my.app-1répertoire est au point de montage séparé.

Alors je regarde mountet 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 sur RW, repousser et remonter sur RO.


1

il same qui doit extraire et reconditionner initrc.img et éditer le initfichier avec le code de montage / système


btw. vous devez démarrer avd avec les options du système
-writeable

0

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 du développeur? Vous avez peut-être enraciné le plan et rendu disponible la zone que vous traitez?) 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.

  • Le shell de commande adb doit d'abord être trouvé dans le chemin d'accès: PATH =% PATH%; C: \ Users \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools (le dossier AppData est masqué, 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 malgré tout)
  • 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 c'est une zone en lecture seule. Dès que je n'ai eu aucun problème à pousser le fichier vers l'émulateur.

Ainsi, par exemple, la commande adb peut ressembler à ceci:

adb push C: \ testdata \ t.txt /sdcard/download/t.txt


0

En cas d'échec de copie du fichier en lecture seule, vous pouvez essayer de localiser le fichier d'origine dans le répertoire racine et le modifier avec un éditeur de texte racine (de préférence) un éditeur de texte RB, il est fourni avec l'application ROM Toolbox.


0

Essayez ceci dans un émulateur de terminal en tant que root:

restorecon -v -R /data/media

0

Dans mon cas, j'utilisais la commande adb push ~/Desktop/file.txt ~/sdcard/

Je l'ai changé ~/Desktop/file.txt /sdcard/et puis ça a marché.

Assurez-vous de déconnecter et reconnecter le téléphone.


L'auteur de cette question demande de remonter le / système en lecture-écriture, votre réponse est un peu hors sujet
Metonymy

0

Comme chen-xing l'a mentionné, le moyen le plus simple est:

adb reboot

Mais pour moi, je devais d'abord modifier mes paramètres:

Paramètres → Options développeur → Accès root

Assurez-vous qu'ADB dispose d'un accès root:

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.