问题来源
有些电脑在安装完操作系统和应用软件后,功能正常很稳定,很长时间是不需要作改动的,也不关心上面产生的日志之类的无用数据。
- 但有时就是手贱一不小心删了、改了东西,重启一下,机器启动不了了
- 电脑频繁被直接断电开关机,时间不长就再也启动不了,甚至硬盘损坏了
如果直接把根分区”/“在/etc/fstab里给干成ro了,那么大概率各种问题就出现了,甚至无法启动(有虚拟机的可以做个快照,来修改试验一下报告一下更新进来),所以才有了下面这些方法。
极简懒人版方法1:
第一想法是虚拟机,给虚拟机打个快照,有问题随时恢复就可以了。
代价就是多了一层虚拟机,消耗内存和磁盘,速度也慢了,有些场景不适用。
极简懒人版方法2:
虚拟机的替代思路,容器。docker提交一下镜像,随时可以恢复也是极好的。
问题是自从docker被X了以后,拉镜像不是那么方便了。(有空写一下怎么快速解决)。
同样的,此方法也有些场景不适用,我们还是要“原生方案”,不能对现有Linux系统有任何变动。
终极解决思路:
使用overlayroot,具体原理可以查看网上技术资源的详细介绍,简单一句话说就是:
它可以实现把原来的“/”根分区磁盘变成“ro”只读文件系统(原来所有数据不受影响地工作),但又还给你一个可正常读写的“/”根分区(原来所有数据还是不受影响地工作)。
有点绕口但是就是原来系统啥也没变能正常工作,你进系统了依然可以正常安装软件删除文件改东西,但是,只要一重启,就恢复原样(你开始设置的时候)。
有点像以前网吧电脑的一键还原系统,只读化改造好的机器随便造——无论是软件层面还是硬件层面的,重启即恢复。
唯一缺点:
它是使用内存来提供上述可“读写”的空间的,最大占用一半内存(按需动态占用)。
如果你的系统运行期间会产生大量大文件(超过内存一半大小),那么这个方法可能不适合你,你需要第二块硬盘或者加大内存,具体方法可留言讨论。
操作步骤: (以ubuntu24为例)
1 | #sudo apt-get install overlayroot |
如果需要恢复可读写,因为那个配置文件现在也是只读的了(你的修改保存只是在内存里临时模拟的),需要:
1 | #overlayroot-chroot |
重要提醒
overlayroot功能与docker会冲突,表现现象为修改为只读系统启动后,systemctl start docker会出错无法启用。
原因是,docker也使用了与overlayroot一样底层原理的overlay文件系统。
解决办法:
修改docker的存储系统为vfs,即修改
/etc/docker/daemon.json
1 | { |
重启docker服务systemctl restart docker即可。
该修改不会丢失原来以overylay存储方法下已有的Docker镜像和运行的实例,但不能识别(docker ps为空),删除上述配置重启docker服务旧数据还在)。
所以,如果想改为只读的Linux上有docker实例要运行,需要先改成vfs存储,安装配置好所有容器后满足需求后,再做上述修改。