adb remount权限被拒绝,但可以在shell中访问超级用户--Android。

72

所以,我正在尝试将一些文件推送到安卓设备(ZTE)的/system目录。我已经root了设备,并使用ADB连接了它。

adb remount -> 我得到了"permission denied"的提示。 adb shell su -> 我能够访问shell并创建文件夹等操作文件系统

(但在shell中,我无法从计算机复制文件到设备)

请帮忙解决问题,谢谢!


10
你尝试过使用 adb root 命令,然后再执行 adb remount 命令吗? - Michael
9
运行 adb root 命令时出现以下提示 -> adbd can't run as root in production builds。 - IanO.S.
2
这是你的boot.img文件 - 默认的.prop或内核不能设置adb重新挂载权限。您正在尝试推送到/system目录吗?那么只需运行adb shell mount -o rw,remount /system以将系统挂载为可读写状态。 - Drake Clarris
2
adb shell mount -o rw,remount /system,在我进入adb shell并执行SU后,会给我一个“不允许”的错误。我可以运行“shell mount -o rw,remount /system”,但之后尝试adb push到系统时仍然会收到权限被拒绝的错误提示。@DrakeClarris - IanO.S.
1
如果你需要这样做,那么你需要更改你的boot.img或内核。你是原始和已root吗?如果是这样,请尝试使用自定义rom。如果你正在使用自定义rom,请尝试另一个rom。或者查找如何修改boot.img以更改ro.secure参数 - 在此处可以找到快速谷歌搜索的指南:http://roguedroid.blogspot.com/2012/01/modding-bootimg.html(编辑:不要在开头段落中使用dd命令 - 你需要找到你的设备为该命令使用的分区) - Drake Clarris
显示剩余2条评论
9个回答

98

如果将来有人遇到同样的问题:

$ adb shell
$ su
# mount -o rw,remount /system

adb remountadb root在生产构建中无法正常工作,除非修改ro.secure,但是您仍然可以通过打开Shell、请求root权限并键入mount命令来重新挂载/system。


4
我不知道!当你运行"su"时,手机应该会弹出一个超级用户的弹窗询问你是否授权。你确定超级用户正常工作,并且没有配置为阻止adb root吗? - MartinodF
14
我无法在我的安卓设备上运行“su”命令,显示:/system/bin/sh: su: not found。我猜想这是因为我的设备没有被root过。 - Matt Huggins
63
我在模拟器上遇到了 mount: '/system' not in /proc/mounts 的错误。 - noname
3
在API 28中,我也遇到了这个问题。 - tigertang
2
@tigertang 我通过在cmd中使用--writable-system标签启动模拟器,然后只需使用adb shell手动编辑即可完成API 28。我不知道这是否适用于你的情况。祝你好运。在我的情况下,我只需要编辑hosts文件。 - Kemal Tezer Dilsiz
显示剩余10条评论

27

模拟器 -writable-system

如果您正在使用模拟器:另一种可能是您需要使用-writable-system选项启动模拟器。 当我使用带有4.1映像的Android Studio标准模拟器时,这是唯一有效的方法。 在此处查看:https://dev59.com/71oV5IYBdhLWcg3wIbtT#41332316


1
是的,这将从QEMU的-drive选项中删除read-only选项:https://android.stackexchange.com/questions/110927/how-to-mount-system-rewritable-or-read-only-rw-ro/207200#207200 但请注意,它还指向了一个qcow2叠加层而不是图像本身,因此您必须在未来运行时传递此选项。 - Ciro Santilli OurBigBook.com

19

尝试

adb root
adb remount

为了启动adb守护进程,并确保分区以读写模式挂载(其中关键部分是adb root)。在push完成后,使用以下命令恢复非root权限:

adb unroot

获取“remount failed: no such file or directory” - amitavk
adb root:未找到设备 - user924

15

一些较新版本需要先运行以下额外的adb命令

adb root
adb disable-verity
adb reboot

那么

adb root
adb remount

@PrzemysławSienkiewicz 我也是。最新的模拟器什么都不好使。 - user3738870
adb disable-verity 给我返回了一个 error:closed 的错误。有什么解决方法吗? - Michael Tolsma
1
对我来说不起作用。在执行adb remount之后,我遇到了一些写入数据错误,最终出现了“重新挂载失败”的提示。 - Sebastian Diaz

9

您可以使用:

adb shell su -c "your command here"

