问题来源

有些电脑在安装完操作系统和应用软件后,功能正常很稳定,很长时间是不需要作改动的,也不关心上面产生的日志之类的无用数据。

  • 但有时就是手贱一不小心删了、改了东西,重启一下,机器启动不了了
  • 电脑频繁被直接断电开关机,时间不长就再也启动不了,甚至硬盘损坏了

如果直接把根分区”/“在/etc/fstab里给干成ro了,那么大概率各种问题就出现了,甚至无法启动(有虚拟机的可以做个快照,来修改试验一下报告一下更新进来),所以才有了下面这些方法。

极简懒人版方法1:

第一想法是虚拟机,给虚拟机打个快照,有问题随时恢复就可以了。
代价就是多了一层虚拟机,消耗内存和磁盘,速度也慢了,有些场景不适用。

极简懒人版方法2:

虚拟机的替代思路,容器。docker提交一下镜像,随时可以恢复也是极好的。
问题是自从docker被X了以后,拉镜像不是那么方便了。(有空写一下怎么快速解决)。
同样的,此方法也有些场景不适用,我们还是要“原生方案”,不能对现有Linux系统有任何变动。

终极解决思路:

使用overlayroot,具体原理可以查看网上技术资源的详细介绍,简单一句话说就是:

它可以实现把原来的“/”根分区磁盘变成“ro”只读文件系统(原来所有数据不受影响地工作),但又还给你一个可正常读写的“/”根分区(原来所有数据还是不受影响地工作)。
有点绕口但是就是原来系统啥也没变能正常工作,你进系统了依然可以正常安装软件删除文件改东西,但是,只要一重启,就恢复原样(你开始设置的时候)。
有点像以前网吧电脑的一键还原系统,只读化改造好的机器随便造——无论是软件层面还是硬件层面的,重启即恢复。
唯一缺点:
它是使用内存来提供上述可“读写”的空间的,最大占用一半内存(按需动态占用)。
如果你的系统运行期间会产生大量大文件(超过内存一半大小),那么这个方法可能不适合你,你需要第二块硬盘或者加大内存,具体方法可留言讨论。

操作步骤: (以ubuntu24为例)

1
2
3
4
5
6
#sudo apt-get install overlayroot 
修改/etc/overlayroot.conf配置文件原始文件内容:
overlayroot=""

overlayroot="tmpfs:swap=1,recurse=0"
#reboot !重启电脑即可进入只读系统状态。

如果需要恢复可读写,因为那个配置文件现在也是只读的了(你的修改保存只是在内存里临时模拟的),需要:

1
2
3
4
#overlayroot-chroot
#/ !进入chroot环境,然后修改/etc/overlayroot.conf为
overlayroot=""
#exit !退出chroot环境,重启电脑即恢复原来可读写状态。

重要提醒

overlayroot功能与docker会冲突,表现现象为修改为只读系统启动后,systemctl start docker会出错无法启用。
原因是,docker也使用了与overlayroot一样底层原理的overlay文件系统。
解决办法:

修改docker的存储系统为vfs,即修改
/etc/docker/daemon.json

1
2
3
{
"storage-driver": "vfs"
}

重启docker服务systemctl restart docker即可。
该修改不会丢失原来以overylay存储方法下已有的Docker镜像和运行的实例,但不能识别(docker ps为空),删除上述配置重启docker服务旧数据还在)。
所以,如果想改为只读的Linux上有docker实例要运行,需要先改成vfs存储,安装配置好所有容器后满足需求后,再做上述修改。