BusyBox 中文文档 下载 App

Recovery 模式安装 BusyBox 系统无法启动时的救援方案

什么是 Recovery 模式

Android 设备的 recovery 分区是一个独立的微型系统,即使正常的 /system 和 /data 分区完全损坏也能进入。它的主要用途是:

BusyBox Pro 的 Recovery 模式安装选项就是让 BusyBox 能被写入 recovery 可访问的分区,作为救援工具使用。

进入 Recovery 模式

设备类型按键组合
Samsung电源 + 音量上 + Bixby(早期)/ 电源 + 音量下 + USB(新)
Xiaomi/MIUI电源 + 音量上
Pixel电源 + 音量下 → Bootloader → Recovery
通用adb reboot recovery(已 root 时)

在 Recovery 中手动安装 BusyBox

Recovery 模式下的操作流程因设备而异,以下是通用步骤:

# 进入 recovery 后,先确认能拿到 shell
# 某些 recovery(TWRP)自带 Terminal,某些需要 adb shell

# 1. 如果 recovery 能挂载 /system,把 BusyBox 写到那里
mount /system
cp busybox /system/xbin/busybox
chmod 755 /system/xbin/busybox

# 2. 创建符号链接(recovery 里可能没有 ln,用 sh 循环)
cd /system/xbin
busybox --list | while read applet; do
  ln -sf busybox "$applet"
done

# 3. 如果 /system 损坏,写到 /data
# 先确保 /data 能挂载和写入
mount /data
mkdir -p /data/local/bin
cp busybox /data/local/bin/busybox
chmod 755 /data/local/bin/busybox
# 然后在 /init.rc 或 boot 脚本里加 PATH

常见救援场景

场景一:系统启动后卡在开机画面(bootloop)

大概率是某个系统服务崩溃导致 init 重启。用 BusyBox 排查:

# 在 recovery shell 里
# 挂载 /system 和 /data
mount /system
mount /data

# 查看启动日志
cat /proc/last_kmsg           # 或 /sys/fs/pstore/console-ramoops
# 如果日志里有 SELinux deny 或分区错误,定位修复

# 如果是 SELinux 问题,临时关闭
setenforce 0
# 或者用 adb shell 改 system/core/init/init.cpp

# 如果是 App 导致的 bootloop,手动卸载
mount -o rw /data
cd /data/app
# 找到最近装的可疑应用包名目录,删掉
rm -rf com.suspicious.app*
umount /data
reboot

场景二:系统分区只读无法写入

某些设备开了 AVB(Android Verified Boot),recovery 里无法 remount /system 为读写:

# AVB 开启时 mount /system 只读,mount -o rw /system 失败
# 解决方案 1:用 Magisk 的 system-as-root 模块
# 解决方案 2:刷临时禁用 AVB 的 boot.img

# 临时方案:写到 /data/local/tmp 加 PATH
cp busybox /data/local/tmp/busybox
export PATH=/data/local/tmp:$PATH

场景三:ROM 损坏需要 adb 救援

# adb recovery shell
adb shell

# 用 BusyBox 备份数据到 SD 卡或 OTG
busybox tar czf /sdcard/data-backup.tar.gz /data

# 如果需要完整救援工具链,考虑刷 TWRP recovery
# TWRP 自带完整的 BusyBox 和终端

TWRP 等自定义 Recovery 的 BusyBox

主流自定义 Recovery(TWRP、OrangeFox、PBRP)自带 BusyBox——不需要额外安装。它们的 Terminal 命令集就是 BusyBox 的完整 Applet 集合。直接在 recovery 的 Terminal 里敲 busybox ls 或 ls(已经 symlink 好了)就能用。

注意事项

写完 /system 后别忘了 sync:Flash 分区上的数据需要 sync 才能确保写入,直接断电可能损坏分区表。BusyBox 有 busybox sync 命令。

AVB 和 dm-verity:现代 Android 的 AVB 会检测分区是否被修改,改了 /system 会导致验证失败,某些设备直接拒绝启动。如果要在 /system 里写入 BusyBox,先确认设备支持 AVB 禁用(fastboot disable-verity、刷 vbmeta --disable-verity)。