一、原理
只读文件系统(Read-Only File System)是指在操作系统中,文件系统被挂载为只允许读取而不允许写入的模式。这意味着无法对文件系统进行写入操作,包括创建、修改和删除文件等。
只读文件系统在某些情况下非常有用,例如:
- 系统安全性:通过将文件系统设置为只读,可以防止未经授权的修改、删除或篡改操作。这对于保护关键系统文件和配置非常重要,减少了受到恶意软件或攻击的风险。
- 数据完整性:只读文件系统可以防止数据意外被修改或删除。这在一些特殊的应用场景中非常重要,例如嵌入式设备、系统映像等,确保数据始终处于一种不可变的状态。
- 故障恢复:当系统发生故障时,只读文件系统可以为数据恢复提供额外的保护层。由于文件系统只能读取,因此无法在故障期间进一步破坏数据。
- 共享环境:在共享环境中使用只读文件系统可以防止多个用户之间意外地修改彼此的文件。这对于公共计算机或网络存储设备非常有用。
需注意,将文件系统设置为只读模式会限制对文件系统的写入操作,并可能导致某些功能无法正常使用。因此,在执行此操作之前,请确保你了解其影响,并在必要时备份重要数据。
1、tmpfs
tmpfs 是一种特殊的文件系统,它存在于计算机的内存中,也就是说它将部分内存作为虚拟磁盘来使用。tmpfs 允许你在内存中创建一个临时文件系统,通常用于存储临时数据、日志文件、缓存等。
tmpfs 的大小可以根据需要动态调整。它可以自动增长或缩小以适应存储在其中的数据量。但是请注意,tmpfs 文件系统的大小受限于系统可用的内存容量。
尽管 tmpfs 存储在内存中,但其数据在计算机重启后不会保留。所有数据都是临时的,当计算机重新启动时,tmpfs 中的文件和目录将被清空。因此,tmpfs 不适合用于持久性存储,而更适合存储临时数据。
2、fstab
在 Linux 中,fstab(文件系统表)是一个配置文件,用于定义系统引导时要挂载的文件系统。
fstab 文件通常位于 /etc/fstab 路径下,它包含了文件系统与挂载点之间的映射关系。
每一行定义了一个文件系统的挂载信息,它由几个字段组成,各字段之间使用空格或制表符分隔。
通常,fstab 文件行的格式如下:
<文件系统> <挂载点> <文件系统类型> <挂载选项> <备份频率> <检查顺序>
<文件系统>:表示要挂载的设备或其它文件系统的标识符,例如 /dev/sda1 或 UUID=XXXX-XXXX。
<挂载点>:表示要将文件系统挂载到的目录路径。
<文件系统类型>:表示文件系统的类型,例如 ext4、xfs、ntfs 等。
<挂载选项>:指定挂载的选项,例如读写权限、自动挂载等。常见的选项包括 "rw"(读写)、"ro"(只读)、"auto"(自动挂载)、"noauto"(不自动挂载)等。
<备份频率>:在备份时指定该文件系统的备份频率,一般使用 0 或 1 表示不备份或每次都备份。
<检查顺序>:指定在系统启动时检查该文件系统的顺序,一般使用 0 表示不检查。
二、操作步骤
系统安装完成之后,在fstab中将文件系统挂载为只读,因系统启动需对/var、/tmp中的数据进行读写,故将tmp、root及var目录挂载为tmpfs并设置为读写。
原fatab文件如下:

- 修改除swap设备之外的options选项,增加ro属性并增加文件系统自检。
- 添加三条新挂载/tmp,/var及/root目录挂载成tmpfs格式,并设定默认大小。
- 修改完成后重启系统。
- 标红的内容为需要修改的内容。
/dev/mapper/kylin-root / xfs ro,defaults 1 1
UUID=c9c7588a-e4fb-4e8b-93f0-b9e70dd6ec88 /boot xfs ro,defaults 1 2
/dev/mapper/kylin-swap swap swap defaults 0 0
tmpfs /tmp tmpfs defaults,size=50m 0 0
tmpfs /var tmpfs defaults,size=300m 0 0
tmpfs /root tmpfs defaults,size=300m 0 0

三、注意事项
1、只读文件系统下,对数据更改并保存应该如何实现
此时需要将文件系统挂载为读写。
将只读文件系统,比如将根目录挂载为读写:
bash
mount -o remount,rw /
还原根目录为只读:
bash
mount -o remount,ro /

2、数据分区
若需要对某个分区进行读写操作,可在安装系统时提前分配一个数据分区用来保存数据(在此处使用的是home分区,此分区不能写到fstab中去,需待系统启动完毕手动挂载或者开启服务自动挂载)。
四、其他说明
1、Kdump设置日志存储位置设置
- 配置文件中默认存储在/var/crash,手动修改/etc/kdump.conf文件中的path参数,/data分区是读写分区,所以可将/var/crash改为/data/crash。

- 修改/etc/sysconfig/kdump的BOOTDIR改为/home/boot
- 拷贝/boot/下的vmlinuz-xxx到/home目录
- 重新加载配置

2、终端显示bash的说明
在桌面中打开终端,显示的是bash,这个在使用上来说不影响。如果需要显示root,可以在终端中执行 source /etc/bashrc
3、内存占用说明
因为不会数据落盘,文件全部存储在内存,内存占用情况
4、Vnc服务说明
由于/root目录为tmpfs,所以不会保存/root/.vnc/目录下的文件,每次开机之后需要从/opt/vnc/目录把xstartup和passwd拷贝到/root/.vnc/下,将指令写到rc.local中:
bash
cp /opt/vnc/* /root/.vnc/
systemctl restart vncserver@:2.service
五、测试方法
需要在第二章节"操作步骤"前进行ltp编译。将ltp压缩文件拷贝至opt目录,需要安装gcc,需要配源
bash
yum install gcc
解压工具:
bash
unzip ltp-full-20180926.zip
编译安装:
bash
cd ltp-20180926/
./configure
make
make install
执行章节二"操作步骤"重启后,执行ltp测试
bash
cd /opt/ltp/testscripts
./ltpstress.sh -t 24
ltp过程中对机器进行强制断电处理,开机,测试系统是否能正常启动。
测试多次ltp过程中强制断电,每次断电之后系统能正常启动。