md raid 未由 dracut 安装

dgh*_*son 7 software-raid mdadm centos lvm initramfs

背景

我正在运行 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)
Run Code Online (Sandbox Code Playgroud)

这只是一个临时解决方案,因为它最初应该安装在 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
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

/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
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

我有一个脚本可以自动将另一个 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
Run Code Online (Sandbox Code Playgroud)

然后我用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 来组装我的阵列?

dgh*_*son 8

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

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

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

  • 我知道我的(这个)评论毫无价值,但谢谢你! (3认同)