让 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。第二大障碍每次重启系统都回复只读状态。经过全网搜索,未发现其他有效的解决方案,故特作此文记录,以备日后查询。

相关推荐
新时代牛马1 小时前
嵌入式网络完整篇:从LwIP/以太网驱动到 Linux netdev 与排障
linux·网络·php
猿与禅1 小时前
Linux(Ubuntu)入门到实战:系统管理、常用命令与权限体系完整指南
linux·ubuntu·apt·进程管理·系统运维·用户权限·vi/vim
前端世界2 小时前
Linux服务器实战:NTP时间同步、SELinux权限与rsyslog日志管理,一次搞懂三大运维问题
linux·运维·服务器
Android系统攻城狮2 小时前
Linux Gstreamer深度解析之gst_audio_converter_new调用流程与实战(二十)
linux·运维·服务器·gstreamer音视频·音视频进阶
captain3762 小时前
▲网络原理(2)-TCP
java·服务器·网络·tcp/ip·java-ee
言乐63 小时前
Python加速器4跨境网络加速器
运维·服务器·开发语言·网络·python
H_oRIZoN_7 小时前
Linux入门DAY41(51 单片机 串口与通信协议)
linux·运维·单片机
GeW8 小时前
RHCE备考别瞎学!按这个计划走,30天提高通过率,快速拿证
linux
Escalating_xu9 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
傲世仙尊9 小时前
System V 进程间通信详解:共享内存、消息队列与信号量(CSDN博客)
linux·开发语言·c++