Adb connection Error:EOF,error: Read-only file system"解决方

本文介绍如何在Android设备上通过adb工具获取root权限。首先需要进入到SDK的platform-tools目录下,然后执行kill-server命令来关闭当前的adb服务。接着执行root命令以获取root权限。

这是因为adb 没有使用root权限进入vm,进入SDK文件下的platform-tools,


然后执行./adb kill-server (windows下的话 adb kill-server,下同)


再执行./adb root 


OK!

<think>我们正在解决ADB复制文件时出现'remote Read-only file system'错误的问题。根据引用内容,该错误通常发生在尝试向只读文件系统(如/system分区)写入文件时。以下是综合引用信息的解决案: ### 解决案步骤 1. **确认ADB已获取root权限**(针对系统分区操作必需): ```bash adb root # 重启adbd以root权限运行 adb devices # 验证设备连接 ``` 如果设备未root或`adb root`失败,请参考设备root教程(如Magisk)[^1][^2]。 2. **重新挂载分区为可写模式**(关键步骤): - 执行以下命令解除分区的只读限制: ```bash adb remount # 尝试重新挂载/system分区为可读写 ``` - 若`adb remount`失败(常见于Android 7.0+),按引用[2][3][4]的法: ```bash adb disable-verity # 禁用文件系统验证(需解锁Bootloader) adb reboot # 重启设备使设置生效 adb root # 重新获取root权限 adb remount # 再次尝试挂载 ``` 3. **检查目标路径的权限**: - 若操作`/system`等系统路径(如`/etc/hosts`),确保路径存在且非伪目录(引用[1])。 - 若操作非系统路径(如`/sdcard`),直接跳过remount步骤(引用[5])。 4. **替代案:使用临时目录或用户空间**: - 如果设备未root或remount失败(如生产版本限制),将文件推送到用户可写目录: ```bash adb push 本地文件路径 /sdcard/目标路径/ # 示例:adb push hosts /sdcard/download/ ``` - 然后在设备内手动移动文件(需root权限的shell): ```bash adb shell su cp /sdcard/download/hosts /etc/hosts # 复制文件到系统位置 chmod 644 /etc/hosts # 设置正确权限 ``` ### 错误处理 - **`remount of /system failed: Read-only file system`**(引用[3]): - 原因:设备内核强制挂载为只读,或为`userdebug`/`eng`外的版本(如生产版)。 - 解决:刷入`userdebug`版本ROM,或使用自定义Recovery挂载/system后手动复制文件。 - **`remote couldn't create file: Is a directory`**(引用[5]): - 原因:目标路径被误写为目录格式(如`/tmp529/`),但未指定文件名。 - 解决:在路径末尾添加文件名,或确认路径为目录时使用`/`结尾: ```bash adb push 本地文件 /sdcard/tmp529/filename.txt # 明确文件名 ``` ### 预防措施 - **系统分区操作风险**:修改`/system`可能导致设备变砖,操作前务必备份。 - **权限维持**:`adb remount`的写入状态在重启后失效,需重新执行(引用[4])。 §§相关问题§§ 1. 如何永久禁用Android的Verity保护? 2. ADB remount命令的工作原理是什么? 3. 没有root权限时如何修改系统文件? [^1]: adb push报错‘read-only file systemadb已经获取到root权限,当尝试替换/etc/hosts文件,在执行adb push命令时,报错:read-only file systemadb: error: failed to copy 'hosts' to '/etc/hosts': remote Read-only file system [^2]:adbadb相关命令行及adb传输文件权限问题 remote couldn‘t create file: Read-only file systemadb传输文件权限问题 今天用adb push的时候,报错说并非root权限 remote couldn't create file: Read-only file system 以下是adb相关命令 一、非root权限解决案 1️⃣运行以下命令行 adb root adb remount 2️⃣如果还报错,则运行以下命令行 adb disable-verity adb reboot adb root adb remount adb push 二、adb相关命令行 查看设备 adb devices 连接设备 adb connect IP:port 断开连接所有设备 adb disconnect IP:port 获取root权限 adb root 重新挂载文件系统(默认只读,执行命令后可写) adb remount adb安装文件 adb install packagePath [^3]: adb push提示Read-only file system问题。android7.0下,版本为eng时,adb push 可正常使用,只是eng版本比较卡顿,换了userdebug版本后,adb remount命令会提示remount of /system failed:Read-only file system。 二:使用新的adb工具解决问题 2.1:替换adb [^4]: 解决adb push时出现的“Read-only file system“问题。但是你会发现,当你在adb shell中使用该式重新挂载分区后,退出adb shell后用adb push命令向/system分区推送文件时仍然报错Read-only file system,这是因为在adb shell中重新挂载分区只针对当前的shell有效,在退出后该挂载式失效。所以即使你打开两个cmd/powershell窗口,一个窗口使用adb shell重新挂载分区,在另一个窗口adb push也是不行的。 [^5]: 关于adb push 出现问题 remote couldn‘t create file: Read-only file system的一个可行案,手机没有...。记录一下:用的手机是小米civi1s,最新的澎湃os操作系统,没有root过 添加文件到手机 C:\Users\orang>adb push E:\mobile\photo\screenshot\hello.jpg \tmp529\ E:\mobile\photo\screenshot\hello.jpg...d. 75.7 MB/s (72483 bytes in 0.001s) adb: error: failed to copy 'E:\mobile\photo\screenshot\hello.jpg' to '\tmp529\': remote couldn't create file: Read-only file system C:\Users\orang>adb push E:\mobile\photo\screenshot\hello.jpg /tmp529/ E:\mobile\photo\screenshot\hello.jpg...d. 75.1 MB/s (72483 bytes in 0.001s) adb: error: failed to copy 'E:\mobile\photo\screenshot\hello.jpg' to '/tmp529/': remote couldn't create file: Is a directory C:\Users\orang>adb push E:\mobile\photo\screenshot\hello.jpg /sdcard/tmp529/ E:\mobile\photo\screenshot\hello.jpg...d. 76.5 MB/s (72483 bytes in 0.001s) C:\Users\orang> 看到在把'\'换成'/'后变成了is a directory,不知道什么意思,然后在前面加了一个'/scard'就成功了 手机上的文件夹tmp529中也有对应的图片 删除手机的文件 C:\Users\orang>adb shell rm -rf /sdcard/tmp529/hello.jpg C:\Users\orang>。</think>### 解决ADB复制文件时出现"remote Read-only file system"错误的法 根据引用内容,这个错误通常发生在尝试向只读文件系统(如/system分区)写入文件时。以下是完整的解决案步骤: #### 📌 核心解决步骤 1. **获取ADB root权限**(必需步骤): ```bash adb root # 重启adbd以root权限运行 adb devices # 验证设备连接 ``` 2. **重新挂载系统分区为可写模式**(关键步骤): ```bash adb remount # 尝试重新挂载/system分区为可读写 ``` - 如果失败(常见于Android 7.0+),按引用[2][3]的法: ```bash adb disable-verity # 禁用文件系统验证(需解锁Bootloader) adb reboot # 重启设备使设置生效 adb root # 重新获取root权限 adb remount # 再次尝试挂载 ``` 3. **执行文件复制操作**: ```bash adb push 本地文件路径 设备目标路径 ``` #### ⚠️ 特殊场景解决案 1. **当操作/system等系统分区时**(引用[1][4]): ```bash # 在adb shell内直接挂载并操作 adb shell su mount -o rw,remount /system # 手动重新挂载 cp /sdcard/你的文件 /system/目标路径 exit ``` 2. **非root设备或临时解决案**(引用[5]): ```bash # 推送到用户可写目录 adb push 本地文件 /sdcard/目标路径/ # 然后在设备内手动移动文件 adb shell mv /sdcard/目标路径/文件 /system/目标路径 ``` 3. **路径格式错误导致的"is a directory"**(引用[5]): ```bash # 错误示例(路径结尾缺少文件名): adb push file.txt /tmp529/ ❌ # 正确写法: adb push file.txt /sdcard/tmp529/filename.txt ✅ ``` #### 🔍 验证与调试 ```bash # 检查分区挂载状态 adb shell mount | grep /system # 测试写入权限(应在#提示符下操作) adb shell su touch /system/testfile && echo "成功" || echo "失败" rm /system/testfile ``` #### ⚠️ 重要注意事项 1. **系统分区操作风险**:修改`/system`可能导致设备变砖,操作前务必备份 2. **权限维持问题**:`adb remount`的写入状态在重启后失效(引用[4]) 3. **Android版本差异**: - Android 7.0+需要`disable-verity`(引用[3]) - 生产版本(`user`)可能完全禁止写入(需刷`userdebug`版本) #### 💡 替代案 ```mermaid graph LR A[遇到Read-only错误] --> B{需要修改系统文件?} B -->|是| C[解锁Bootloader+刷自定义Recovery] B -->|否| D[使用/sdcard或/data目录] C --> E[通过Recovery挂载/system] E --> F[手动复制文件] D --> G[adb push到用户目录] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值