Android上的只读文件系统

我最近安装了我的Droid X,一切似乎都很完美。我对build.prop做了一些更改,当我执行adb push build.prop /system/时,我得到以下错误:failed to copy 'c:\build.prop' to '/system//build.prop': Read-only file system

我该如何解决这个问题?

580690 次浏览

这是从一个Android论坛得到的,我在那里问了同样的问题。希望这能帮助到其他人。

在手机终端模拟器中:

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

然后在cmd提示符下,执行adb push . exe命令

不是所有的手机和android版本都挂载了相同的东西 重新挂载时限制选项是最好的

简单地重新挂载为rw(读/写):

# mount -o rw,remount /system

一旦你完成了修改,重新挂载到ro(只读):

# mount -o ro,remount /system

我认为最安全的方法是将/system重新挂载为可读写,使用:

mount -o remount,rw /system

完成后,将其重新挂载为只读:

mount -o remount,ro /system
adb remount

对我来说,这似乎是最简单的解决方案。

在命令提示符上尝试以下命令:

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

在我的三星galaxy mini S5570上(在手机上扎根后):

首先,作为根,我跑:

systemctl start adb

作为普通用户:

adb shell
su

在触摸屏上授予root权限

mount

列出我们拥有的所有挂载点,我们可以看到,在我的例子中,/dev/stl12被挂载在/system上为ro(仅准备好),所以我们只需要做:

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

对我有用

我从谷歌上找到了这篇文章,并想在Sony Xperia Z(4.2.2)上添加必要的步骤。

索尼有一个看门狗进程,当你在/和/system(这些是我唯一试图修改的)上将ro更改为rw时,它会检测到。

下面是我运行来执行我试图实现的更改的代码。我把它们粘贴到一个窗口中,因为从/sbin/ric中删除执行位需要快速完成,以阻止它自己重新启动。(我尝试了stop ric;这是行不通的-尽管它可以在之前版本的android手机上运行)。

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

我在这里修改了hosts文件,因此可以在这里对文件系统进行所需的更改。要让事情保持原样,请这样做:

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

这时ric会自动重启。(它自动为我重启了。)

打开手机终端模拟器: < / p >

adb shell

在该守护进程启动之后

su
mount -o rw,remount /mnt/sdcard

那么只读转换为读写。

复制文件到sd卡?

嗯,我猜你喜欢把数据从开发人员的电脑复制到sd卡上吧?你可能已经扎根的设计,并使你地址的区域可用?)我在为我的应用程序上传数据文件时遇到了同样的问题(Android Studio 1.3.2 in Win7),但是。

  • 首先adb命令shell必须在th路径下找到: C:\Users\XXXXX\AppData\Local\Android\sdk\platform-tools (AppData文件夹是隐藏的,所以你必须设置文件夹设置,不隐藏隐藏的文件和文件夹来找到它,不管路径如何)
  • 你必须拼写正确的文件夹路径,否则你会得到一个只读错误消息,很可能它必须以/sdcard开头,或者它是只读区域。只要我没有问题,把文件推到模拟器。

例如,adb命令可以是这样的:

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

对Jan Bergström的回答再补充一点:因为Android是基于Linux的系统,Linux中的路径包含正斜杠(../),在使用push命令时,使用“/”来定义Android设备中的目标路径。

例如:adb push C:\Users\admin\Desktop\1.JPG sdcard/pictures/

注意这里,向后斜杠用来定义从windows PC推送的文件的源路径,向前斜杠用来定义目标路径,因为Android是基于Linux的系统。您不必作为根用户来使用这个命令,而且它在生产设备上工作得非常好。

有时你会得到错误,因为目标位置在电话不存在。例如,某些android手机外部存储位置是/storage/emulated/legacy而不是/storage/emulated/0

感谢,塞吉奥,对于“mount”命令没有参数的想法。 为了一些测试问题,我需要将adb push转换为/data/data/com.my.app/lib,并获得“只读文件系统”消息

Ls命令告诉我:

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文件 LRWXRWXRWX系统系统2016-05-06 11:43 lib ->/ mnt / asec com.my.app-1 / lib / <代码> < / p >

因此,不难理解,“lib”目录与其他应用程序目录是分开的。

< p >命令 mount -o rw,remount /mnt/asec 没有解决“r/o fs”问题,它想要设备参数在目录参数之前

"df"命令也没有帮助,但显示我的/mnt/asec/com.my.app-1目录位于单独的挂载点。

然后我通过mount查找,瞧!

root@android:/ # mount …… /dev/block/dm-4 / mnt / asec / com.my。应用-1 ext4 ro,dirsync, relatiw0 0

接下来的步骤已经向上描述:重新挂载到RW,推送并重新挂载回RO。

如果在复制只读文件时失败,你可以尝试在根目录中定位原始文件,并使用根文本编辑器(最好是)RB文本编辑器修改它,它带有ROM Toolbox应用程序。

在终端仿真器中以root用户尝试以下操作:

restorecon -v -R /data/media

同样,必须提取并重新打包initrc。使用mount /system的代码编辑init文件

虽然我知道这个问题是关于真实设备的,但如果有人在模拟器中遇到类似的问题,无论2017年2月最新的工具是什么,模拟器都需要从命令行启动:

-writable-system

对于任何可写入/system的对象。如果没有这个标志,remountmount的任何组合都不允许写入/system

在模拟器以该标志启动后,adb root之后的单个adb remount就足以获得推送到/system的权限。

下面是我用来运行模拟器的命令行示例:

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

-avd标志的值来自:

./emulator -list-avds

以下是对我有效的方法。我正在运行一个模拟的Android 7.1.1 (Nougat)设备。

在一个终端上,我点击下面的命令。需要注意的一点是-writable-system标志

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

在另一个标签上

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

您对/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"
adb disable-verity
adb reboot
adb root
adb remount

这对我来说很有效,而且是最简单的解决方案。

在我的例子中,我使用的是命令adb push ~/Desktop/file.txt ~/sdcard/

我把它改为~/Desktop/file.txt /sdcard/,然后它工作了。

请确保断开并重新连接电话。

我用模拟器检查,下面工作。

  1. 亚洲开发银行重启
  2. Adb root &&Adb remount &&/Desktop/hosts /system/etc/hosts . adb push ~

如上所述,在单镜头中执行第二步。

正如chen-xing提到的,最简单的方法是:

adb reboot

但对我来说,我必须先改变我的设置:

设置→开发人员选项→根权限

确保ADB具有Root访问权限:

enter image description here

我只需要这个:

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