【发布时间】:2019-10-11 00:25:11
【问题描述】:
我知道逻辑卷信息保存在 lvm 元数据中,lvm2 中的工具可用于扫描它们并通过 ioctl 设置内核 DM。我很好奇谁在启动过程中完成这项工作,以便我们可以将 lv 挂载为 rootfs、systemd?
【问题讨论】:
标签: systemd lvm device-mapper
我知道逻辑卷信息保存在 lvm 元数据中,lvm2 中的工具可用于扫描它们并通过 ioctl 设置内核 DM。我很好奇谁在启动过程中完成这项工作,以便我们可以将 lv 挂载为 rootfs、systemd?
【问题讨论】:
标签: systemd lvm device-mapper
我自己找到了答案。 http://www.system-rescue-cd.org/lvm-guide-en/Booting-linux-from-LVM-volumes/
引用上面链接的内容。
以下是从 LVM 引导所涉及的重要步骤:
1.BIOS执行引导加载程序,通常是Grub
2.引导加载程序有自己的代码用于读取分区和文件系统。所以它知道如何从 /boot 分区读取文件 其中包含 linux 内核映像 (vmlinuz-x.y.z) 和 initramfs (initrd-x.y.z.gz)。它首先将这两个文件加载到 记忆。然后它执行内核映像并告诉内核 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/现实中的东西。
10.第二个初始化程序,存储在根文件系统中的那个现在被执行,它完成了初始化 访问真正的根文件系统。
【讨论】: