Sistema de archivos de solo lectura en Android

212

Recientemente rooteé mi Droid X y todo parece estar funcionando perfectamente. Hice algunos cambios para build.propy cuando lo hago adb push build.prop /system/me sale el siguiente error: failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

¿Cómo puedo arreglar esto?

steveo225
fuente
19
has intentado adb remount, ¿qué obtienes?
silverfox
Android es la pila de software de Google ... Para preguntas que no sean de desarrollador, visite android.stackexchange.com
Selvin
2
Tenga en cuenta que esta pregunta no debe confundirse con el caso en que el código de la aplicación de Android falla con un error del sistema de archivos de solo lectura. Por lo general, esto se debe al intentar escribir un archivo sin especificar una ubicación, es decir, al escribir en el directorio raíz. Esta pregunta solo se trata de modificar la instalación de Android en dispositivos rooteados / de desarrollo / ingeniería.
Chris Stratton el
1
¿Hay alguna manera de hacer esto con un emulador de Android? Ninguna de estas soluciones funciona para mi emulador.
MikeSchem

Respuestas:

388

No todos los teléfonos y versiones de Android tienen cosas montadas de la misma manera.
Limitar las opciones al volver a montar sería lo mejor.

Simplemente vuelva a montar como rw (lectura / escritura):

# mount -o rw,remount /system

Una vez que haya terminado de hacer cambios, vuelva a montar en ro (solo lectura):

# mount -o ro,remount /system
CurtisLeeBolin
fuente
30
También puedes hacer esto en tu PC. adb shell mount -o rw, remontaje / sistema
Matthias Weiler
8
Úselo junto con adb rooto obtendrá un Permiso denegado al empujar el archivo.
KrisWebDev
1
@ MikeHenke, parece que no eras root cuando lo ejecutaste.
CurtisLeeBolin
21
No funciona para mí:Balazss-MBP:tools varh1i$ adb shell generic_x86_64:/ # mount -o rw,remount /system '/dev/block/vda' is read-only
Balazs Varhegyi
2
Como tenía root de todos modos, copié el archivo en / sdcard, luego usé (en mi caso)mv hosts /system/etc/hosts
Lauri Elias
85
adb remount

funciona para mí y parece ser la solución más simple.

Chen Xing
fuente
66
"adb remount: si ha recibido errores al intentar enviar archivos a / system debido a que está en modo de solo lectura, adb remount volverá a montar / system en modo de lectura-escritura, siempre que el shell tenga la raíz correcta permisos para hacerlo. Esto reemplaza tener que escribir un comando más largo a mano, como mount -o rw, remontar / system (como root) o algo así ". ( fuente ) Si tiene algún problema con los permisos de root, intente "adb root" antes.
KrisWebDev
44
Tengo Not running as root. Try "adb root" first.. Y luego adbd cannot run as root in production builds.
Vadzim
1
En los dispositivos más nuevos, parece que también tenemos que $ adb disable-verityreiniciar el dispositivo antes de poder ejecutarlo$ adb remount
Nebel22
1
$ adb disable-verity give: disable-verity solo funciona para compilaciones de depuración de usuarios
William
3
no funciona: Not running as root. Try "adb root" first.. Entré adb rooty luego otra vez adb remountpero sigue siendo el mismo error:Not running as root. Try "adb root" first.
user924
78

Lo saqué de un foro de Android donde hice la misma pregunta. Espero que esto ayude a alguien más.

En un emulador de terminal en el teléfono:

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system

Luego, en el indicador de cmd, haga el adb push

steveo225
fuente
3
adb shell <command>se puede usar desde la computadora (si no tiene una terminal en su teléfono)
Fletcher91
73

Si bien sé que la pregunta es sobre el dispositivo real, en caso de que alguien llegue aquí con un problema similar en el emulador, con cualquier herramienta que sea la más reciente a partir de febrero de 2017, el emulador debe iniciarse desde la línea de comandos con:

-writable-system

Para que cualquier cosa sea grabable para el /system. Sin esta bandera, ninguna combinación de remounto mountle permitirá a uno escribir /system.

Después de que se inicia el emulador con esa bandera, un solo adb remountdespués adb rootes suficiente para obtener permisos para presionar /system.

Aquí hay un ejemplo de la línea de comando que uso para ejecutar mi emulador:

./emulator -writable-system -avd Nexus_5_API_25 -no-snapshot-load -qemu

El valor de las -avdbanderas proviene de:

