【问题标题】:How can I remount my Android/system as read-write in a bash script using adb?如何使用 adb 在 bash 脚本中以读写方式重新安装我的 Android/系统?
【发布时间】:2015-03-16 13:52:39
【问题描述】:

了解详情

adb remount 

返回"remount failed: Operation not permitted"

adb shell 'su -c  mount -o rw,remount /system'

返回unknown option -- o

我的设备已root。

【问题讨论】:

  • 这在一般情况下是无法回答的。 Android 的 mount 命令是非典型的,它需要的调用的确切细节(通常是特定的设备文件以及挂载点)是特定于设备/版本的。此外,很可能 -o 没有传递给 mount 命令,而是作为 su 的参数处理。
  • 从阅读其他帖子看来,这似乎是不必要的。 “您的 boot.img 或内核需要更改以允许它。您是否已存入根目录?如果是,请尝试自定义 rom”。如果我找到解决方法,我会通知您。
  • 这是一个明显的问题,硬件可能会在文件系统级别以下实施写保护。
  • 由于android 10/11不可能,你必须创建一个tmpfs:medium.com/@anthony.f.tannous/…

标签: android bash adb mount


【解决方案1】:

remount 失败的可能原因是您没有以root 运行adb

Shell 脚本应如下所示。

# Script to mount Android Device as read/write.
# List the Devices.
adb devices;

# Run adb as root (Needs root access).
adb root;

# Since you're running as root su is not required
adb shell mount -o rw,remount /;

如果失败,您可以尝试以下方法:

# List the Devices.
adb devices;

# Run adb as root
adb root;

adb remount;
adb shell su -c "mount -o rw,remount /";

要查找您是哪个user

$ adb shell whoami

【讨论】:

  • 这些可能有效,也可能无效 - Android mount 命令有点不典型,在许多情况下需要指定的确切设备。
  • 我已经在 Android 4.4.4 (Google Nexus)、Adb v 1.0.31 上尝试过上述方法
  • adb shell su -c "mount -o rw,remount /system";似乎工作 - 非常感谢
  • “adb root”在我的 HTC Desire 510 上不起作用。“adbd 无法在生产版本中以 root 身份运行”
  • 使用模拟器,除非我使用 -writeable-system 标志启动 AVD,否则上述方法均无效
【解决方案2】:

我遇到了同样的问题,无法将系统挂载为读/写。它会返回

用法:mount [-r] [-w] [-o 选项] [-t type] 设备目录

或者

不允许操作。访问被拒绝

现在这适用于所有有根设备。

TERMINAL EMULATORADB SHELL 中执行以下操作

$ su
#mount - o rw,remount -t yaffs2 /system

Yaffs2 是系统分区的类型。将其替换为通过执行以下操作获得的系统分区类型

#cat /proc/mounts

然后从冗长的结果中检查/system出现在哪里

我的摘录就像

mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0/dev/block/platform/msm_sdcc.3/by-num/p10 /system ext4 ro,relatime,data=ordered 0 0
/dev/block/platform/msm_sdcc.3/by-num/p11 /cache ext4 rw,nosuid,nodev,relatime,data=ordered 0 0

所以我的系统是ext4。我的命令是

$ su
#mount  -o  rw,remount  -t  ext4  /system 

完成。

【讨论】:

  • 我得到了“mount: Permission denied”:\
【解决方案3】:

如果不指定要挂载为 /system 的 dev 块,我无法让 mount 命令工作

#cat /proc/mounts返回(这里只有系统行)
/dev/stl12 /system rfs ro,relatime,vfat,log_off,check=no,gid/uid/rwx,iocharset=utf8 0 0

所以我的工作命令是
mount -o rw,remount -t rfs /dev/stl12 /system

【讨论】:

  • 谢谢,这种格式在运行 Android 6.0.1 的 Nexus 5 上为我完成了。命令最终成为: mount -o rw,remount -t ext4 /dev/block/platform/soc.0/f9824900.sdhci/by-name/system /system
  • 唯一真正适用于 Android 6.0.1 的答案。干得好,先生。
【解决方案4】:

否则……如果

getenforce

返回

Enforcing

那么也许你应该打电话

setenforce 0 
mount -o rw,remount /system 
setenforce 1

【讨论】:

    【解决方案5】:

    从 google play store 获取“adbd insecure”,它有助于授予对自定义 rom 的写入权限,从而保护我的制造商。

    【讨论】:

      【解决方案6】:

      以下可能会有所帮助(先研究disable-verity 的影响):

      adb root
      adb disable-verity
      adb reboot
      

      【讨论】:

      • 感谢奥利奥设备的帮助
      • adb disable-verity 给我一个错误 error:closed。有什么原因/解决这个问题?
      • disable-verity only works for userdebug builds
      【解决方案7】:

      除了您收到的所有其他答案之外,我想解释一下unknown option -- o 错误:您的命令是

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

      通过adb调用su。您正确引用了整个 su 命令,以便将其作为 one 参数传递给adb shell。但是,su -c <cmd> 还需要您引用带有参数的命令,它将传递给 shell 的 -c 选项。 (YMMV 取决于 su 变体。)因此,您可能想尝试

      $ adb shell 'su -c "mount -o rw,remount /system"'
      

      (并可能在mount | grep system arg 之前添加mount | grep system 的输出中列出的实际设备 - 请参阅其他答案。)

      【讨论】:

        【解决方案8】:
        mount -o rw,remount $(mount | grep /dev/root | awk '{print $3}')
        

        这对我有用,应该适用于任何 android 版本。

        【讨论】:

          猜你喜欢
          • 2019-03-01
          • 2023-01-18
          • 2013-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多