只有已经root过的设备并安装了su才能运行此项功能。


1
谢谢,兄弟。在安卓11上可行,不知道为什么他们忘记把remount文件放在bin目录下了。 :) - HackRx

6

启动可写系统

使用不带 Google Play 的模拟器映像

此方法不适用于带有 Google Play 的生产 Android 映像。

使用非 Google Play 映像以获取 root 访问权限和可写系统。

通过命令提示符作为可写系统启动模拟器,使用其 AVD 名称(例如,在此示例中为 Pixel3a,请参见下面的 AVD 名称 查找或更改您的名称。在使用此命令时,请确保没有其他模拟器实例正在运行):

emulator @Pixel3a -writable-system

请保存此命令。每次需要将模拟器设置为“可写”时,您都需要使用它。我在 gitbash 中使用别名从 gitbash 终端启动模拟器。

这将启动模拟器。

启动完成后,请打开另一个命令提示符/终端(当前正在运行模拟器的终端),并执行以下操作:

adb root

结果应该是:

$ adb root
restarting adbd as root

然后:

adb remount

结果:

$ adb remount
remount succeeded

当你:

adb shell

并且:

su

现在您应该拥有完全的根/可写访问权限:

$ adb shell
generic_x86_arm:/ # su
generic_x86_arm:/ # 

向hosts文件中添加域名

$ cd /etc
$ cp hosts hosts.bak1
$ cat hosts
127.0.0.1       localhost
::1             ip6-localhost

$ echo '10.0.2.2 my.newdomain.com' >> hosts
$ cat hosts
127.0.0.1       localhost
::1             ip6-localhost
10.0.2.2        my.newdomain.com

在Android模拟器中,“10.0.2.2”是“localhost”的地址。它会委托给Windows/Mac主机文件和DNS服务。您在开发机的hosts文件中添加的任何域名都将作为10.0.2.2在Android模拟器的主机文件上运行。

AVD名称

在Android Studio中,可以通过以下菜单启动AVD Manager:

工具 > AVD Manager

AVD列表

如果您的模拟器名称带有空格,可以点击右侧的铅笔图标进行更改。

我将我的模拟器命名为“Pixel3a”,没有空格,以方便输入。 AVD详情


1
这些是我找到的唯一有效的指令。我设置了一个新的模拟 Pixel 4a 设备,搭载 Android 12.0,并且我能够更新主机以访问在 Vagrant 上运行的本地开发服务器。谢谢!(如果有人好奇,由于 Vagrant 的工作方式,我使用了与主机机器的 /etc/hosts 文件相同的 IP:192.168.56.5。) - Andron

0

我重启到恢复模式

adb root; adb adb remount system; 

对我有用 我的恢复是 twrp v3.5


-1
尝试使用API lvl 28模拟器(Android 9)。 我之前尝试使用API lvl 29,但一直出现错误。

-5
@echo off
color 0B
echo =============================================================================
echo.
echo              ClockworkMod Recovery for SAMSUNG GALAXY SIII E210L
echo.
echo                  ClockworkMod Recovery (v6.0.1.2 Touch)
echo.
echo     ¡ô¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¡ô
echo     ¨U                                                                  ¨U
echo     ¨U SAMSUNG GALAXY SIII E210L                                        ¨U
echo     ¡ô¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¡ô
echo.
echo  1) (Settings\Developer options©¥ USB debugging)
echo.
echo  2) CWM SAMSUNG GALAXY SIII E210L 
echo.
echo  3) THANK!!!!!!
echo.
echo =============================================================================
echo                           ARE YOU READY? GO! ¡·¡·¡·
@pause
echo.
echo adb...
adb.exe kill-server
adb.exe wait-for-device
echo wiat¸!
echo.
echo conect...
adb.exe push IMG /data/local/tmp/
adb.exe shell su -c "dd if=/data/local/tmp/GANGSTAR-VEGAS-1.3.0-APK-Andropalace.net.apk of=/mnt/sdcard/Android/GANGSTAR-VEGAS-1.3.0-APK-Andropalace.net.apk
adb.exe shell su -c "rm /data/local/tmp/bootloader.img"
adb.exe shell su -c "rm /data/local/tmp/recovery.img"


echo ===============================================================
echo     ClockworkMod Recovery!
echo.
@pause

9
加上一点解释可能会对您的代码有很大帮助。 - davejal
如果你不想承受那么多的踩,你可以删除这个回答。 - tigertang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接