亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1566 | 回復(fù): 0
打印 上一主題 下一主題

使用ram disk初始化(initrd) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2006-01-17 18:00 |只看該作者 |倒序?yàn)g覽

使用ram disk初始化(initrd)
================================
Written 1996,2000 by Werner Almesberger
werner.almesberger@epfl.ch
> and
                     Hans Lermen
lermen@fgan.de
>
翻譯:szs
                     
initrd提供了在boot loader下加載ram disk的方法。該ram disk可以被作為根文件系統(tǒng)掛載進(jìn)來(lái),里面的程序也可以運(yùn)行。然后,新的根文件系統(tǒng)可以從其他設(shè)備掛載。之前的根(來(lái)自initrd)可以被轉(zhuǎn)移到一個(gè)目錄然后被卸載。

initrd主要設(shè)計(jì)用來(lái)使系統(tǒng)啟動(dòng)于兩個(gè)條件,一個(gè)是內(nèi)核來(lái)自于非常小的驅(qū)動(dòng)器,一個(gè)是額外的模塊需要從initrd中加載。

本文給出initrd的概要描述,更具體的可以參考[1]。

操作
-------
當(dāng)使用initrd,典型的系統(tǒng)啟動(dòng)順序如下:
1.       boot loader加載內(nèi)核并初始化ram disk
2.       內(nèi)核把initrd轉(zhuǎn)化成正常的ram disk 并釋放initrd使用的內(nèi)存
3.       initrd作為root被掛載,賦予讀寫權(quán)限。
4.       /linuxrc被執(zhí)行(這可以是任何可執(zhí)行文件,如腳本,運(yùn)行在uid 0,可以做任何初始化)。
5.       linuxrc掛載真正的根文件系統(tǒng)
6.       linuxrc使用pivot_root系統(tǒng)調(diào)用把根文件系統(tǒng)放在根目錄。
7.       正常的啟動(dòng)序列(/sbin/init)在根文件系統(tǒng)上執(zhí)行。
8.       initrd文件系統(tǒng)被移去。
   
注意,改變根目錄不牽扯卸載他。
掛載在initrd的文件系統(tǒng)仍然可以被訪問(wèn)。

啟動(dòng)命令選項(xiàng)
------------------------
initrd添加了如下新的選項(xiàng):
   initrd=    (e.g. LOADLIN)   
   加載特定的文件作為初始的ram disk。當(dāng)使用lilo,你應(yīng)該在/etc/lilo.conf中指定
   ram disk鏡像文件位置,使用INITRD變量。
   
   noinitrd   
   initrd數(shù)據(jù)被保留卻不轉(zhuǎn)化成ram disk,正常的根文件系統(tǒng)被加載。initrd的數(shù)據(jù)可以   從/dev/initrd中讀取。注意,在initrd中的數(shù)據(jù)可以是任意結(jié)構(gòu)的,不一定要是文件系統(tǒng)鏡像。該選項(xiàng)多用于調(diào)試。
   
   注意:/dev/initrd是只讀的,而且只能被使用一次。只要最后一個(gè)進(jìn)程關(guān)閉它,所有的數(shù)據(jù)將會(huì)釋放掉,而/dev/initrd將不再被打開(kāi)。
   
   root=/dev/ram0   (without devfs)
   root=/dev/rd/0   (with devfs)
   
   initrd作為根文件系統(tǒng)被掛載,隨后正常的啟動(dòng)順序中,ram disk 仍然作為root。
   
安裝
------------
首先,用于initrd文件系統(tǒng)的目錄在根文件系統(tǒng)上被創(chuàng)建:
#mkdir /initrd

名字不是很重要。更多的可以參考pivot_root(2)的man。

在啟動(dòng)過(guò)程中,如果根文件系統(tǒng)被創(chuàng)建(如果你有軟盤啟動(dòng)),那么根文件系統(tǒng)應(yīng)該創(chuàng)建/initrd目錄。

如果initrd沒(méi)有被掛載,他里面的內(nèi)容仍然可以被訪問(wèn),通過(guò)以下的方法(注意,這在使用devfs時(shí)不可用):
# mknod /dev/initrd b 1 250
# chmod 400 /dev/initrd

