Centos

dracut 未安裝 md raid

  • January 21, 2022

背景

我正在執行 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/md0and /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 配置為我解決了這個問題。

引用自:https://unix.stackexchange.com/questions/266119