![在 RAM 中构建具有可写层的只读 Linux 系统](https://linux22.com/image/47022/%E5%9C%A8%20RAM%20%E4%B8%AD%E6%9E%84%E5%BB%BA%E5%85%B7%E6%9C%89%E5%8F%AF%E5%86%99%E5%B1%82%E7%9A%84%E5%8F%AA%E8%AF%BB%20Linux%20%E7%B3%BB%E7%BB%9F.png)
我需要将 RHEL 6.6/7.0 启动为只读模式,并且仅在 RAM 中具有可写层。我相信这与 Live CD 的工作原理类似,文件系统是只读的,但其某些部分在加载到 RAM 后是可写的。在这里,写入文件系统的任何更改都会在重新启动时丢失(因为只有 RAM 在可写层中更新)。
在浏览网络时,我还没有找到在没有帮助工具的情况下配置我自己的“live CD”的指南,以便我可以在现有安装的系统中模拟此过程。
有谁知道我可以在哪里获得一些资源来构建我自己的 live CD 或制作仅在 RAM 中具有可写层的只读 Linux?
答案1
好的,所以我在 SD 卡上确实有一个工作只读系统,允许将读/写开关设置为只读模式。我要回答我自己的问题,因为我有一种感觉,我会再次在这里寻找步骤,希望这能帮助其他人。 在 Red Hat Enterprise Linux 6.6 系统
上将各个目录设置/etc/fstab
为只读时,我发现了该文件/etc/sysconfig/readonly-root
.这激起了我对该文件的用途以及与之相关的任何辅助信息的兴趣。简而言之,该文件包含一行“ READONLY=no
”。更改此行会自动将大部分根文件系统加载为只读,同时保留对各个目录的必要写入操作(目录和文件作为 tmpfs 加载)。我必须做的唯一更改是通过目录将/home
、/root
和其他一些目录设置为可写/etc/rwtab.d
,并修改 /etc/fstab 以将根文件系统加载为只读(将 root 的“ defaults
”更改为“ ro
”)。一旦我READONLY=yes
在文件中设置了“” /etc/sysconfig/readonly-root
,并通过设置了必要的可写目录/etc/rwtab.d
以及fstab
更改,我就能够让系统以只读方式加载,但将可写目录加载到RAM中。
有关更多信息,这些是我使用的资源:
- http://www.redhat.com/archives/rhl-devel-list/2006-April/msg01045.html(指定如何在
/etc/rwtab.d/
目录中创建文件以将文件和目录加载为可写) - http://fedoraproject.org/wiki/StatelessLinux(有关只读根文件和无状态 Linux 的更多信息)
- http://warewolf.github.io/blog/2013/10/12/setting-up-a-read-only-rootfs-fedora-box/
- 当然,浏览显示
/etc/rc.d/rc.sysinit
文件和文件夹是如何以只读方式安装的。该readonly-root
文件在 中进行解析,对于那些正在寻找如何在 init 进程中使用的rc.sysinit
人来说。readonly-root
另外,我在 Red Hat Enterprise Linux 7.0 上进行了快速验证,该文件仍然存在并且可以工作。我的测试环境是虚拟机中的CentOS 6.6和7.0以及VME单板计算机上的RHEL 6.6和7.0。
注意:一旦根为只读,则无法对根系统进行任何更改。例如,您无法使用 yum 安装软件包并让它们在重新启动后保留。因此,为了打破只读根,我添加了一条删除 rhgb 和 Quiet 的 grub 行(这仅用于调试启动问题,如果需要,您可以保留它们),并添加“ init=/bin/bash
”。这使我可以进入终端。到达终端后,我输入“ mount - / -oremount,rw
”以使系统可写。一旦可写,我修改(使用vim
)/etc/sysconfig/readonly-root
为“ READONLY=no
”并重新启动系统。这使我可以通过关闭只读来对系统进行维护。如果你和我一样使用的是SD卡,那么需要将SD卡上的读/写开关设置为可写。
答案2
是的,这就像 Live CD 的作用。这是使用一种特殊的文件系统驱动程序来完成的,该驱动程序旨在将多个文件系统相互叠加 - 在本例中,是带有 RAM 磁盘的只读文件系统。
覆盖文件系统有很多不同的选择 - 尝试搜索 UnionFS、aufs 和 overlayfs 以了解您的选择是什么,以及它们之间的权衡是什么。
答案3
为了跟进 Kinetic Arc 提供的答案,在后续重新启动时修改系统的更简单方法是在内核命令行中添加“noreadonly”。如果您不希望经常这样做,那么只需捕获 grub 并手动添加它可能就足够了。在开发只读系统时,我们在 grub.conf 中添加了一个条目,并稍微增加了超时时间。一旦系统映像的开发完成,我们就会在分发映像之前取出该条目。