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 来组装我的阵列?
dracut 文档暗示任何 md raid 阵列都应自动组装,并且rd.md.uuid仅当您只想将某些阵列组装为引导过程的一部分时才应使用该参数。
貌似在现实中,数组并不是自动组装的,实际上只有在设置rd.md.uuid参数时才会组装(对于每个需要组装的数组)。可能是因为rd.lvm.lv参数已经设置,它以某种方式干扰了md,但我没有时间进行测试。
简而言之,将rd.md.uuid我的两个数组的参数添加到GRUB_CMDLINE_LINUX变量 in 中/etc/default/grub,然后重新生成 grub 配置为我解决了这个问题。
| 归档时间: |
|
| 查看次数: |
6732 次 |
| 最近记录: |