如何构建一个只写入 RAM 的只读 Linux 系统?

如何构建一个只写入 RAM 的只读 Linux 系统?

这是我当前的分区结构:

Filesystem            1K-blocks      Used Available Use% Mounted on
tmpfs                   127428         0    127428   0% /lib/init/rw
udev                    122976        96    122880   1% /dev
tmpfs                   127428         0    127428   0% /dev/shm
rootfs                  127428     11008    116420   9% /
/dev/sda1              1827534    933144    800029  54% /ro
rootfs.tmpfs            127428     11008    116420   9% /rw
rootfs.aufs             127428     11008    116420   9% /

我想建立另一个完全一样的系统,或者至少是接近的系统。另一个磁盘看起来像这样,如下所示df

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hda3               678551    594050     84501  88% /
tmpfs                   124004         0    124004   0% /lib/init/rw
udev                     10240       520      9720   6% /dev
tmpfs                   124004         4    124000   1% /dev/shm
/dev/hda1                19515     15940      3575  82% /boot
/dev/hda2               253807      7002    246805   3% /var/log_compressed
tmpfs                   124004         0    124004   0% /tmp
tmpfs                   124004      3552    120452   3% /var/log
tmpfs                   124004         0    124004   0% /var/tmp
tmpfs                   124004        20    123984   1% /var/run
tmpfs                   124004         0    124004   0% /var/lock
tmpfs                   124004         0    124004   0% /var/spool

我读了很多,但我不知道如何使用 unoinfs 或 initramfs 进行设置。

我将非常感谢帮助和解释我确实读了很多,但我不知道如何通过 unoinfs 或 initramfs 来做到这一点。

答案1

我不知道你使用的是哪个女巫发行版。在 gentoo 上,我习惯于编写自己的 initramfs 初始化脚本。 Initramfs 只是一个很小的根文件系统,上面只安装了必要的工具,用于将根分区和 switch_root 挂载到真正的根文件系统并执行真正的 init 来接管。

对于 ro 根基系统,我建议使用南瓜文件系统。它具有完整的主线内核支持,使您的系统速度更快。对于您的 RAM 覆盖,您可以使用临时文件系统,也受内核支持。

然后您需要将它们“统一”为一个文件系统。我用奥夫斯。主线内核不支持它,如果您的发行版的内核补丁不支持它,您需要自己打补丁。 (主线不支持单个联合FS)

你可能最好自己写一个。 (我尝试了 dracut 和 genkernel,但他们没有提供处理我的任何情况所需的模块)

  • 创建目录(我使用/usr/src/initramfs
  • 下载静态忙碌盒到上面的目录。这是一个静态 shell,为您提供 fsck、挂载等所需的所有 linux_utils。

  • mkdir /usr/src/initramfs/{bin,dev,lib,mnt,sbin,tmp,etc,proc,sys}对于基础结构

  • 创建一个脚本 /usr/src/initramfs/init 并将所有命令放入其中以挂载分区、ro 文件系统和 rw 覆盖
  • 将 ro 和 rw 统一为aufs挂载语法
  • 不要忘记将--move挂载点转移到新创建的根目录和umount您不再需要的东西
  • exec switch_root /sbin/init清除(删除)加载的 initramfs 中的所有内容并切换 root 以继续引导。
  • 如果您有任何内核模块,您无法编译到内核中,但仍然需要(例如奥夫斯):将它们复制到/usr/src/initramfs/lib
  • /usr/src/initramfs使用您可以使用 gz、xz、cpio 或任何您喜欢的内容创建压缩存档
  • 将创建的存档放在 /boot 目录中并编辑 grub 将其加载为 initrd。

为了确保您的系统使用您的自定义映像启动,请同时编译您自己的内核。 (其实并不难): Gentoo 内核文档。当您必须安装源时,只需用包管理器替换命令即可。大多数发行版都提供内核源码包。

如果您愿意更改发行版来完成它,我建议更改为 Gentoo 或 Arch。他们比其他人更灵活地处理“手动内容”,并且都提供了优秀的文档,可以以您喜欢的任何形式破解它。

答案2

虽然它可能不是解决您的主要问题(创建只读 Linux 系统)的完美解决方案,但您可以探索使用忘川。您可以找到安装指南这里,但是自动翻译不是很好,我现在没有时间发布完整的翻译。罪恶禁运,总结一下:

1)安装必要的依赖项:

sudo aptitude install aufs-modules-`uname-r` aufs-tools

2)从安装包这里,如果您的发行版存在版本。

3) 默认情况下,Lethe 冻结所有分区,但您可以编辑配置文件来更改它(请参阅我链接到的设置指南)

4) 安装该软件包会添加aufs = tmpfs到 GRUB 菜单中的内核行,这会将系统引导到冻结状态(重新引导时所有更改都会被丢弃)。要对系统进行更改,请e在看到 GRUB 菜单时按 按 并删除此行,或者从系统中删除它并更新 GRUB。

答案3

这段摘录来自/etc/initramfs-tools/scripts/init-bottom/__rootaufs

# This is a simple overview of the steps needed to use aufs on the root file system and see the /rw and /ro  branches.
# initramfs init-botton script 
# move the root file system to aufs/unionfs readonly /ro
# root is mounted on ${rootmnt}
# create tmpfs on /rw
# create a aufs using /ro and /rw
# put some files on the tmpfs to fix mtab and fstab 
# move aufs to rootmnt to finish the init process.
# No changes to the root file system are made by this script.
#
#  Why!
#  This will allow you to use a usb flash drive and control what is written to the drive.
#  no need to rebuild the squashfs file just to add a program. 
#  boot to single user mode.  The system works the way you expect. boot aufs=tmpfs and no changes are written to the flash.
#  run ubuntu on an eeePC .

# Install 
# Install ubuntu 8.04 Hardy. Hardy has aufs installed by default
# apt-get update
# apt-get dist-upgrade
# apt-get install aufs-tools
# echo aufs >> /etc/initramfs-tools/modules
# put this file in /etc/initramfs-tools/scripts/init-bottom/rootaufs
# chmod 0755 rootaufs
# # clean up menu.lst 
# update-grub
# update-initramfs -u
# vi /boot/grub/menu.lst
# add aufs=tmpfs to the default entry. 
# do not add this line to single user mode.
# boot to single user mode in order to install software. 
# note: if your home account is on the root file system, your files are in ram and not saved.
# 

相关内容