Read only file system on Android

Android

Android Problem Overview


I recently rooted my Droid X and everything seems to be working perfectly. I made some changes to build.prop and when I do adb push build.prop /system/ I get the following error: failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system.

How can I fix this?

Android Solutions


Solution 1 - Android

Not all phones and versions of android have things mounted the same.
Limiting options when remounting would be best.

Simply remount as rw (Read/Write):

# mount -o rw,remount /system

Once you are done making changes, remount to ro (read-only):

# mount -o ro,remount /system

Solution 2 - Android

adb remount

works for me and seems to be the simplest solution.

Solution 3 - Android

Got this off an Android forum where I asked the same question. Hope this helps somebody else.

On a terminal emulator on the phone:

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

Then on the cmd prompt, do the adb push

Solution 4 - Android

While I know the question is about the real device, in case someone got here with a similar issue in the emulator, with whatever tools are the latest as of Feb, 2017, the emulator needs to be launched from the command line with:

-writable-system

For anything to be writable to the /system. Without this flag no combination of remount or mount will allow one to write to /system.

After the emulator is launched with that flag, a single adb remount after adb root is sufficient to get permissions to push to /system.

Here's an example of the command line I use to run my emulator:

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

The value for the -avd flags comes from:

./emulator -list-avds

Solution 5 - Android

I think the safest way is remounting the /system as read-write, using:

mount -o remount,rw /system

and when done, remount it as read-only:

mount -o remount,ro /system

Solution 6 - Android

adb disable-verity
adb reboot
adb root
adb remount

This works for me, and is the simplest solution.

Solution 7 - Android

On my Samsung galaxy mini S5570 (after got root on cellphone):

Fist, as root, I ran:

systemctl start adb

as a normal user:

adb shell 
su 

Grant root permissions on touch screen

mount 

list all mount points that we have and we can see, in my case, that /dev/stl12 was mounted on /system as ro (ready only), so we just need do:

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

Solution 8 - Android

Try the following on the command prompt:

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

Solution 9 - Android

Here is what worked for me. I was running an emulated Android 7.1.1 (Nougat) device.

On a terminal, I hit the following command. One thing to be noticed is the -writable-system flag

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

On another tab

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

All the changes that you do on the /system contents will survive a restart.

Solution 10 - Android

I checked with emulator and following worked.

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

As mentioned above as well, execute second step in single shot.

Solution 11 - Android

Open terminal emulator on the phone: then

adb shell

after that daemon is started

su
mount -o rw,remount /mnt/sdcard

then the read only is converted into the read-Write.

Solution 12 - Android

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

works for me

Solution 13 - Android

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"

Solution 14 - Android

I found this article from google, and thought I'd add the steps necessary on a Sony Xperia Z (4.2.2).

The Sony has a watchdog process which detects when you've changed ro to rw on / and /system (these are the only ones I was trying to modify) and possibly others.