第二步,內(nèi)核編譯的時(shí)候必須支持ram disk并啟動(dòng)ram disk使能。所有從initrd中執(zhí)行的程序必須被編譯到內(nèi)核中。

第三步,你必須創(chuàng)建ram disk鏡像。這可以通過(guò)在塊設(shè)備上創(chuàng)建文件系統(tǒng)實(shí)現(xiàn),把所需的文件拷貝,然后把文件拷貝到initrd文件。根據(jù)最新的內(nèi)核,至少三種設(shè)備可以用:
l         軟盤(慢,卻隨處可用)
l         ram disk(快,需要物理內(nèi)存)
l         loopback device(最高檔)
   
我將介紹loopback device方法:
保證loopback device被內(nèi)核支持
創(chuàng)建一個(gè)空的文件系統(tǒng),擁有合適的大。
     # dd if=/dev/zero of=initrd bs=300k count=1
     # mke2fs -F -m0 initrd
    如果空間不多,你可以用minix fs而不是ext2
掛載文件系統(tǒng)
      # mount -t ext2 -o loop initrd /mnt
創(chuàng)建控制臺(tái)設(shè)備(如果用devfs,就沒(méi)必要)
      # mkdir /mnt/dev
      # mknod /mnt/dev/console c 5 1
拷貝initrd環(huán)境需要的所有文件。不要忘掉最重要的文件/linuxrc.
注意,/linuxrc必須有執(zhí)行權(quán)限。
正確的initrd環(huán)境可以不用重啟就可以通過(guò)命令行測(cè)試:
  # chroot /mnt /linuxrc
卸載文件系統(tǒng)
     # umount /mnt
現(xiàn)在initrd被保存在initrd文件中。還可以壓縮他。
     # gzip -9 initrd
為了試驗(yàn)initrd,你可以創(chuàng)建一個(gè)急救盤,只需創(chuàng)建/linuxrc到/bin/sh的符號(hào)鏈接。
你還可以試著把initrd更小。

最后,你要啟動(dòng)內(nèi)核并加載initrd.幾乎所有的boot loader都支持initrd.  
雖然啟動(dòng)進(jìn)程兼容老的機(jī)制,下面的啟動(dòng)命令行還是得給出:
   
   root=/dev/ram0 init=/linuxrc rw
如果不使用devfs.或者
  root=/dev/rd/0 init=/linuxrc rw
如果使用devfs.

使用 LOADLIN,只要執(zhí)行
       LOADLIN  initrd=
e.g. LOADLIN C:\LINUX\BZIMAGE initrd=C:\LINUX\INITRD.GZ root=/dev/ram0
       init=/linuxrc rw
      
使用LILO,你添加選項(xiàng)INITRD=到/etc/lilo.conf中,使用APPEDN命令即可。
    image = /bzImage
    initrd = /boot/initrd.gz
    append = "root=/dev/ram0 init=/linuxrc rw"
然后運(yùn)行 /sbin/lilo

對(duì)于其他的啟動(dòng)程序,請(qǐng)參考相應(yīng)的文檔。

現(xiàn)在你可以啟動(dòng)并享受使用initrd的樂(lè)趣了

如何改變根設(shè)備
------------------
當(dāng)完成他的任務(wù),linuxrc改變根設(shè)備并啟動(dòng)真正的根設(shè)備。

整個(gè)過(guò)程包括如下幾步:
1.       掛載新的根文件系統(tǒng)
2.       把他變成根文件系統(tǒng)
3.       刪除所有對(duì)舊(Initrd)文件系統(tǒng)的訪問(wèn)
4.       卸載initrd文件系統(tǒng),重定位ram disk

掛載新的根文件系統(tǒng)很容易:只需把他掛載到當(dāng)前根下。例如:
# mkdir /new-root
# mount -o ro /dev/hda1 /new-root

根的轉(zhuǎn)變伴隨著pivot_root系統(tǒng)調(diào)用。pivot_root把當(dāng)前的根轉(zhuǎn)移到新根下的一個(gè)目錄,并把新的根放到原來(lái)的地方。老根的目錄必須在調(diào)用pivot_root前退出。例如:
# cd /new-root
# mkdir initrd
# pivot_root . initrd

