Ubuntu构建只读文件系统

2024-09-07 12:36

本文主要是介绍Ubuntu构建只读文件系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文介绍Ubuntu构建只读文件系统。

嵌入式系统使用过程中,有时会涉及到非法关机(比如直接关机,或意外断电),这可能造成文件系统损坏,为了提高系统的可靠性,通常将根文件系统设置为只读,将其他需要读写的数据放置在另外开辟的一个磁盘分区,本文针对嵌入式系统常用的Ubuntu操作系统构建只读文件系统。

1.基本原理

1)OverlayFS简介

OverlayFS(Overlay File System)是一种联合文件系统,它通过叠加多个目录形成一个单一的文件系统试图,其结构如下图。

其中,

a)lowerdir:下层目录,此目录为只读的。

b)upperdir:上层目录,此目录为可读写的。

c)merged:合并目录,此目录为合并上层目录和下层目录叠加形成的统一视图。

2)Overlayroot操作原理

Overlayroot是软件安装包,它使用了上述OverlayFS,它将根文件系统当作OverlayFS的下层目录,换句话说,下层目录是根文件系统的只读挂载,但是系统在运行过程中,有些文件又想要读写,就将他们挂载在上层目录,比如tmpfs,sysfs(驱动操作)及另外划分出来的磁盘分区。

系统允许用户在根文件系统(也就是下层目录)上做写操作,用户也看的见这些更改,但这些更改是临时的,不会实际写入磁盘,重启后更改全部丢失,不会影响到根文件系统。而挂载到上层目录,对他们进行更改操作,这些更改可能会在重新启动后持续存在,如对另外划分出来的磁盘分区进行写操作,重启后更改仍然存在,而对tmpfs进行写操作,重启后会丢失。

2.操作方法

1)安装Overlayroot

输入如下命令:

sudo apt-get install overlayroot

2)配置Overlayroot

作为对比,配置前,我们可以查看下系统挂载情况,输入如下命令:

mount

结果如下:

可以看出“/dev/sda1”为可读写的。

编辑“/etc/overlayroot.conf",输入如下命令:

sudo gedit /etc/overlayroot.conf

可以看出,默认配置为:

overlayroot="";

修改为:

overlayroot="tmpfs:swap=0,recurse=0"

重启后,查看挂载情况:

可以看出“/dev/sda1”已经变为只读了。

3)修改超时时间

重启时,系统会进入GRUB界面,如下图。

默认等待时间为30s,若需要修改时间,可修改“/boot/grub/grub.cfg”将“timeout”修改为想要的值(需要暂时禁用Overlayroot)。如下图。

4)挂载读写分区

若系统需要保存数据,如日志或数据库等,可重新划分一个磁盘分区,将此分区挂载为可读写的,并修改“/etc/fstab”进行自动挂载,在此不再赘述。

5)禁止Overlayroot

若需要修改根文件系统相关文件,需要禁止Overlayroot,可在GRUB界面,按“e”键,修改传递内核参数,添加“overlayroot=disable”,如下图。

注意以上操作只是临时禁止Overlayroot,重启后失效。

若想永久禁止Overlayroot,按上述操作进入系统后,重新编辑“/etc/overlayroot.conf",修改为默认配置:

overlayroot="";

总结,本文介绍了Ubuntu构建只读文件系统。

这篇关于Ubuntu构建只读文件系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145074

相关文章

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3