詳解暢談Linux initrd系統(tǒng)
Linux initrd有很多值得學(xué)習的地方,這里我們主要介紹Linux initrd,包括介紹nash等方面,Linux initrd 講究了很多重要的事情,init的執(zhí)行在這里分為以下幾部操作,請對所區(qū)分的各個部分加以了解。
定義主目錄(root)的路徑
mkrootdev指令是nash這一支shell所提供的功能,主要就是在要轉(zhuǎn)換之前先行將主目錄定義清楚,默認會將GRUB中kernel command line所設(shè)置root=xxx中的xxx路徑先建立好。
將root 路徑mount到/sysroot下將剛剛找到的root 路徑mount到Linux initrd中的/sysroot下,但要注意,這時的/sysroot就好像rescue mode的/mnt/sysimage目錄,是一樣的意思,都只是先將實體操作系統(tǒng)存在的實體路徑mount到一個虛擬操作系統(tǒng)(在這里是initrd)的暫存目錄中,再通過切換的方式轉(zhuǎn)為實體的主目錄。不同的是,在rescue mode中用的是chroot;但在Linux initrd用的則是switchroot指令,之所以會有這樣的差異,是因為rescue mode直接使用了操作系統(tǒng)的指令,而initrd在加載時,并沒有操作系統(tǒng)的指令可用,因此是通過nash內(nèi)置的指令?;蛟S有人會問,rescue mode不也是以Linux initrd的方式加載的嗎?是的,但要在此補充說明的是,雖然都是Linux initrd,但rescue mode中的initrd是光盤直接提供的,而這里所說的Linux initrd則是安裝操作系統(tǒng)后由操作系統(tǒng)直接產(chǎn)生的,兩者有很多不同之處。您若有興趣,不妨將光盤的initrd文件打開來看(如圖4-45所示),將會發(fā)現(xiàn)該Linux initrd中的init文件并不是一個腳本文件,而是一個真正可以在操作系統(tǒng)下執(zhí)行的程序。
當然,存放在CD或DVD中的Linux initrd文件是為用戶安裝操作系統(tǒng)所使用的,會遇到許多軟、硬件的不同需求,因此,initrd的文件所需存放的資料(像module)遠比操作系統(tǒng)開機所需加載的Linux initrd文件多得多。像圖4-46 中Fedora Core 6安裝光盤中的initrd文件幾乎是操作系統(tǒng)下initrd文件的4倍之多。
建立其他的文件系統(tǒng)
在主目錄(在initrd階段為/sysroot)建好之后,setuproot指令開始運行,將Linux initrd通過init建立好的/proc、/sys、/de目錄中所有資料轉(zhuǎn)移到/sysroot,以方便轉(zhuǎn)換到新的實體操作系統(tǒng),這也是nash內(nèi)置的功能,但筆者在nash的使用手冊竟無法找到任何有關(guān)setuproot的描述,不知為何獨漏這一支。
切換到新的root目錄,并開始執(zhí)行實體系統(tǒng)下的init文件
switchroot是nash在2.6版kernel以后的版本才可使用的新功能,剛剛setuproot把所有和操作系統(tǒng)有關(guān)的目錄都建立在/sysroot后,setuproot會將/sysroot切換為實體操作系統(tǒng)下的主目錄(/),完成后會順便將所有之前Linux initrd存在內(nèi)存中的資料清空,如同所有在虛擬文件系統(tǒng)(包括/sys、/proc或/dev等)中的資料,因此,當switchroot執(zhí)行完成時,內(nèi)存中就不會再有Linux initrd所建的任何目錄及文件,完全由實體操作系統(tǒng)來運行。
總結(jié)
在此要特別強調(diào),千萬不要在您的計算機實驗上述所提到nash支持的setuproot及switchroot兩種功能,雖然本章一開始就說明了如何執(zhí)行nash及如何實際使用nash中的功能,但如果使用到setuproot及switchroot兩者其中之一,都會對操作系統(tǒng)造成破壞,尤其是switchroot。原因是這兩者原本就是要為切換到實體操作系統(tǒng)做準備,但并不會理會本身所存在的路徑是屬于內(nèi)存或是實體硬盤。
當用戶執(zhí)行時,會強迫由setuproot將原本在操作系統(tǒng)中/proc、/sys及/dev的文件先做搬移操作,這樣在開機時,就會因為被刪除掉許多重要文件而造成無法正常開機,更慘的是,接著會執(zhí)行switchroot,我們提過這個功能會將切換過后遺留的文件全部清掉,這在實體操作系統(tǒng)所代表的就是將硬盤中的資料全數(shù)刪除,因此,在執(zhí)行完switchroot后,就只剩原本console的畫面陪伴你,重開機后就一個不剩了,想做實驗的用戶,千萬要考慮清楚再下手。
當然,在switchroot執(zhí)行后,就進入操作系統(tǒng)程序,而這個重責大任就交給存在于實體操作系統(tǒng)中的init這個程序,下一章將以init開頭,直到進入登錄畫面的每一步,都會交待得清清楚楚,當然,Linux initrd在每一個版本及每一套不同的操作系統(tǒng)廠商(如Red Hat、SuSE、Debian等)都或多或少有些許的不同之處,但畢竟都是使用Linux initrd的kernel,了解其中一個之后,對每個版本一定都會有較清楚的認知。
【編輯推薦】