dracut 未安裝 md raid
背景
我正在執行 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
and/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 配置為我解決了這個問題。