亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>Linux教程>

      什么是initrd

      時(shí)間: 若木635 分享

        什么是initrd

        initrd 的英文含義是 boot loader initialized RAM disk,就是由 boot loader 初始化的內(nèi)存盤(pán)。

        在 linux內(nèi)核啟動(dòng)前, boot loader 會(huì)將存儲(chǔ)介質(zhì)中的 initrd 文件加載到內(nèi)存,內(nèi)核啟動(dòng)時(shí)會(huì)在訪問(wèn)真正的根文件系統(tǒng)前先訪問(wèn)該內(nèi)存中的 initrd 文件系統(tǒng)。

        在 boot loader 配置了 initrd 的情況下,內(nèi)核啟動(dòng)被分成了兩個(gè)階段,第一階段先執(zhí)行 initrd 文件系統(tǒng)中的"某個(gè)文件",完成加載驅(qū)動(dòng)模塊等任務(wù),第二階段才會(huì)執(zhí)行真正的根文件系統(tǒng)中的 /sbin/init 進(jìn)程。

        這里提到的"某個(gè)文件",Linux2.6 內(nèi)核會(huì)同以前版本內(nèi)核的不同,所以這里暫時(shí)使用了"某個(gè)文件"這個(gè)稱(chēng)呼,后面會(huì)詳細(xì)講到。

        第一階段啟動(dòng)的目的是為第二階段的啟動(dòng)掃清一切障愛(ài),最主要的是 加載根文件系統(tǒng)存儲(chǔ)介質(zhì)的驅(qū)動(dòng)模塊。

        initrd產(chǎn)生原因

        要想明白initrd產(chǎn)生的原因,帶要從linux啟動(dòng)說(shuō)起。其實(shí)裝入本地linux系統(tǒng)時(shí)可以不用initrd,只要在kernel參數(shù)中加入root參數(shù)就可以了。

        在boot loader如grub等裝入kernel后, kernel需要執(zhí)行系統(tǒng)中的/sbin/init, 讀取這個(gè)文件就必須先mount根文件系統(tǒng)。 早期是通過(guò)啟動(dòng)時(shí)的root=參數(shù)告訴內(nèi)核根文件系統(tǒng)在哪個(gè)設(shè)備上。

        隨著硬件和技術(shù)的發(fā)展,現(xiàn)在根文件系統(tǒng)可能位于一個(gè)網(wǎng)絡(luò)存儲(chǔ)如NFS上, 可能由于RAID而散布于多個(gè)設(shè)備上, 可能位于一個(gè)加密設(shè)備上需要提供用戶(hù)名和密碼,這時(shí)root=參數(shù)就顯得不夠了。

        為了應(yīng)付這種局面, 先后出現(xiàn)兩種機(jī)制來(lái)作為boot loader裝載kernel到真正的/sbin/init執(zhí)行這個(gè)啟動(dòng)過(guò)程的橋梁:initrd和initramfs。

        兩者有類(lèi)似的地方,比如都是由內(nèi)核執(zhí)行其上的某個(gè)程序(initrd是/linuxrc, initramfs是/init),由這個(gè)程序決定加載什么驅(qū)動(dòng)以及如何裝載根文件系統(tǒng)。

        例如,把linux裝入U(xiǎn)盤(pán)中時(shí),就要用到initrd。這里不是指把系統(tǒng)做成initrd直接加載成內(nèi)存式linux,而是像本地硬盤(pán)上那樣是非鏡像型的linux系統(tǒng)。

        為什么必須要用initrd?我們可以從啟動(dòng)過(guò)程來(lái)看。首先,由如GRUB的引導(dǎo)加載器加載內(nèi)核,這時(shí)可以識(shí)別U盤(pán),如果你是從U盤(pán)啟動(dòng)的,那么U盤(pán)為hd0。這一切都是GRUB可以識(shí)別U盤(pán)的存在。

        當(dāng)內(nèi)核加載后情況就不一樣了,內(nèi)核之中一般是沒(méi)有U盤(pán)驅(qū)動(dòng)的,那它就 找不到U盤(pán),更不用說(shuō)U盤(pán)中的系統(tǒng)了。所以就要用initrd來(lái)加載U盤(pán)驅(qū)動(dòng),并執(zhí)行系統(tǒng)中的/sbin/init。

        initrd 的用途

        1. linux 發(fā)行版的必備部件

        linux 發(fā)行版必須適應(yīng)各種不同的硬件架構(gòu),將所有的驅(qū)動(dòng)編譯進(jìn)內(nèi)核是不現(xiàn)實(shí)的,initrd 技術(shù)是解決該問(wèn)題的關(guān)鍵技術(shù)。Linux 發(fā)行版在內(nèi)核中只編譯了基本的硬件驅(qū)動(dòng),在安裝過(guò)程中通過(guò)檢測(cè)系統(tǒng)硬件,生成包含安裝系統(tǒng)硬件驅(qū)動(dòng)的 initrd,無(wú)非是一種即可行又靈活的解決方案。

        2. livecd 的必備部件

        同 linux 發(fā)行版相比,livecd 可能會(huì)面對(duì)更加復(fù)雜的硬件環(huán)境,所以也必須使用 initrd。

        3. 制作 Linux usb 啟動(dòng)盤(pán)必須使用 initrd

        usb 設(shè)備是啟動(dòng)比較慢的設(shè)備,從驅(qū)動(dòng)加載到設(shè)備真正可用大概需要幾秒鐘時(shí)間。如果將 usb 驅(qū)動(dòng)編譯進(jìn)內(nèi)核,內(nèi)核通常不能成功訪問(wèn) usb 設(shè)備中的文件系統(tǒng)。因?yàn)樵趦?nèi)核訪問(wèn) usb 設(shè)備時(shí), usb 設(shè)備通常沒(méi)有初始化完畢。所以常規(guī)的做法是,在 initrd 中加載 usb 驅(qū)動(dòng),然后休眠幾秒中,等待 usb設(shè)備初始化完畢后再掛載 usb 設(shè)備中的文件系統(tǒng)。

        4. 在 linuxrc 腳本中可以很方便地啟用個(gè)性化 bootsplash。

      75351