【问题标题】:Who brings up lvm volumes and how when booting?谁启动了 lvm 卷以及启动时如何启动?
【发布时间】:2019-10-11 00:25:11
【问题描述】:

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

【问题讨论】:

    标签: systemd lvm device-mapper


    【解决方案1】:

    我自己找到了答案。 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.第二个初始化程序,存储在根文件系统中的那个现在被执行,它完成了初始化 访问真正的根文件系统。

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 2015-01-31
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 2020-08-18
      相关资源
      最近更新 更多