./emulator -list-avds
Ishamael
fuente
mi símbolo del sistema se vuelve extremadamente lento hasta que no puede continuar con adb root y adb remontar después de iniciar el emulador con -writable-system, ¿alguien puede ayudarme?
Beeing Jk
29

Creo que la forma más segura es volver a montar el sistema / como lectura-escritura, usando:

mount -o remount,rw /system

y cuando termine, vuelva a montarlo como solo lectura:

mount -o remount,ro /system
hgdeoro
fuente
66
Bienvenido a SO! Su respuesta es técnicamente útil, pero esencialmente un duplicado de la respuesta anterior de curtlee2002. Esto podría haber sido mejor como un comentario sobre su respuesta que dice "Estoy de acuerdo en que es más seguro volver a solo lectura después de andar en modo lectura-escritura". Tenemos millones de preguntas, por lo que siempre habrá otra pregunta en la que sea el primero en llegar con una gran solución o una nueva perspectiva.
Jonathan Van Matre
1
esto solo funcionó para mí una vez que eliminé el "," de la declaración. es decir, "" mount -o remount rw / system ""
propjk007
@TechnikEmpire, no se refiere a la respuesta aceptada.
Paschalis
16

En mi Samsung galaxy mini S5570 (después de rootear el teléfono celular)

Puño, como root, corrí:

systemctl start adb

como usuario normal:

adb shell 
su 

Conceder permisos de root en la pantalla táctil

mount 

enumere todos los puntos de montaje que tenemos y podemos ver, en mi caso, que / dev / stl12 se montó en / system como ro (solo listo), por lo que solo necesitamos hacer:

mount -o rw,remount /dev/stl12 /system
Sergio
fuente
Gracias por esta respuesta Por alguna razón, nunca miré la pantalla de mi teléfono para otorgar permisos de root y se me negó el acceso sin importar lo que intenté.
Graham Mitchell
diciendo "Debe especificar un tipo de sistema de archivos con -t.", ¿qué significa esto?
NehaK
mount -o rw, remontar -t ext4 / dev / block / vda / system, -t significa el tipo de sistema de archivos en mi ejemplo ext4
Sérgio
11

Pruebe lo siguiente en el símbolo del sistema:

>adb remount
>adb push framework-res_old.apk /system/framework-res.apk
scue
fuente
Debería seradb root remount
tqjustc
10
adb disable-verity
adb reboot
adb root
adb remount

Esto funciona para mí y es la solución más simple.

por Inducción
fuente
7

Esto es lo que funcionó para mí. Estaba ejecutando un dispositivo Android 7.1.1 (Nougat) emulado.

En una terminal, presioné el siguiente comando. Una cosa a tener en cuenta es la bandera del sistema de escritura

./emulator -writable-system -avd Nexus_6_API_25  -partition-size 280

En otra pestaña

./adb shell
su
mount -o rw,remount -t ext4 /dev/block/vda /system

Todos los cambios que realice en los contenidos / system sobrevivirán a un reinicio.

George Garcés
fuente
4

Lo comprobé con el emulador y seguí trabajando.

  1. reinicio adb
  2. adb root && adb remount && adb push ~ / Desktop / hosts / system / etc / hosts

Como se mencionó anteriormente también, ejecute el segundo paso en un solo disparo.

Código
fuente
3

Abra el emulador de terminal en el teléfono: luego

adb shell

después de que se inicia ese demonio

su
mount -o rw,remount /mnt/sdcard

entonces la lectura solo se convierte en lectura-escritura.

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

funciona para mi

qinqie
fuente
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"
Ashwin Rayaprolu
fuente
1

Encontré este artículo de google y pensé que agregaría los pasos necesarios en un Sony Xperia Z (4.2.2).

Sony tiene un proceso de vigilancia que detecta cuándo ha cambiado ro a rw en / y / system (estos son los únicos que estaba tratando de modificar) y posiblemente otros.

Lo siguiente fue lo que ejecuté para realizar los cambios que estaba tratando de lograr. Pegué estos en una ventana, porque la eliminación del bit de ejecución de / sbin / ric debe hacerse rápidamente para evitar que se reinicie. (Lo intenté stop ric; esto no funciona, aunque funcionó en una versión anterior de Android en el teléfono).

pkill -9 ric; mount -o rw,remount -t rootfs /
chmod 640 /sbin/ric
mount -o rw,remount /system

Modifiqué el archivo de hosts aquí, por lo que este es el lugar donde realiza los cambios que necesita en el sistema de archivos. Para dejar las cosas como las encontramos, haga esto:

