0

我知道逻辑卷信息保存在 lvm 元数据中,lvm2 中的工具可用于扫描它们并通过 ioctl 设置内核 DM。我很好奇谁在启动过程中做这项工作,以便我们可以将 lv 挂载为 rootfs,systemd?

4

1 回答 1

1

我自己找到了答案。 http://www.system-rescue-cd.org/lvm-guide-en/Booting-linux-from-LVM-volumes/

引用上面链接的内容。

以下是从 LVM 引导所涉及的重要步骤:

1.BIOS执行引导加载程序,通常是Grub

2.引导加载程序有自己的读取分区和文件系统的代码。因此它知道如何从包含 linux 内核映像 (vmlinuz-xyz) 和 initramfs (initrd-xyzgz) 的 /boot 分区读取文件。它首先将这两个文件加载到内存中。然后它执行内核映像并告诉内核 initramfs 在内存中的位置。引导命令行也传递给内核。此命令行包含内核的重要参数,例如 root=/dev/volgroup/lvroot。

3.linux内核启动并执行其初始化代码。然后它从内存中读取 initramfs。内容被解压缩到内存中的新位置。

4.initramfs 的内容现在可用。现在执行名为 init 的程序/脚本。这个特定于每个 linux 发行版的脚本负责查找根文件系统。

5.如果 LVM 物理卷存储在 RAID 磁盘的顶部,init 程序将首先执行 dmraid/mdadm 以使该 RAID 磁盘可用。

6.然后init脚本会运行pvscan/vgscan/lvscan等程序来检测位于磁盘上的LVM卷 LVM卷还不能使用。它们必须首先被激活。这是通过 vgchange --available y 或 vgchange -ay 完成的。

7.init 脚本读取名为 /proc/cmdline 的虚拟文件,以查看在引导命令行上指定的根文件系统的名称。

8. 根文件系统挂载在一个临时目录,例如/rootfs,其他的例如/rootfs/proc 和/rootfs/dev 也可以挂载。

9.initscript 对/rootfs 执行chroot。这意味着该目录将成为将要执行的进程的新根目录。当一个进程读取 /bin/something 时,它实际上会读取 /rootfs/bin/something。

10. 二级初始化程序,即存储在根文件系统上的程序现在被执行,它完成初始化并访问真正的根文件系统。

于 2019-05-27T02:43:17.023 回答