背景

背景

背景

我运行的是 Centos 7。最初,它在单个磁盘上运行,如下所示:

1  200M    EFI System       (/boot/efi)
2  500M    Microsoft basic  (/boot)
3  465.1G  Linux LVM 

LVM VG centos
- LVM LV ext4 centos-root (/)
- LVM LV swap centos-swap (swap)

这只是一个临时解决方案,因为它最初应该安装在 Linux 软件 RAID1 阵列上。我今天抽出时间来迁移它。这是目前的样子:

Both new disks have this partition layout:

1  200M    EFI System   (/boot/efi)
2  457.6G  Linux RAID   /dev/md0  RAID1 (for boot and LVM)
3  8G      Linux RAID   /dev/md1  RAID0 (so 16GB total, for swap)

/dev/md0 looks like this:

1  500M  Linux filesystem (/boot)
2  457G  Linux LVM        (centos-root is migrated to this)

LVM now has only one LV, centos-root

/etc/mdadm.conf看起来像这样:

ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=main.centos.local:0 UUID=5b5057b4:4235ba4b:5342dfda:acf63302
   devices=/dev/sda2,/dev/sdb2
ARRAY /dev/md1 level=raid0 num-devices=2 metadata=1.2 name=main.centos.local:1 UUID=f82a8c99:9b391d83:4efc9456:9e9bad98
   devices=/dev/sda3,/dev/sdb3

/etc/fstab看起来像这样:

/dev/mapper/centos-root                   /          xfs    defaults  0 0
UUID=fcb5f82f-ce6b-460b-800f-329e010bc403 /boot      xfs    defaults  0 0
UUID=C532-14AE                            /boot/efi  vfat   umask=0077,shortname=winnt 0 0
/dev/md1                                  swap       swap   defaults  0 0

blkid输出此(仅限相关条目):

/dev/sdb1: SEC_TYPE="msdos" UUID="C532-14AE" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="ed301bbd-c15c-40af-ae75-bf238d0e6270" 
/dev/sda1: SEC_TYPE="msdos" UUID="C532-14AE" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="f3a76412-41a0-4e04-9b04-ad1c159133cf" 
/dev/md0p1: LABEL="boot" UUID="fcb5f82f-ce6b-460b-800f-329e010bc403" TYPE="xfs" PARTLABEL="primary" PARTUUID="df8d6481-c6ce-423a-b5d5-205d355e5653" 
/dev/md0p2: UUID="7LfywM-oPHy-MTEt-swlI-EVbZ-opTo-m82E6R" TYPE="LVM2_member" PARTLABEL="primary" PARTUUID="19e7f9d5-a955-4036-8338-03a748faa1f6" 
/dev/mapper/centos-root: UUID="deaa9788-b487-4991-adf7-2945788fb6cd" TYPE="xfs"

我有一个脚本,可以自动将其他 EFI 分区挂载到/boot/efi_[device],当内核更新时,grub.cfg 会被复制到该分区以保持所有内容同步。

/dev/sda1/dev/sdb1通过脚本保持同步(我已经验证了这一点),因此 fstab 安装其中任何一个都不应该成为问题/boot/efi(这也意味着如果一个驱动器由于故障而被删除,系统仍然保证启动)。我本可以在 LV 中放置交换区来简化事情,但 RAID0 可以获得更好的性能(就其价值而言),并且我获得了额外的 16GB 空间。

我使用以下命令将 LV 从旧驱动器迁移到新 PV:

pvcreate /dev/md0p2
vgextend centos /dev/md0p2
pvmove /dev/sdg3
vgreduce centos /dev/sdg3

dracut然后我用(备份原始文件后)重新生成了initramfs ,最后重新生成了grub.cfg。之后,我安装了新/boot分区/boot/efi并复制了所有内容。

问题

断开旧驱动器并启动后,dracut 无法找到我的 RAID 阵列,当然/boot也找不到分区和 LVG。看起来它根本就没有mdadm --assemble调用/dev/md0/dev/md。我可以从dracut提示符中执行此操作,然后lvm_scan找到我的 LVG,我可以链接/dev/centos/root/dev/root,并且一旦退出提示符,系统就会继续启动,没有任何问题。一切似乎都在它应该在的地方。

有一个可用的内核更新,所以我尝试安装它(假设我第一次在重新生成 initramfs 和 grub.cfg 文件时搞砸了一些东西),但没有成功。系统仍然以完全相同的方式失败。当我手动从任一 EFI 分区启动时,情况就是如此(因为两者是相同的,所以应该如此)。

链接到 Pastebin 上的 rdsosreport.txt

我在这里缺少什么?如何让 dracut 组装我的阵列?

答案1

dracut 文档暗示任何 md raid 阵列都应自动组装,并且rd.md.uuid仅当您只想将某些阵列组装为引导过程的一部分时才应使用该参数。

看起来实际上数组不会自动组装,实际上只有在rd.md.uuid设置参数时才组装(对于每个需要组装的数组)。可能是因为rd.lvm.lv参数已经设置,所以它以某种方式干扰了md,但我没有时间来测试它。

简而言之,将rd.md.uuid两个数组的参数添加到GRUB_CMDLINE_LINUX中的变量中/etc/default/grub,然后重新生成 grub 配置解决了我的问题。

答案2

rd.md=1将和rd.md.conf=1rd.auto=1参数添加到GRUB_CMDLINE_LINUX中的变量/etc/default/grub,然后重新生成 grub 配置修复了我的类似问题。这些参数默认为零(dracut.cmdline文档没有明确说明,但确实如此)。

当然,rd.md.uuid单独添加也可以,因为这会显式启动所需的数组。但我比较懒,更喜欢通用的参数。该rd.md.uuid版本的优点是只有所需的阵列在引导时启动。

答案3

我用这个mdadm RAID CentOS 启动指南我觉得关于这个主题有很多缺失的信息。

除了显而易见的步骤之外,解决我的启动问题的还有两个步骤。 1.) 我将 rd.auto=1 添加到 /etc/default/grub 并更新 grub.cfg grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg 2.) 我必须像这样重建我的 initramfs : dracut --add="mdraid" /boot/initramfs-3.10.0-1127.13.1.el7.x86_64.img 3.10.0-1127.13.1.el7.x86_64 --force

之后我就可以启动了,但不要忘记编辑 dracut.conf 以添加 mdraid,以便所有未来的内核都将其内置。

相关内容