我可以将 /etc 自动挂载到不同的分区上吗?

我可以将 /etc 自动挂载到不同的分区上吗?

这看上去像是一个先有鸡还是先有蛋的问题。

在根分区上的文件里面/etc/fstab,我可以指定在挂载点挂载不同的分区吗/etc,例如:

/dev/sda6 /etc defaults 0 0  

这会引起什么问题吗?
假设我在新的上有一些合理的内容/etc,包括相同的 fstab 和正确的 init 和 rc 目录。

稍微重新表述一下这个问题:启动操作的顺序是什么?在运行其余的 init.d 脚本之前,是否先检查是否安装驱动器
/etc/fstab

答案1

这是一个糟糕的想法。你不应该也不能将它放在/etc与 不同的分区上/。内核/etc/fstab在从 启动时会搜索和一堆其他配置文件/。如果/etc它位于不同的、未知的分区上,内核如何找到/etc/fstab并挂载它?

答案2

听起来你在谈论 Debian。

如果你使用传统的 init 系统,它会告诉你所有事情。具体来说:

“/sbin/init”程序作为第一个程序执行,并执行主引导过程。Debian 通常使用带有 sysv-rc 包的传统 sysvinit 方案。请参阅 init(8)、inittab(5) 和“/usr/share/doc/sysv-rc/README.runlevels.gz”了解确切说明。此主引导过程基本上经历以下内容。

  • Debian系统进入运行级别N(none)按照“/etc/inittab”的描述来初始化系统。

  • Debian系统进入运行级别S,在单用户模式下初始化系统,完成硬件初始化等。

  • Debian 系统进入指定的多用户运行级别之一(2 到 5)来启动系统服务。

每个运行级别发生的情况是,所有内容都/etc/rcX.d按字母顺序执行,X运行级别在哪里。

因此,如果您cd /etc/rcS.d,您将看到一堆指向 的符号链接/etc/init.d,这些符号链接以数字开头。数字用于确定顺序。以 开头的符号链接S在进入运行级别时执行,以 开头的符号链接K在退出运行级别时执行。运行级别“S”仅用于初始化,因此K那里没有链接。

如果您修改或重命名任何内容,请谨慎行事。确保在进行启动过程之前测试您的脚本。

好的,现在要尝试实际回答这个问题,以上述信息作为必要的背景。

在 Debian 中,/etc/rc.S/S11mountall.sh关键的“在 fstab 中挂载所有内容”发生在 。但是,fstab被咨询以在 挂载根文件系统/etc/rc.S/S07checkroot.sh

如果您使用fstab自动挂载新的/etc,则/etc/rc.S/S12*及更高级别的所有内容都将使用“覆盖”卷上的 。但是,您需要事先在根卷上 /etc启用。/etc/fstab

需要咨询的其他事项/etc包括/etc/hostname,可能还有一些与相关的内容udev(这非常重要)。您需要查看所有来自/etc/rc.S/S11*和下面的脚本才能确切了解。如果您真的想要/etc在从外部分区安装之前完全没有,那么您正在考虑修改这些脚本。它可能不会像切换顺序那样简单/etc/rc.S/S12mountall.sh,例如,但您可以添加一个新脚本,以便更早地从外部分区 /etc/rc.S/S00mountall.sh引入。/etc

您可以使用 Linuxmount --bind命令将根卷的原始文件挂载到/etc某处(例如),以便在对或之前查阅过的其他文件/etc_from_rootfs进行更改时将其复制过来。 fstab/etc/rc.S/S12mountall.sh

Linux 内核不像 Windows 那样在启动前和启动过程中使用注册表并要求注册表的存在。内核本身在没有 的情况下可以正常启动(但在 99% 的情况下都不太好用)/etc,但这取决于之后调用的用户空间程序(以 开头init),然后查看/etc,以准备好一个合适的用户环境。

听起来很复杂?确实如此,所以听听 @MattDMo 的意见可能是明智之举。

相关内容