更新、安全和回到 Android

设备怎么保持最新,为什么一次启动失败不会把你困住,以及在 Android 和 Linux 之间来回的所有方法。

更新

设备可以直接从发布版本更新自己,不需要电脑。它会在开机时和之后每 6 小时检查一次新版本,并在登录时和 mu300-toolkit 里提醒你,但绝不会自己安装。

sudo mu300-update check           # 当前版本和最新发布
sudo mu300-update apply           # 系统、内核和启动镜像;然后重启
sudo reboot

mu300-toolkit 里的 System > Software update 也能做同样的事。过程是这样的:

  1. 先下载并校验所有文件;全部到齐之前什么都不改。
  2. 新系统解压在旧系统旁边,到最后才换上,所以下载中断也不会留下一个更新到一半的系统。
  3. 你的设置、用户、/usr/local、从你设备上取来的 Wi-Fi 和基带文件,以及已装的扩展都会带过去。VPN 模块(核心和引擎作为一组)会更新到它的最新版本。
  4. 内核和启动镜像也一起更新。新内核的头几次启动照常按失败次数计算,所以起不来的内核会让设备自己回到 Android。

换内核也是同样的方式:sudo mu300-update kernel 6.18(或 5.4、7.2),然后重启。见选择内核。

从 v2026.09.27 或更早的版本更新

先取得新的更新程序,再更新;两步都在刚重启之后做(旧的启动镜像在安静几分钟后可能丢失移动数据):

sudo curl -fL https://github.com/dikeckaan/mu300-linux/releases/latest/download/mu300-update -o /opt/mu300/bin/mu300-update
sudo mu300-update apply

在 OpenWrt 上,以 root 身份:

wget -O /opt/mu300/bin/mu300-update https://github.com/dikeckaan/mu300-linux/releases/latest/download/mu300-update
mu300-update apply

用电脑也行:再运行一次安装程序,选 update。它会重装系统、写入新的启动镜像,并保留你的设置和数据。

你自己装的软件包(apk add、apt install)不在发布版的镜像里。更新会把它们列出来,把它们的 OpenWrt 设置先放到一边(免得程序不在了设置还在起作用),新系统在第一次开机联网后再把它们装回来。mu300-user-packages status 显示哪些回来了(控制面板里:系统 → 更新后的软件包);mu300-update apply --no-reinstall 跳过这一步。Ubuntu 上你添加的 apt 源(PPA)也会保留。从 v2026.10.20 起。

装了网页面板扩展的 Ubuntu 上,新镜像里没有 Cockpit:更新后的第一次开机会在后台把它装回来(扩展自带副本就用副本,否则联网后从 Ubuntu 的软件源装);mu300-panel status 会说明进度。

回滚

上一个版本会以 <os>.old 的形式保留,直到你清理掉;上一个启动镜像也会保留。

sudo mu300-update rollback        # 回到上一个系统
sudo mu300-update rollback-boot   # 回到上一个内核和启动镜像
sudo mu300-update clean           # 删掉保留的旧版本

安全网

把它想成一顶会自己打开的降落伞。设备每启动一次 Linux,就用掉一次机会。USB 网络和 SSH 起来大约 30 秒后,Linux 会确认这次启动成功,机会全部恢复。如果一次启动没走到那一步(断电、电池耗尽、Linux 卡住),那次机会就算用掉了。机会用完,下一次启动就是 Android。

设备启动时发生什么 设备以试用方式启动 Linux。Linux 启动成功后,这次启动被确认,尝试次数重新补满。如果没有成功,就用掉一次;次数用完时,设备会自动启动 Android。 开机 引导程序启动 Linux, 并用掉一次尝试 Linux 大约一分钟内 启动成功了吗? USB 网络和 SSH 是 启动已确认: 尝试次数全部恢复 你在使用 Linux 否 未确认: 少一次尝试 还有次数吗? 是 下次启动 否 自动启动 Android 尝试次数:1 到 6(默认 5)。 锁定的 Linux 不会自动回到 Android。
  • 次数在安装时选,1 到 6,默认 5;6 是引导程序计数器能存下的最大值。
  • 如果 Linux 根本起不来,设备也会自己回到 Android。
  • 锁定 Linux 就是故意把降落伞关掉:设备永远不会自己回到 Android,失败多少次都不会,系统起不来也不会(这时它会在 USB 上等着,提供一个 telnet shell,在里面运行 sh /run/to-android 就能去 Android)。唯一的例外是 mu300-update 装的新内核,它的头几次启动仍按通常的次数计算。控制面板首页上也有“锁定 Linux”(Lock Linux)。
sudo mu300-next-boot attempts 3  # 回到 Android 前允许失败几次,1 到 6
sudo mu300-next-boot lock        # 无论如何都留在 Linux
sudo mu300-next-boot unlock      # 恢复按次数回退
sudo mu300-next-boot status

去 Android,再回来

从 Linux 到 Android

sudo mu300-next-boot android
sudo reboot

或者用控制面板上的“切换到 Android”(Switch to Android)。手边没有电脑、也登录不了:在开机过程中断电,连续断的次数等于你设的失败次数(见下文)。

从 Android 到 Linux

su -c mu300-linux                # 在 Android 里:重启进入 Linux
su -c 'mu300-linux status'       # 哪个系统在哪个槽位

或者用 Magisk 应用里“MU300 Linux”模块的操作(Action)按钮。这个模块是安装程序装上的;它只写入和安装程序相同的那 32 个字节的 misc。

切换到 Android 之前,如果还设着频段或小区锁定,控制面板会提醒你,因为基带把它们存在自己的存储里,Android 也会照用。网络锁定页面上的“全部重置为自动”(Reset all to automatic)(unisoc-modem lock reset)可以清除它们。

在几个 Linux 系统之间切换:sudo mu300-os ubuntu、openwrt 或 openwrt-luci,然后重启。

卸载

让设备回到 Android,然后在电脑上运行:

./uninstall.sh                # macOS / Linux
.\uninstall.ps1               # Windows(PowerShell)
uninstall.cmd                 # Windows(cmd)

它会让 Android 重新成为启动系统,恢复第二个启动分区,并擦除 Linux 文件系统。你的 Android 数据不受影响。如果开始时设备正在运行 Linux,它会先提出帮你重启进 Android。擦除的彻底程度由你选:

选项作用
secure(默认)覆写整个 Linux 区域,并检查它确实清空了。需要几分钟。
quick只擦除文件系统头部;在空间被再次使用之前,文件在闪存上仍然可读。
keep不动 Linux 文件系统;它只是再也不会启动。

SD 卡上的 Linux 文件系统会单独问一次:erase(默认,覆写前 64 MiB)或 keep。装着其他文件系统的卡绝不会被碰。如果你在 32 GB 版本上缩小过 userdata,它会提出把空间还回去;这一项默认关闭,会问两次,而且会再次清空 Android 的数据。

忘记密码

不用登录也能脱身。(当 Linux 处于锁定状态时,开机过程中拔电不会让设备回到 Android;这种情况下 README 指向第 2 步,也就是用电脑的办法。)

  1. 回到 Android:设备通电约十秒后拔掉电源,再插上。连续这样做,次数等于你设的失败次数(默认 5)。设备看到这些没完成的启动,就会自己回到 Android。
  2. 设置新密码:在电脑上操作,不用启动 Linux,所有数据都保留:
    tools/reset-password.sh            # ubuntu、openwrt 或两者
  3. 再启动 Linux:在 Android 里运行 su -c mu300-linux,或者如果 Linux 是默认系统,直接重启。

再运行一次安装程序并选 update,也会把密码设成你输入的那个。