让 Ubuntu Touch 20.04 的系统分区可写入

近日,我尝试把Ubuntu Touch装入手机,以便取代x86服务器(家用时噪音太大)。刷机过程很顺利,电脑下载UBports Installer 汉化版,一路按提示操作即可,比刷安卓简单多了。

按网上现有教程,换了国内镜像源,更新了apt,装好nginx、Alist、AdGuard Home、AList等软件后,发现每次重启手机后,新装的这些软件的服务均未启动。ssh或者adb shell登陆上去后,手动启动各个服务又恢复正常。经过若干天排查后,终于找出问题原因。

原来是system分区为只读,导致开机时systemd试图启动这些服务时报错。而我sshadb登陆后又总是习惯先执行sudo mount -o remount,rw /,以可读写权限重新挂载system分区,所以才一直没找到造成问题的真正原因,浪费了好几天。

经多方查找,官方曾经提供解除只读的方法,sudo touch /userdata/.writable_image,实测发现对Ubuntu 20.4失效。后来在/etc/fatab文件中第一行发现/dev/root / rootfs defaults,ro 0 0,尝试将ro改为rw,重启后发现被复原。

在官方论坛找到一篇帖子证实了/etc/fatab确实会在系统启动时被覆盖。fstab getting overwritten?

绞尽脑汁在官方git库中各种搜索后,在<boot 分区>/ramdisk/scripts/halium 找到一行shell脚本: echo "/dev/root / rootfs defaults,ro 0 0" >>$FSTAB

最终解决方案为:

  • 打开刷机时用的电脑
  • 找到%APPDATA%\Roaming\ubports\lavender\Ubuntu Touch\boot-xxxxxxx.tar.xz并解压出boot.img
  • 解包boot.img,将其中/ramdisk/scripts/halium里第320行左右,找到echo "/dev/root / rootfs defaults,ro 0 0" >>$FSTAB,将其中的ro改为rw,保存后重新打包
  • 手机重启到fastboot模式(重启前按住音量-不放,直到完全黑屏只亮背光)(注意,刷入Ubuntu Toch会去掉fastboot的图片(93976f283b08c951af37eaf379f903e0.jpg (800×517)),导致此处黑屏,但功能正常)
  • fastboot重刷boot分区fastboot flash boot /your/path/to/new/boot.img

经过以上处理,Ubuntu Touch系统分区(system)只读的特性被彻底抹除,日常使用体验(只用CLI、不用GUI)与Ubuntu桌面版别无二致。

总结近段日子,发现用手机刷Ubuntu Touch代替x86服务器有两大障碍,一是system分区太小,装不了多少软件。好在网上有linux给磁盘重新分区的教程,帮我把分区扩大为12G。第二大障碍每次重启系统都回复只读状态。经过全网搜索,未发现其他有效的解决方案,故特作此文记录,以备日后查询。

相关推荐
Nuanyt4 小时前
Linux系统的 Shell 常见指令和常见知识点(以bash为主)
linux·运维·chrome·bash
程序员老陆5 小时前
FFmpeg 硬解在 Linux 上:从“能跑”到“跑满 GPU”的实战笔记
linux·笔记·ffmpeg
星恒随风5 小时前
Linux 权限详解:从 rwx、chmod 到 umask、目录权限与粘滞位
linux·运维·服务器·笔记·学习
拳里剑气5 小时前
Linux:进程间通信
linux·运维·数据库·进程
lsh曙光5 小时前
防火墙-iptables
linux
阳光九叶草LXGZXJ5 小时前
达梦数据库-报错-12-[-7184]:对象定义[XXX]被修改,版本检查失败
linux·运维·服务器·数据库·sql·学习
JXCY13S5055 小时前
集群及lvs基础知识
运维·服务器
小此方5 小时前
Re:Linux系统篇(四十九)线程篇 · 二:为什么现代操作系统选择分页式存储?分页如何解决物理内存碎片?分页结构如何演化到页表、页目录、MMU?
linux·运维·驱动开发
Huangjin007_6 小时前
【Linux 系统篇(十一)】基础开发工具(六) —— 版本控制器 Git
linux·运维·git
j7~6 小时前
【Linux】二十六.线程篇三《Linux多线程编程:线程控制、线程ID以及进程地址空间分布、线程局部存储__thread以及clone系统调用》---详解
linux·运维·服务器·开发语言·c++·多线程编辑·线程的控制