The following was what I ran to perform the changes I was trying to achieve. I pasted these into a window, because removing the execute bit from /sbin/ric needs to be done quickly in order to stop it restarting itself. (I tried stop ric; this doesn't work - although it worked on a previous version of android on the phone).

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

I modified the hosts file here, so this is the place you make the changes you need to the filesystem. To leave things the way we found them, do this:

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

At which point ric should automatically restart. (It restarted for me automatically.)

Solution 15 - Android

Adding a little bit more to Jan Bergström's answer: Because Android is a Linux based system, and the path in Linux contains forward slashes(../), while using push command, use "/" to define destination path in the Android device.

For Example, the command goes: adb push C:\Users\admin\Desktop\1.JPG sdcard/pictures/

Notice that here, back slashes are used to define source path of the file to be pushed from windows PC and forward slashes are used to define destination path because Android is a Linux based system. You don't have to act as a root to use this command and also, it works perfectly fine on production devices.

Solution 16 - Android

Sometimes you get the error because the destination location in phone are not exist. For example, some android phone external storage location is /storage/emulated/legacy instead of /storage/emulated/0.

Solution 17 - Android

Thanks, Sérgio, for "mount" command without parameters idea. I'd need to made adb push into /data/data/com.my.app/lib for some test issue, and get "Read-only filesystem" message.

ls command shows me:

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

So, it's understood, that "lib" directory is separated from other application directories.

Command mount -o rw,remount /mnt/asec didn't resolve "r/o fs" issue, it wants device parameter before directory parameter.

"df" command didn't help also, but shows that my /mnt/asec/com.my.app-1 directory is at the separate mount point.

Then I looks by mount and voila!

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

Next steps are already described upwards: remount to RW, push and remount back to RO.

Solution 18 - Android

it sames that must extract and repack initrc.img and edit init file with the code of mount /system

Solution 19 - Android

Copy files to the SD-card?

Well, I assume you like to copy data to the Sd-card from the developers computer? You might have rooted the devise and made the area you address available?) I had about the same problem to upload data files for my application(Android Studio 1.3.2 in Win7), but.

  • First the adb command-shell has to be found in th path: PATH=%PATH%;C:\Users\XXXXX\AppData\Local\Android\sdk\platform-tools (the folder AppData is hidden, so you have to set the folder setup not hiding concealed files and folder to find it, Path works regardless)
  • You have to spell the folder path right or you get a read-only error message, most likely it must start with /sdcard or it is read only area. As soon as I did no problem pushing the file to the emulator.

So for instance the the adb command can look like this:

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

Solution 20 - Android

If there's a failure in copying the read-only file you can try locating the original file in the root directory and modify it with a root text editor (preferably) RB text editor, it comes with ROM Toolbox app.

Solution 21 - Android

Try this in a Terminal Emulator as root:

restorecon -v -R /data/media

Solution 22 - Android

In my case I was using the command adb push ~/Desktop/file.txt ~/sdcard/

I changed it to ~/Desktop/file.txt /sdcard/ and then it worked.

Make sure to disconnect and reconnect the phone.

Solution 23 - Android

As chen-xing mentioned the simplest way is:

adb reboot

But for me I had to change my settings first:

Settings → Developer options → Root access

Make sure ADB has Root access:

enter image description here

Solution 24 - Android

I just only needed this:

su -c "mount -o rw,remount /system"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionsteveo225View Question on Stackoverflow
Solution 1 - AndroidCurtisLeeBolinView Answer on Stackoverflow
Solution 2 - AndroidChen XingView Answer on Stackoverflow
Solution 3 - Androidsteveo225View Answer on Stackoverflow
Solution 4 - AndroidIshamaelView Answer on Stackoverflow
Solution 5 - AndroidhgdeoroView Answer on Stackoverflow
Solution 6 - AndroidbyInductionView Answer on Stackoverflow
Solution 7 - AndroidSérgioView Answer on Stackoverflow
Solution 8 - AndroidscueView Answer on Stackoverflow
Solution 9 - AndroidGeorge GarcésView Answer on Stackoverflow
Solution 10 - AndroidCoDeView Answer on Stackoverflow
Solution 11 - AndroidashwaniView Answer on Stackoverflow
Solution 12 - AndroidqinqieView Answer on Stackoverflow
Solution 13 - AndroidAshwin RayaproluView Answer on Stackoverflow
Solution 14 - AndroidPaulView Answer on Stackoverflow
Solution 15 - Androidsatyanx1View Answer on Stackoverflow
Solution 16 - AndroidGeng JiawenView Answer on Stackoverflow
Solution 17 - AndroidvkkeeperView Answer on Stackoverflow
Solution 18 - Androidxsilen TView Answer on Stackoverflow
Solution 19 - AndroidJan BergströmView Answer on Stackoverflow
Solution 20 - AndroidAbhishek HamalView Answer on Stackoverflow
Solution 21 - AndroidintrepidisView Answer on Stackoverflow
Solution 22 - AndroidSanathView Answer on Stackoverflow
Solution 23 - AndroidCillian MylesView Answer on Stackoverflow
Solution 24 - AndroidHafizur RahmanView Answer on Stackoverflow