Android上的只读文件系统

时间:2011-05-19 23:38:29

标签: android

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

我该如何解决这个问题?

24 个答案:

答案 0 :(得分:361)

并非所有手机和Android版本都安装相同的东西 重新安装时限制选项是最好的。

只需重新安装为rw(读/写):

# mount -o rw,remount /system

完成更改后,请重新安装到ro(只读):

# mount -o ro,remount /system

答案 1 :(得分:76)

adb remount

对我有用,似乎是最简单的解决方案。

答案 2 :(得分:75)

在Android论坛上找到了同样的问题。希望这有助于其他人。

在手机上的终端模拟器上:

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

然后在cmd提示符下,执行adb push

答案 3 :(得分:55)

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

-writable-system

任何可写入/system的内容。如果没有此标记,则remountmount的任何组合都不允许用户/system

使用该标记启动模拟器后,adb remount之后的adb root足以获得推送到/system的权限。

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

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

-avd标志的值来自:

./emulator -list-avds

答案 4 :(得分:29)

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

mount -o remount,rw /system

完成后,将其重新安装为只读:

mount -o remount,ro /system

答案 5 :(得分:15)

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

拳头,作为根,我跑了:

systemctl start adb

作为普通用户:

adb shell 
su 

在触摸屏上授予root权限

mount 

列出我们拥有的所有挂载点,在我的例子中,我们可以看到/ dev / stl12已安装在/ system上作为ro(仅限就绪),所以我们只需要这样做:

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

答案 6 :(得分:11)

在命令提示符处尝试以下操作:

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

答案 7 :(得分:8)

adb disable-verity
adb reboot
adb root
adb remount

这对我有用,是最简单的解决方案。

答案 8 :(得分:6)

这对我有用。我正在运行模拟的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内容所做的所有更改都将在重新启动后继续。

答案 9 :(得分:3)

在手机上打开终端模拟器: 然后

adb shell
该守护进程启动后

su
mount -o rw,remount /mnt/sdcard

然后将只读转换为读写。

答案 10 :(得分:2)

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

适合我

答案 11 :(得分:1)

谢谢,Sérgio,对于没有参数构思的“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 files lrwxrwxrwx system system 2016-05-06 11:43 lib -> /mnt/asec/com.my.app-1/lib

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

命令 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.app-1 ext4 ro,dirsync,relatime 0 0

后面的步骤已经向上描述:重新安装到RW,推送并重新安装回RO。

答案 12 :(得分:1)

就我而言,我正在使用命令adb push ~/Desktop/file.txt ~/sdcard/

我将其更改为~/Desktop/file.txt /sdcard/,然后它起作用了。

确保断开并重新连接手机。

答案 13 :(得分:1)

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"

答案 14 :(得分:1)

必须提取并重新打包initrc.img并使用mount / system的代码编辑init文件

答案 15 :(得分:1)

有时您会收到错误,因为手机中的目标位置不存在。例如,某些Android手机外部存储位置为/storage/emulated/legacy而不是/storage/emulated/0

答案 16 :(得分:1)

再加上JanBergström的回答:因为Android是基于Linux的系统,并且Linux中的路径包含正斜杠(../),所以在使用push命令时,使用“/”来定义目标路径Android设备。

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

请注意,这里,反斜杠用于定义要从Windows PC推送的文件的源路径,而正斜杠用于定义目标路径,因为Android是基于Linux的系统。您不必充当root用户来使用此命令,而且它在生产设备上完全正常。

答案 17 :(得分:1)

我在Google上发现了这篇文章,并认为我会在Sony Xperia Z(4.2.2)上添加必要的步骤。

索尼有一个看门狗程序,可以检测你何时将r改为/和/系统(这是我试图修改的唯一)以及其他可能的。

以下是我为执行我想要实现的更改而运行的内容。我将这些粘贴到一个窗口中,因为从/ 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应自动重启。 (它自动重启给我。)

答案 18 :(得分:0)

以root身份在终端仿真器中尝试此操作:

restorecon -v -R /data/media

答案 19 :(得分:0)

如果复制只读文件失败,您可以尝试在根目录中找到原始文件,并使用根文本编辑器(最好是)RB文本编辑器修改它,它附带ROM Toolbox app。

答案 20 :(得分:0)

我检查了模拟器并进行了后续工作。

  1. adb重新启动
  2. adb root && adb重新安装&& adb push〜/ Desktop / hosts / system / etc / hosts

也如上所述,单步执行第二步。

答案 21 :(得分:0)

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

adb reboot

但是对我来说,我必须先更改设置:

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

确保ADB具有根访问权限:

enter image description here

答案 22 :(得分:-1)

将文件复制到SD卡?

嗯,我假设您想从开发人员计算机将数据复制到Sd卡?您可能已根据设计进行了操作并使您所使用的区域可用?)我为我的应用程序(Win7中的Android Studio 1.3.2)上传数据文件时遇到了同样的问题,但是。

  • 首先必须在路径中找到adb命令shell: PATH =%PATH%; C:\ Users \ XXXXX \ AppData \ Local \ Android \ sdk \ platform-tools(文件夹AppData被隐藏,所以你必须设置文件夹设置不隐藏隐藏文件和文件夹才能找到它,Path无论如何工作)
  • 您必须将文件夹路径拼写正确或者您收到只读错误消息,很可能它必须以/ sdcard开头或它是只读区域。只要我将文件推送到模拟器没有问题。

因此,例如,adb命令可能如下所示:

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

答案 23 :(得分:-2)

我只需要这个:

[Tue Aug 18 04:11:32 2020] PHP 7.4.8 Development Server (http://127.0.0.1:80) started
[Tue Aug 18 04:11:40 2020] 127.0.0.1:50018 Accepted
[Tue Aug 18 04:11:40 2020] 127.0.0.1:50019 Accepted
[Tue Aug 18 04:11:40 2020] 127.0.0.1:50018 [404]: (null)
/ - No such file or directory
[Tue Aug 18 04:11:40 2020] 127.0.0.1:50018 Closing
[Tue Aug 18 04:11:41 2020] 127.0.0.1:50022 Accepted```

This is the output in browser
```Fatal error: Unknown: Failed opening required '.' (include_path='.;C:\php\pear') in Unknown on line 0```