系統(tǒng)裝在軟raid上帶來(lái)的問(wèn)題如何修復(fù)?
前一陣遇到一個(gè)系統(tǒng)裝到軟raid上后設(shè)備名對(duì)不上的問(wèn)題。正常用kickstart安裝rhel或centos時(shí),可以創(chuàng)建軟raid設(shè)備,例如/dev/md1,然后把系統(tǒng)裝到md1里,裝好重啟后可以看到根目錄就在/dev/md1設(shè)備上。但是,同事用無(wú)盤(pán)環(huán)境裝的,重啟后設(shè)備名字變成了md127,系統(tǒng)是自動(dòng)把軟raid設(shè)備找到了,但是給它的名字不是安裝時(shí)的名字。試著在/etc/mdadm.conf里把/dev/md1加上,重啟還是無(wú)效。
后來(lái)才想明白,mdadm.conf配置文件自己就放在軟raid上,在識(shí)別軟raid以前,上哪兒去找這個(gè)文件啊。不是修改系統(tǒng)的,而是修改dracut里的mdadm.conf,這個(gè)修改也不麻煩,改好/etc/mdadm.conf后重新mkinitrd一下,新的mdadm.conf就帶到新initrd里去了。這次重啟,設(shè)備名正確了,是/dev/md1。
那md127是咋來(lái)的?
再翻了代碼,原來(lái),dracut里的sbin/mdadm_auto腳本里有一句:
/sbin/mdadm -As --auto=yes --run 2>&1 | vinfo
如果找不到etc/mdadm.conf,就會(huì)用mdadm工具來(lái)自動(dòng)尋找并組裝舊有的軟raid設(shè)備,“-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往下遞減來(lái)作為設(shè)備名稱(chēng)的。
感謝君瑞同學(xué)提的問(wèn)題,我也學(xué)到了很多。