系統裝在軟raid上帶來的問題如何修復?
前一陣遇到一個系統裝到軟raid上后設備名對不上的問題。正常用kickstart安裝rhel或centos時,可以創建軟raid設備,例如/dev/md1,然后把系統裝到md1里,裝好重啟后可以看到根目錄就在/dev/md1設備上。但是,同事用無盤環境裝的,重啟后設備名字變成了md127,系統是自動把軟raid設備找到了,但是給它的名字不是安裝時的名字。試著在/etc/mdadm.conf里把/dev/md1加上,重啟還是無效。
后來才想明白,mdadm.conf配置文件自己就放在軟raid上,在識別軟raid以前,上哪兒去找這個文件啊。不是修改系統的,而是修改dracut里的mdadm.conf,這個修改也不麻煩,改好/etc/mdadm.conf后重新mkinitrd一下,新的mdadm.conf就帶到新initrd里去了。這次重啟,設備名正確了,是/dev/md1。
那md127是咋來的?
再翻了代碼,原來,dracut里的sbin/mdadm_auto腳本里有一句:
/sbin/mdadm -As --auto=yes --run 2>&1 | vinfo
如果找不到etc/mdadm.conf,就會用mdadm工具來自動尋找并組裝舊有的軟raid設備,“-A”表示Assemble,看看mdadm的源碼:
(Assemble.c) create_mddev() ----> find_free_devnm() char *find_free_devnm(int use_partitions) { static char devnm[32]; int devnum; for (devnum = 127; devnum != 128; devnum = devnum ? devnum-1 : (1<<20)-1) { ......
就是從127往下遞減來作為設備名稱的。
感謝君瑞同學提的問題,我也學到了很多。