現(xiàn)在,linuxrc進(jìn)程可以仍然訪問(wèn)老的根。所有的這些引用可以通過(guò)如下命令釋放:
# exec chroot . what-follows dev/console 2>&1

然后執(zhí)行的就是新根下的,例如/sbin/init.
如果新的根文件系統(tǒng)使用devfs,而/dev目錄還不可用,devfs必須被掛載進(jìn)來(lái),
在使用chroot之前,只有這樣才有/dev/console設(shè)備。

注意:privot_root執(zhí)行的情況可能有所不同。為了保證兼容性,注意以下幾點(diǎn):調(diào)用pivot_root之前,調(diào)用進(jìn)程的當(dāng)前目錄應(yīng)指向新的根文件目錄使用.作為第一個(gè)參數(shù),老根的相對(duì)路徑作為第二個(gè)參數(shù)。chroot程序必須在就老的和新的根下都可以使用。最后改變根到新的根下。在執(zhí)行命令中使用dev/console的相對(duì)路徑。


注意,initrd可以被卸載,而ram disk使用的內(nèi)存可以被釋放:
# umount /initrd
# blockdev --flushbufs /dev/ram0    # /dev/rd/0 if using devfs

initrd還可以使用NFS-mounted根,參考man pivot_root(8)。

注意:如果linuxrc或者其他程序從終端執(zhí)行,老的改變根機(jī)制必須調(diào)用。

使用限制
-----------
引入initrd的主要?jiǎng)訖C(jī)是為了在系統(tǒng)安裝中可以模塊化配置內(nèi)核。過(guò)程運(yùn)行如下:
1.       一個(gè)小內(nèi)核的系統(tǒng)從軟盤或其他介質(zhì)上啟動(dòng)(支持ram disk,initrd,a.out, ext2fs),并加載initrd。
2.       /linuxrc決定如何掛載真正的根文件系統(tǒng)(設(shè)備類型,設(shè)備驅(qū)動(dòng),文件系統(tǒng)),并分布媒體(CDROM,network,tape)。這些可以詢問(wèn)用戶或者自動(dòng)探測(cè),或是混合使用。
3.       /linuxrc加載必須的內(nèi)核模塊
4.       /linuxrc創(chuàng)建并組裝根文件系統(tǒng)(還不一定能用)。
5.       /linuxrc調(diào)用pivot_root改變根文件系統(tǒng),執(zhí)行(chroot)安裝程序.
6.       boot loader 安裝完畢
boot loader配置用于加載initrd,initrd中包含系統(tǒng)啟動(dòng)的必須模塊。
現(xiàn)在系統(tǒng)可以啟動(dòng)的,額外的安裝任務(wù)被執(zhí)行。

initrd的主要任務(wù)是在正常的系統(tǒng)操作中復(fù)用配置數(shù)據(jù),而不需重新編譯鏈接內(nèi)核。

第二個(gè)限制是在linux運(yùn)行在不同的硬件配置上的安裝問(wèn)題。這種情況下,只需產(chǎn)生一個(gè)小內(nèi)核,分別配置。initrd中必須含有所有需要的模塊。然后,/linuxrc或其他一個(gè)文件可能有所不同。

第三個(gè)限制更方便恢復(fù)磁盤,因?yàn)橄蟾募到y(tǒng)分區(qū)的信息在系統(tǒng)啟動(dòng)的時(shí)候要用,而在啟動(dòng)時(shí)刻是得不到的。

最后,CDROM發(fā)布使他更方便安裝。

荒廢的根改變機(jī)制
----------------
下面的機(jī)制在pivot_root之前被使用。當(dāng)前的內(nèi)核仍然支持他,但是你不要依賴他。

他在linuxrc存在的情況下,把真正的根設(shè)備作為根文件系統(tǒng)。initrd文件系統(tǒng)然后被
卸載,或者把他移動(dòng)到/initrd目錄,如果這個(gè)目錄存在于新的根文件系統(tǒng)。

為了使用這種機(jī)制,你不必設(shè)定啟動(dòng)參數(shù)root,init,rw(如果設(shè)定了,這將影響到真正的
根文件系統(tǒng))。


本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/474/showart_68582.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP