Solo lectura del sistema de archivos en Android

Recientemente rooteé mi Droid X y todo parece funcionar perfectamente. Hice algunos cambios en build.prop y cuando hago adb push build.prop /system/ obtengo el siguiente error: failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system .

¿Cómo puedo arreglar esto?

No todos los teléfonos y versiones de Android tienen cosas montadas de la misma.
Limitar las opciones al remontar 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 

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, haz el adb push

 adb remount 

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

Aunque sé que la pregunta es sobre el dispositivo real, en caso de que alguien llegue aquí con un problema similar en el emulador, con las herramientas más recientes desde febrero de 2017, el emulador debe iniciarse desde la línea de comando con:

 -writable-system 

Para cualquier cosa que se pueda escribir en el /system . Sin esta bandera, ninguna combinación de remount o mount permitirá escribir en /system .

Después de que el emulador se inicie con esa bandera, basta con un solo adb remount adb root después de la adb root para obtener permisos para enviar a /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 para las banderas -avd proviene de:

 ./emulator -list-avds 

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

 mount -o remount,rw /system 

y cuando termine, vuelva a montarlo como de solo lectura:

 mount -o remount,ro /system 

En mi Samsung galaxy mini S5570 (después de obtener la raíz en el teléfono celular):

Puño, como root, ejecuté:

 systemctl start adb 

como un usuario normal:

 adb shell su 

Otorgar permisos de raíz en la pantalla táctil

 mount 

enumere todos los puntos de assembly que tenemos y podemos ver, en mi caso, que / dev / stl12 fue montado en / system como ro (solo listo), así que solo necesitamos hacer:

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

Pruebe lo siguiente en el símbolo del sistema:

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

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

En una terminal, presiono el siguiente comando. Una cosa que debe notarse es la bandera del sistema escribible

 ./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 haga en los contenidos de / system sobrevivirán a un reinicio.

 adb disable-verity adb reboot adb root adb remount 

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

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

 adb shell 

después de que se inicie el daemon

 su mount -o rw,remount /mnt/sdcard 

luego, la lectura solo se convierte en lectura-escritura.

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

funciona para mi

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 on / y / system (estos son los únicos que estaba tratando de modificar) y posiblemente otros.

Lo siguiente fue lo que corrí 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. (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í, así que este es el lugar donde realizas los cambios que necesitas para el sistema de archivos. Para dejar las cosas como las encontramos, haz 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ó automáticamente).

Añadiendo un poco más a la respuesta de Jan Bergström: como Android es un sistema basado en Linux, y la ruta en Linux contiene barras diagonales (../), al usar 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 invertidas se usan para definir la ruta de origen del archivo que se va a enviar desde la PC de Windows y las barras diagonales se usan para definir la ruta de destino porque Android es un sistema basado en Linux. No es necesario que actúe como raíz para usar este comando y, además, funciona perfectamente bien en los dispositivos de producción.

A veces obtienes el error porque la ubicación de destino en el teléfono no existe. Por ejemplo, alguna ubicación de almacenamiento externo de un teléfono Android es /storage/emulated/legacy lugar de /storage/emulated/0 .

Gracias, Sérgio , por el comando “mount” sin la idea de parámetros. Tendría que hacer una adb push en /data/data/com.my.app/lib para algún problema de prueba, y obtener el mensaje ” /data/data/com.my.app/lib de archivos de solo lectura”.

El comando 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

Entonces, 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 directorio /mnt/asec/com.my.app-1 está en el punto de assembly independiente.

Luego miro por el mount y ¡voilá!

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 al alza: vuelva a montar en RW, empuje y vuelva a montar en RO.

es necesario extraer y volver a empaquetar initrc.img y editar el archivo init con el código 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" 

Si se produce un error al copiar el 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, que viene con la aplicación ROM Toolbox.

Pruebe esto en un emulador de terminal como root:

 restrecon -v -R /data/media 

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

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

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

Copiar archivos a la tarjeta SD?

Bueno, supongo que te gusta copiar los datos a la tarjeta Sd desde la computadora del desarrollador. ¿Es posible que haya rooteado el dispositivo e implementado el área de su dirección disponible?) Tuve el mismo problema para cargar archivos de datos para mi aplicación (Android Studio 1.3.2 en Win7), pero.

  • En primer lugar, el comando-shell adb debe encontrarse en la ruta: PATH =% PATH%; C: \ Users \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools (la carpeta AppData está oculta, por lo que debe establecer la configuración de la carpeta no oculta los archivos ocultos y la carpeta para encontrarla, Path funciona independientemente)
  • Tienes que deletrear correctamente la ruta de la carpeta o si recibes un mensaje de error de solo lectura, lo más probable es que deba comenzar con / sdcard o sea un área de solo lectura. Tan pronto como no tuve problemas empujando el archivo al emulador.

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

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