十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

旧手机变身低功耗Linux服务器:Redmi 4X刷Ubuntu Touch全指南

旧手机变身低功耗Linux服务器:Redmi 4X刷Ubuntu Touch全指南 很多人的抽屉里都躺着几台退役的旧手机Redmi 4X 就是特别典型的一台。这台 2017 年的百元机屏幕碎了、App 带不动但它的高通骁龙 425 芯片、2GB 内存和 4100mAh 大电池依然能打。今天我不讲怎么把它当老人机而是直接塞进 Ubuntu Touch——一个为手机准备的完整 Linux 系统——然后把它改造成一台 24 小时在线的低功耗 Linux 服务器。整个过程不需要高端设备只要你有一台电脑、一根数据线再愿意花一个下午折腾就能得到一个安静的、几乎不耗电的家庭小服务器。这篇文章适合想学习 Linux 运维、想给家里搭博客或文件同步服务、又不想花大钱买 NAS 的朋友。1. 旧手机为什么值得当服务器1.1 Redmi 4X 的硬件底子低功耗不等于低性能Redmi 4X 发布的年代虽然久远但它的规格放在“服务器”这个场景里反而挺合适。骁龙 425 是四核 A53 架构主频 1.4GHz性能谈不上强但胜在功耗极低待机时整机功耗可以压到 1W 上下就算跑服务满载也很难超过 5W。2GB 内存看着小跑 Nginx、Node.js、Python、Samba、定时备份这类轻量服务绰绰有余。16GB 或 32GB 的 eMMC 虽然读写速度一般但系统只占一部分剩余空间放网站和脚本也够用。最重要的是它支持 MicroSD 卡扩展存储不够时插一张卡就能解决问题。功耗这块我用 USB 功率计实测过接上充电器待机设备电压 5V、电流大约 0.4A 到 0.8A也就是 2W 到 4W。按 4W 算一天耗电 0.096 度一个月不到 3 度。就算你所在地区电价超过 1 元一度一个月电费也不到 3 元。相比动辄几十瓦的旧台式机以及一个月几十块的云服务器这个成本几乎可以忽略。性能不够对于“低功耗 Linux 服务器”这个定位Redmi 4X 不是用来跑数据库集群的而是用来稳定运行各种小工具的。1.2 Ubuntu Touch 到底是个什么系统Ubuntu Touch 是 Ubuntu 官方曾经推出的手机操作系统后来交给 UBports 社区继续维护。它和 Android 完全不同底层就是一个正统的 Linux 发行版使用 Linux 内核、systemd 风格的初始化过程、apt 包管理机制。刷上 Ubuntu Touch 之后这台 Redmi 4X 不再是“通过 App 模拟 Linux”而是开机就直接进入 Linux 用户空间。你可以正常使用 apt 安装软件包可以用 SSH 登录可以写 shell 脚本可以跑各种 daemon 服务。很多人会问那我直接在 Android 上装 Termux 不也能当服务器吗确实可以但 Termux 是在 Android 的应用沙箱里跑 Linux 环境很多系统级权限拿不到开机自启、端口绑定、后台保活都要跟系统省电策略斗争。Ubuntu Touch 则没有这些限制它天生就是 Linux后台进程不会被杀SSH 服务可以直接常驻cron / systemd 这种标准机制也能自然使用。这也正是我选择刷系统而不是装 App 的根本原因。2. 刷机前的准备工具、版本与概念2.1 硬件与工具清单动手之前先把工具备齐免得刷到一半到处找东西。电脑一台Windows、Linux、macOS 都可以建议用 Windows 教程最多。数据线必须靠谱最好用原装线劣质线在 fastboot 模式下极易断连断连刷到一半就很麻烦。手机要保证电量在 70% 以上刷机过程比较耗电电量太低有中途断电风险。另外准备一张 MicroSD 卡后续把服务器数据放上去更稳。软件方面需要下载小米官方解锁工具 Mi Unlock、TWRP Recovery 包、Ubuntu Touch 的社区移植包。Redmi 4X 的代号是 santoni在 GitHub 和 XDA 上可以找到对应的社区 build。需要注意Ubuntu Touch 官方支持的设备列表会变化Redmi 4X 这类老机型主要靠社区移植不同作者打包的方式有细微差别。下载时先看说明确认 zip 包是给 TWRP 直接刷入的还是需要配合特定底包千万不要下了不匹配的版本就动手。2.2 为什么要解锁 Bootloader什么是 TWRP手机出厂时 Bootloader 是锁定的它只允许启动小米官方签名的系统。解锁 Bootloader 相当于拆掉这层限制允许刷入第三方系统。如果不解锁后面所有操作都无从谈起。TWRP 则是一个第三方 Recovery相当于手机上的“救援系统”。普通 Recovery 只能做系统更新和恢复出厂TWRP 可以刷入任意 zip 包、备份分区、清除数据是刷机操作的核心工具。用生活化类比来说手机就像一套公寓Bootloader 是门口保安只放行有邀请函的人解锁就是给保安出示身份证让他允许你自己带朋友进门TWRP 则是一把万能钥匙可以打开屋子里各个房间按你的意愿改造装修。整个过程有风险但套路固定按顺序操作就不会太惊险。2.3 系统版本与固件选择刷 Ubuntu Touch 之前建议先把手机恢复到官方 MIUI 系统确认手机能正常开机。很多人的老手机是从 MIUI 8 或 MIUI 9 一路用过来的系统里可能残留各种碎片文件底包不干净容易导致刷机失败。最稳妥的做法是用小米官方工具刷入当前可用的 MIUI 稳定版开机进入桌面一次然后把开发者选项里的 OEM 解锁和 USB 调试都打开。这里还要提醒一句刷机会清除手机上的所有数据。照片、聊天记录、联系人提前备份到电脑或网盘。别以为自己只是试试玩等数据没了再后悔就晚了。另外如果手机已经在小黄鱼上买了二手记得先退出原账号、解除 FRP 验证否则解锁流程可能卡在账号校验环节。3. 手把手刷入 Ubuntu Touch从解锁到启动3.1 第一步申请并执行 Bootloader 解锁小米解锁需要先在官网申请权限。使用已登录小米账号的浏览器访问解锁申请页面提交申请后账号和手机绑定需要时间常见的是等待 7 天。不要试图跳过这一步这是小米的安全机制即使你是真的用来刷 Ubuntu Touch也必须等够时间。时间到了之后电脑上安装 Mi Unlock 工具和手机驱动。手机关机长按“音量下 电源键”进入 fastboot 模式用数据线连电脑。打开 Mi Unlock登录和小米手机相同的小米账号软件识别到设备后点击解锁。此时请注意屏幕上会再次警告“解锁后失去保修”确认后等待进度条走完。解锁成功的标志是提示语明确显示 Unlocked如果没有多数原因是驱动没装好或者账号不是申请时用的账号。解锁完成后手机会自动重启并进入清空数据的初始化界面。这个阶段不要慌按照提示重新设置系统再把 USB 调试打开准备下一步。3.2 第二步刷入 TWRP Recovery电脑上下载对应 santoni 的 TWRP 镜像文件通常是 img 格式。手机进入 fastboot 模式后执行fastboot devices fastboot flash recovery twrp-santoni-xxx.img第一条命令用于确认电脑识别到设备输出一串序列号就说明连接正常。第二条命令把 TWRP 写入 recovery 分区。刷完不要直接在 fastboot 里选择重启进系统因为很多手机会在重启时自动恢复到官方 Recovery。正确操作是刷完 recovery 后用电源键操作进入 Recovery 模式或者执行fastboot boot twrp-santoni-xxx.img这一条命令是临时从 TWRP 镜像启动不改写系统适合用来验证 TWRP 是否正常。进入 TWRP 后可以先做一次完整备份备份 System、Data、Boot 这几个关键分区存到 SD 卡上。一旦后面刷挂了还能还原回去。这一步很多人图省事跳过我建议不要跳备份是对自己的保护。3.3 第三步刷入 Ubuntu Touch 并首次启动把下载好的 Ubuntu Touch 移植包也就是 zip 文件放到手机 SD 卡或通过 adb sideload 推送。在 TWRP 主界面选择“Wipe”执行清除 Data、Cache、Dalvik 的操作。注意不要清除 SystemUbuntu Touch 的系统镜像要写到这个分区清掉后如果 zip 包没包含系统镜像会导致开不了机。清除完成后选择“Install”找到 zip 包并滑动确认刷入。如果是通过数据线刷入可以进入“Advanced → ADB Sideload”然后在电脑端执行adb sideload ubuntu-touch-santoni-xxx.zip刷入过程需要几分钟。完成后点击“Reboot System”第一次启动会比正常开机慢得多可能长达 5 到 10 分钟看起来像卡死其实是系统在初始化。如果超过 15 分钟还停在开机画面大概率是分区没清干净或者包与底包不兼容回到 TWRP 重新双清再刷一次。首次开机进入的是 Ubuntu Touch 的引导界面选择语言、连接 WiFi、设置密码。这里要说一下Ubuntu Touch 的中文支持在部分老版本上不完整如果界面显示乱码可以先选英文完成设置进入系统后再调整。3.4 第四步开启开发者模式与 SSHUbuntu Touch 默认不会暴露 SSH 服务需要在系统设置里手动打开。进入“System Settings → Developer Mode”打开开发者模式开关。有些版本还有“Allow SSH”之类的选项一并打开。完成后在终端应用里查看当前 IP 地址或者从路由器后台找到这台设备。接着在电脑上尝试连接ssh phablet192.168.1.100Ubuntu Touch 的默认用户就是 phablet初始密码一般也是 phablet具体以你刷入的移植包说明为准。登录成功后立刻执行passwd修改密码。这一步非常重要默认密码所有人都知道不改等于给家里局域网开门。4. 变身服务器部署常用服务4.1 系统可写与 apt 源处理刚刷好的 Ubuntu Touch系统分区默认是只读的这是出于安全考虑防止用户误改系统文件。但做服务器要安装软件就需要挂载为可写。最简单的方式是进入终端执行sudo touch这条命令可以进入 root 环境并允许临时以读写方式挂载系统分区。如果版本不支持可以手动执行sudo mount -o rw,remount /系统可写之后先用 apt 更新软件源sudo apt update sudo apt upgrade -y老版本 Ubuntu Touch 基于 Ubuntu 16.04官方源可能已经失效。遇到 apt update 报错 404 或连接失败把/etc/apt/sources.list里的地址改成old-releases.ubuntu.com/ports具体写法根据 CPU 架构来。这里还有一个坑OTA 系统更新会覆盖系统分区apt 装的软件可能被清掉。所以我的建议是凡是要长期跑的自写服务一律放在/home/phablet目录下用 crontab 或服务脚本自启系统更新后顶多重装依赖数据不会丢。4.2 先跑一个静态 Web 服务最简单的服务器应用就是托管静态网页。在/home/phablet/www目录下放一个index.html然后执行cd /home/phablet/www python3 -m http.server 8080浏览器访问http://手机IP:8080就能看到页面。这个命令适合临时测试但如果你想长期挂着还是装 Nginx 更专业。Ubuntu Touch 的源里有 Nginx安装后修改配置文件sudo apt install nginx sudo nano /etc/nginx/sites-available/default把root指向你的网站目录server { listen 8080; server_name _; root /home/phablet/www; index index.html; }改完重启sudo service nginx restart。从电脑上curl http://192.168.1.100:8080验证。这里用 8080 而不是 80是为了避免权限问题1024 以下端口通常需要 root 运行用 8080 更省事。4.3 跑一个 Python API 示例静态页面只是开胃菜真正让这台旧手机发挥价值的是 API 服务。我举一个 Node.js 的例子假设你已经下载了 armhf 架构的 Node.js 二进制解压到/home/phablet/node。在/home/phablet/app下创建server.jsconst http require(http); const os require(os); const server http.createServer((req, res) { res.writeHead(200, {Content-Type: application/json; charsetutf-8}); res.end(JSON.stringify({ status: ok, hostname: os.hostname(), uptime: os.uptime(), memory: os.totalmem() - os.freemem() })); }); server.listen(3000, 0.0.0.0, () { console.log(Server running on port 3000); });启动脚本start.sh#!/bin/bash export PATH/home/phablet/node/bin:$PATH node /home/phablet/app/server.js /home/phablet/app/server.log 21给脚本加执行权限chmod x start.sh然后手动跑一次确认能正常返回 JSON。之后设置开机自启(crontab -l 2/dev/null; echo reboot /home/phablet/app/start.sh) | crontab -重启后这个 API 就会自动运行。用 crontab 做自启的好处是不依赖 systemd也不会被 Ubuntu Touch 的 OTA 机制影响简单粗暴但管用。4.4 更多可以移植的服务玩法一台跑着 Ubuntu Touch 的 Redmi 4X 可以做的远比想象中多。装一个 Samba整个手机就能变成家庭文件共享盘我把/home/phablet/share共享给局域网里的电脑速度虽然只有几十 MB/s但存文档和电影完全够用。直接用这条命令sudo apt install samba配置/etc/samba/smb.conf添加一个共享目录。再配合 cron 定时任务每天把电脑上的重要文件夹 rsync 到手机 SD 卡上等于低成本做一套定时备份方案。还可以装 Aria2 做下载机、装 Mosquitto 跑 MQTT 做智能家居消息中枢。这些都是轻量服务Redmi 4X 完全扛得住。唯一要控制的是别同时跑太多重型应用2GB 内存是真不够折腾。5. 长期运行的运维细节5.1 功耗、散热与电池健康服务器是 24 小时开机的供电和散热是绕不开的问题。先说电源不要用那种开关电源的劣质充电头纹波大长期使用容易损坏硬件。建议用小米原装 5V2A 充电头或者品牌充电器输出稳定。数据线也用短一些的线阻小压降少。然后是电池。长期插电运行会让电池一直处于满电状态锂离子电池最怕的就是高温加高电压几个月后可能鼓包。我的处理方案有两类不想拆机的话就每周断电一次让设备用到 50% 电量再充电相当于给电池“透透气”也可以用内核层面的充电限制功能如果移植包支持的话把充电上限设为 80%。想长期无人值守更彻底的办法是把电池拆掉用可调电源直接给主板供电但这个对动手能力要求很高短路风险大新手千万不要贸然尝试。散热方面Redmi 4X 的金属后盖本身就是散热器。正常 4W 功耗温度不会太高但建议放在通风处不要压在被子或纸箱里。可以用sensors命令查看 CPU 温度如果长期超过 70 度就得考虑加个小散热底座或 USB 风扇。5.2 固定 IP、SSH 加固与远程访问服务器每次重启如果 IP 变了所有服务都会连不上。最省事的方法是在路由器后台给这台手机做“DHCP 静态分配”也就是根据 MAC 地址固定 IP。不想登录路由器的话也可以在系统里用 NetworkManager 手动设置。先查看网络连接名nmcli con show然后修改 WiFi 连接的 IPv4 配置nmcli con mod WifiName ipv4.addresses 192.168.1.222/24 ipv4.gateway 192.168.1.1 ipv4.dns 192.168.1.1 ipv4.method manual nmcli con up WifiName固定好 IP 后SSH 安全必须做。首先使用密钥登录代替密码在电脑上生成密钥对然后把公钥放到手机的~/.ssh/authorized_keys。同时修改 SSH 默认端口比如换成 2222编辑/etc/ssh/sshd_configPort 2222 PasswordAuthentication no PermitRootLogin no顺便装一个 fail2bansudo apt install fail2ban它可以自动封禁暴力破解 IP。如果你只需要局域网内访问做到这一步已经够了。要想在外网访问这台服务器个人建议优先考虑带公网 IP 的宽带配合路由器端口映射但别把 SSH 的 2222 端口直接暴露在公网至少加一层密钥认证最好再配合防火墙限制来源 IP。5.3 备份系统与数据自己折腾的系统说崩就崩尤其是老移植包更新一次就可能启动失败。所以备份是必须的。数据层面上/home/phablet目录才是核心定期用 cron 把目录压缩打包传到另一台电脑或网盘。命令示例tar -czf backup-home.tar.gz /home/phablet/ rsync -avz backup-home.tar.gz user192.168.1.10:/backup/系统层面TWRP 的完整备份虽然好用但每次备份都占大量空间。更轻量的方案是保存好你刷入的 Ubuntu Touch zip 包和 TWRP 镜像真出了问题按刷机流程重来一遍再恢复/home的数据即可。我的习惯是每调整一次服务就把改动记录下来每次刷机把新包放到电脑固定目录。这样即使手机彻底变砖半小时也能恢复如初。6. 常见问题与排查技巧实录6.1 刷机阶段的典型卡点现象可能原因解决方法fastboot 识别不到设备驱动没装好安装手机 USB 驱动换数据线或 USB 接口解锁工具提示等待时间账号绑定未满 7 天耐心等待无法跳过TWRP 刷入后重启变回官方 Recoveryfastboot 后自动回写刷完 recovery 不要直接重启用快捷键进 Recovery刷入 Ubuntu Touch 后卡在开机画面分区没清干净回 TWRP 重新 Wipe Data/Cache/Dalvik 再刷刷完后 WiFi 打不开移植包与底包不兼容先重刷官方 MIUI 底包再按顺序重刷这几类问题里最让我头疼的是“能进 fastboot 但刷完 TWRP 不生效”很多人以为刷失败了其实只是没有在刷完的瞬间进入 Recovery。解决方法是fastboot flash recovery后立即按住“音量上 电源键”强制重启全程不要放开音量键直到出现 TWRP 界面。6.2 运行阶段的常见故障现象可能原因解决方法SSH 连接被拒绝sshd 未启动或端口错误service ssh status确认端口和防火墙apt update 全部报错Ubuntu 16.04 源过期把源改成 old-releases.ubuntu.com/portsNginx 启动失败80 端口被占用或权限不足换 8080 端口或用 root 启动服务半夜自己停了Wi-Fi 断开导致网络重置写一个 ping 网关自动重连的脚本内存经常占满服务开得太多加 swap 文件或精简服务OTA 更新后 apt 安装的软件消失Ubuntu Touch 系统分区被覆盖数据放 /home重装依赖即可这里特别说一下 swap。2GB 内存跑几个服务偶尔会紧张在 SD 卡或 /home 下创建一个 1GB 的 swap 文件能缓解很多sudo fallocate -l 1G /home/phablet/swapfile sudo chmod 600 /home/phablet/swapfile sudo mkswap /home/phablet/swapfile sudo swapon /home/phablet/swapfile但要注意SD 卡反复读写寿命有限swap 能用但不推荐长期依赖治本还是砍掉不用的服务。6.3 几条独家避坑经验第一Ubuntu Touch 的终端 App 在 Wi-Fi 休眠时可能掉线但这不代表服务停了。我在排查服务时被误导过好几次明明 SSH 连不上一看路由器手机 IP 还在HTTP 服务其实正常。问题根源是省电策略把 Wi-Fi 休眠了需要在系统设置里把“Wi-Fi 休眠策略”改为从不或者在电源设置里关闭自动休眠。第二别把 Mi Unlock 工具和 TWRP 镜像放在中文路径下工具在解析路径时偶尔会出奇怪问题。同样adb sideload 的文件名尽量用纯英文包含特殊字符会刷不进去。第三Redmi 4X 的麦克风和屏幕在 Ubuntu Touch 下未必完全可用这很正常。毕竟它是老移植包其他驱动也有不完善的鼠标、键盘通过 OTG 接入通常可用但别指望当主力手机用。我的定位就是无头服务器能开机、能联网、能跑服务已经超过预期了。7. 一点个人体会这套方案我前前后后折腾过好几轮刷坏过三次系统最严重的一次是分区表被搞乱原本以为彻底变砖后来重新刷回官方 MIUI 才发现还能救。踩过这些坑之后我的体会是旧手机当服务器这件事难点不在刷机而在你能否接受它的“老年性能”并在服务选型上保持克制。跑一个 Nginx、一个 Node API、一个 SambaRedmi 4X 完全不虚但如果你什么都想塞进去它就会频繁卡死。所谓低功耗不只是省电也是让你学会精简。如果你手里恰好有一台 Redmi 4X或者类似的旧安卓机别急着扔。把它翻出来刷一个 Linux接上电源塞进弱电箱它就能替你跑博客、管备份、盯智能家居。这个项目练手价值很高刷机、系统配置、网络排查、服务部署全流程走一遍你对 Linux 的理解会比看十篇教程都深。遇到问题也别慌老设备的社区资料多查一查、问一问折腾本身就是乐趣。
返回列表