mount -o ro,remount /system
chmod 750 /sbin/ric
mount -o ro,remount -t rootfs /

En ese punto, ric debería reiniciarse automáticamente. (Se reinició para mí automáticamente).

Pablo
fuente
1

Agregando un poco más a la respuesta de Jan Bergström: Debido a que Android es un sistema basado en Linux, y la ruta en Linux contiene barras diagonales (../), mientras usa el comando push, use "/" para definir la ruta de destino en el dispositivo Android.

Por ejemplo, el comando va: adb push C: \ Users \ admin \ Desktop \ 1.JPG sdcard / pictures /

Tenga en cuenta que aquí, las barras diagonales inversas se utilizan para definir la ruta de origen del archivo que se va a empujar desde la PC con Windows y las barras diagonales inversas se utilizan para definir la ruta de destino porque Android es un sistema basado en Linux. No tiene que actuar como raíz para usar este comando y, además, funciona perfectamente bien en dispositivos de producción.

Metalhead bipolar
fuente
1

A veces aparece el error porque la ubicación de destino en el teléfono no existe. Por ejemplo, la ubicación de almacenamiento externo de algunos teléfonos Android es en /storage/emulated/legacylugar de /storage/emulated/0.

Geng Jiawen
fuente
1

Gracias, Sérgio , por el comando "montar" sin idea de parámetros. Que había necesidad de hecho adb pushen /data/data/com.my.app/libalgún tema de prueba, y consigo "sistema de ficheros de sólo lectura" mensaje.

El comando ls me muestra:

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

Por lo tanto, se entiende que el directorio "lib" está separado de otros directorios de aplicaciones.

El comando mount -o rw,remount /mnt/asec no resolvió el problema "r / o fs", quiere el parámetro del dispositivo antes del parámetro del directorio.

El comando "df" tampoco ayudó, pero muestra que mi /mnt/asec/com.my.app-1directorio está en el punto de montaje separado.

¡Entonces miro mounty listo!

root@android:/ # mount ......... /dev/block/dm-4 /mnt/asec/com.my.app-1 ext4 ro,dirsync,relatime 0 0

Los siguientes pasos ya se describen hacia arriba: volver a montar en RW, empujar y volver a montar en RO.

vkkeeper
fuente
1

Sames que debe extraer y reempaquetar initrc.img y editar el initarchivo con el código de mount / system

xsilen T
fuente
por cierto. debe iniciar avd con las opciones del sistema de
escritura
0

¿Copiar archivos a la tarjeta SD?

Bueno, supongo que te gusta copiar datos a la tarjeta Sd desde la computadora del desarrollador. Es posible que haya rooteado el dispositivo y haya hecho que el área que aborda esté disponible. Tuve el mismo problema al cargar archivos de datos para mi aplicación (Android Studio 1.3.2 en Win7), pero.

  • Primero se debe encontrar el shell de comandos adb en la ruta th: PATH =% PATH%; C: \ Users \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools (la carpeta AppData está oculta, por lo que debe configurarla la configuración de la carpeta no oculta los archivos ocultos y la carpeta para encontrarla, la ruta funciona independientemente)
  • Debe deletrear la ruta de la carpeta correctamente o recibirá un mensaje de error de solo lectura, lo más probable es que comience con / sdcard o sea un área de solo lectura. Tan pronto como no tuve problemas, empujé el archivo al emulador.

Entonces, por ejemplo, el comando adb puede verse así:

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

Jan Bergström
fuente
0

Si falla la copia del archivo de solo lectura, puede intentar ubicar el archivo original en el directorio raíz y modificarlo con un editor de texto raíz (preferiblemente) editor de texto RB, viene con la aplicación ROM Toolbox.

Abhishek Hamal
fuente
0

Pruebe esto en un emulador de terminal como root:

restorecon -v -R /data/media
intrepidis
fuente
0

En mi caso estaba usando el comando adb push ~/Desktop/file.txt ~/sdcard/

Lo cambié ~/Desktop/file.txt /sdcard/y luego funcionó.

Asegúrese de desconectar y volver a conectar el teléfono.

JavaBanana
fuente
El autor de esta pregunta pregunta sobre el remontaje del sistema / como lectura-escritura, su respuesta está un poco fuera de tema
Metonymy
0

Como mencionó chen-xing, la forma más simple es:

adb reboot

Pero para mí tuve que cambiar mi configuración primero:

Configuración → Opciones de desarrollador → Acceso raíz

Asegúrese de que ADB tenga acceso de root:

ingrese la descripción de la imagen aquí

Cillian Myles
fuente