您的位置 首页 linux

把红米 4A 变成 24 小时家庭微服务器:MIUI + Root + Alpine + 宝塔拨测探针

一台吃灰的旧安卓手机,插着电当服务器,既能跑 Linux 环境,又能借宝塔拨测探针赚带宽额度。本文记录从解锁到落地的完整思路与踩坑。

一、为什么是红米 4A

红米 4A(代号 rolex,骁龙 425,2GB 内存,安卓 6/7)是经典的"电子垃圾复活"目标:

  • 功耗极低,常年插电当服务器电费可忽略;
  • 自带 WiFi,适合做局域网微服务器 / 拨测节点;
  • 社区资料多,BL 解锁容易。

但也有限制:它跑不了原生 Linux 发行版(postmarketOS 在该机型内核上启动即崩)。实测 lk2nd + 通用移植在所有配置下内核早期就死,社区也基本是"能亮屏但进不了系统"。所以"刷成纯 Linux"这条路在这台机器上走不通,我们换思路。

二、架构选型:不刷机,在安卓里跑 Linux

最终方案是 MIUI(中国版)+ Magisk Root + Alpine Linux chroot:

方案 说明 结论
postmarketOS 真·Linux,但 rolex 内核启动即崩 放弃
MIUI + Termux proot 简单,但 proot 性能差、磁盘/网络上报不准 不够用
MIUI + Root + Alpine chroot 原生 root 权限、接近真 Linux、稳定 采用

chroot 里跑的是 Alpine Linux 3.19(arm64),通过 Magisk 的 busybox 进入,里面能装 openssh、curl、宝塔探针等,几乎等同一台迷你 Linux 服务器。

三、落地步骤(概览)

  1. 解 BL 锁:小米官方申请解锁,fastboot 下解锁(会清数据,提前备份)。
  2. 刷中国版 MIUI:全球版会卡 Google 检查,刷国行线刷包最稳。
  3. Magisk Root:boot.img 走 Magisk 修补后 fastboot 刷入,验证 uid=0。
  4. 部署 Alpine chroot:
  • 从镜像源下载 alpine-minirootfs;
  • 解压到 /data/alpine;
  • 用 Magisk busybox chroot 进入(注意:安卓 6 自带的 toybox chroot 在这台机器内核上有 EPERM bug,必须用 Magisk 的 busybox chroot);
  • 挂载 proc / dev / devpts / sys 进容器。
  1. SSH 服务:容器内装 openssh,PermitRootLogin yes + 密码登录,端口 22。
  2. 开机自启:写 /data/adb/service.d/alpine-server.sh(Magisk 启动脚本),延迟拉起 sshd 与探针。
  3. 宝塔拨测探针:在 chroot 内以 root 执行官方安装脚本(注意:容器里没有 sudo,且 sudo bash 会失败,应直接用 curl … | sh)。

四、探针安装的一个坑:sudo 到底要不要

官方文档写的是 curl -kfsSL 'https://t.bt.cn/api/v1/agent/install.sh' | sudo bash。但在 Alpine chroot 里:

  • 容器本身就已经是 root(whoami 实测为 root),不需要 sudo;
  • chroot 里没有 sudo 命令,sudo bash 会直接失败或落到错误路径。

正确做法是去掉 sudo:

# 在 chroot 内(已是 root)
curl -kfsSL 'https://t.bt.cn/api/v1/agent/install.sh' | sh

装好后是 /usr/local/bin/bt-probe-agent,配置在 /etc/bt-probe-agent/config.json。重启/重绑用 bt-probe-agent uninstall 清干净再重装,每次重装会生成新的 agent 身份和激活码(旧码作废,需在宝塔后台用新码重新绑定)。

五、关于"节点看不到磁盘":chroot 的固有现象

这是最有意思的一个技术点。后端节点详情里磁盘显示 0 Bytes / 0 Bytes,原因不是没装好,而是 chroot 架构限制:

探针上报磁盘容量,读的是 /proc/mounts 里挂载点为 / 的那一行。而在这台机器上,chroot 容器里的 / 是:

rootfs / rootfs ro,seclabel,size=913216k,nr_inodes=228304 0 0

也就是说,探针眼里"系统盘"是一块 913MB 的 rootfs 内存盘(只读),它根本不认识手机真实的闪存分区(真实盘在宿主侧是 /dev/block/dm-0,被 bind 到了容器的 /data)。

这引出一个关键概念区别:

  • chroot:只改"路径前缀映射",挂载表没动,进程还是和宿主共用同一套挂载。底层世界没变,/ 依然是那块内存 rootfs。相当于给进程"戴了副贴纸眼镜"。
  • pivot_root:真正换掉挂载树的根(像 Docker/LXC 那样),新进程的 / 就是真实分区本身。相当于"把整个房间地板换掉"。

我们要让探针读到真实硬盘,必须用 pivot_root(真容器玩法),但 Alpine 是解压出来的普通目录不是独立文件系统,pivot 需要额外建挂载命名空间、bind 成挂载点再切换,复杂度高风险大——而为"显示个硬盘数字"去动已经跑稳的服务器不值得。

结论:磁盘 0 是 chroot 的预期表现,不影响拨测任务和额度发放(宝塔拨测考核的是网络质量,不是硬盘容量)。节点已激活、评分 99、额度正常,保持现状即可。

六、电池保养:做成 Magisk 模块,手机里可控

手机常年插电,电池一直满电+微热会加速衰减。本机内核恰好暴露了充电开关:

/sys/class/power_supply/battery/charging_enabled   # 写 0 断充,写 1 恢复

我把它做成了标准 Magisk 模块(面具 App 里能看到、能开关、能卸载):

  • 电量 ≥ 80% 自动停止充电;
  • 电量 ≤ 75% 恢复充电(形成 75–80% 浅充放循环);
  • 模块名 Battery 80% Charging Limiter,开机自启。

手机终端里直接打 batt 就能控制:

batt            # 显示状态
batt on         # 启用保养
batt off        # 停用并恢复充满
batt stop 85    # 改停止阈值为 85
batt resume 80  # 改恢复阈值为 80

七、成果与注意事项

最终这台红米 4A 实现了:

  • 24 小时在线的 Alpine Linux 微服务器(SSH 可达);
  • 宝塔拨测探针稳定运行、已激活、拿带宽额度;
  • 充电自动停在 80%,保护电池;
  • 全部开机自启,断电恢复后自动拉起。

注意事项:

  • SSH / 探针都建议仅局域网使用,公网暴露需额外做端口转发与安全加固;
  • 密码、激活码等凭据不要在公网明文留存;
  • chroot 方案的"磁盘 0"是架构现象,非故障,不必纠结;
  • 升级/换包后若充电节点路径变化,脚本会静默失效,按 charging_enabled 重新排查即可。

折腾快乐。一台几十块的旧手机,插上电就是一台不掉线的边缘节点。

    相关文件下载地址已下载13次
    66666

     您阅读这篇文章共花了:

    关于作者: YJ大表哥

    热门文章

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注