Linux啟動盤boot/root盤的製作(轉)

gugu99發表於2007-08-10
Linux啟動盤boot/root盤的製作(轉)[@more@]

  boot/root盤由兩部分組成,即核心和根檔案系統。要把這兩部分都放到一個1.44MB的軟盤上去,通常要對核心和根檔案系統進行壓縮,壓縮核心的最好方法是進行重新編譯核心,將一些不必要的支援去掉,如對網路和其它周邊裝置的支援,重要的一點是記住核心必須支援RAMDISK及ext2,否則系統不能正常引導。關於核心的編譯本文不再闡述,下面重點介紹如何生成根檔案系統的壓縮包。對於根檔案系統的壓縮包括兩方面的問題,第一是隻保留必要的根檔案系統元件,第二是將根檔案系統做成一個壓縮包,類似於核心工作的原理。

  (1)根檔案系統概述

  一個根檔案系統必須包括支援完整Linux系統的全部東西,它至少應包括以下幾項:

  ·基本檔案系統結構

  ·至少含有以下目錄:/dev、 /proc、 /bin、 /etc、 /lib、 /usr、 /tmp

  ·最基本的應用程式,如sh、 ls、 cp、 mv等

  ·最低限度的配置檔案,如rc、 inittab、 fstab等

  ·裝置:/dev/hd*、 /dev/tty*、 /dev/fd0

  ·基本程式執行所需的庫函式

  以上所需檔案一般情況下會超過1.44M,因此我們通常的做法是先準備好內容後再壓縮到軟盤中,當用軟盤啟動時,再把檔案解壓到記憶體中,形成一個虛擬盤(RAMDISK),透過RAMDISK控制系統啟動。

  為了能建立以上的根檔案系統,你必須有一個空閒的能夠放下大約4MB檔案的RAMDISK。系統預設情況下已替我們建好了一個大小為4096KB的RAMDISK,其裝置名一般為/dev/ram0,我們就使用它來儲存我們預先準備好的根檔案系統。

  2.2 建立根檔案系統

  Linux核心識別兩種可以直接複製到RAMDISK的檔案系統,它們是minix 和ext2,ext2效能更好。mke2fs預設情況下在1.44M的軟盤上產生360個資訊節點,使用壓縮格式的根檔案系統需要更多的資訊節點,所以使用如下命令建立檔案系統可以建立2000個資訊節點,而且一般不會用完。

  mke2fs -m 0 -i 2000 /dev/ram0

  mke2fs將會自動判斷裝置容量的大小並相應地配置自身,-m 0引數防止它給root保留空間,這樣會騰出更多的有用空間。接著把虛擬盤掛在節點/mnt上:

  mount -t ext2 /dev/ram0 /mnt/floppy

  接著是建立目錄。根檔案系統最少應該有如下8個目錄:

  /dev — 裝置

  /proc — proc 檔案系統所需目錄

  /etc — 系統配置檔案

  /sbin — 重要的系統程式

  /bin — 基本應用程式

  /lib — 共享函式庫

  /mnt — 裝載其他磁碟節點

  /usr — 附加應用程式

  執行如下命令建立這些目錄:

  #cd /mnt/floppy

  #mkdir dev proc etc sbin bin lib mnt usr

  接下來的工作就是確定各個目錄下的內容了:

  ·/dev:/dev中含有系統不可缺少的裝置檔案。可以把現有系統中/dev的檔案複製過來,然後刪除不必要的檔案。命令cp -dpR /dev /mnt會複製/dev整個目錄但不複製檔案內容,dp開關保證連結檔案仍然不變,不會複製連結所指原檔案,而且屬性不變。如果你沒有SCSI裝置,刪除所有的以sd開頭的檔案。如果你不想使用串列埠裝置,刪除所有以cua開頭的檔案。不過記住一定要保留console、kmem、mem、null、ram、tty1等檔案。

  ·/etc:這個目錄中含有一些必不可少的系統配置檔案。這下面的檔案比較多,那麼到底哪些檔案是必需的,哪些可有可無呢?由於這下面的檔案一般是一些文字檔案,都不是很大,乾脆全部保留算了。

  我的啟動盤中含有不到15個配置檔案,大致可分為3部分:

  ·rc.d/* — 系統啟動指令碼

  ·fstab — 列出要登入的檔案系統

  ·inittab — 包含啟動過程引數

  而且這些檔案都是最簡單的。rc應該包括:

  #!/bin/sh

  /bin/mount -av

  /bin/hostname yjy

  fstab應包括:

  /dev/ram0 / ext2 defaults

  /dev/fd0 / ext2 defaults

  /proc /proc proc defaults

  inittab包括:

  id:2:initdefault:

  si::sysinit:/etc/rc

  1:2345:respawn:/sbin/getty 9600 tty1

  2:23:respawn:/sbin/getty 9600 tty2

  ·/bin和/sbin:該目錄中包含有必不可少的應用程式,如ls, mv, cat,你可以根據自己的需要選擇,不過一定要記住包括以下程式:init, getty,login, mount,執行你的rc的外殼shell。

  ·/lib: 該目錄中包含有你的啟動盤啟動過程中所需要的共享函式庫,如果缺少必須的函式庫,系統會停止啟動或出現一大堆錯誤資訊,所以一定要注意。

  幾乎所有的程式都需要libc庫,列一下目錄/lib中的libc:

  % ls -l /lib/libc*

  -rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so*

  lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 -> libc-2.1.1.so*

  libc.so.6的6表示版本號,它指向的檔案才是你真正需要的。

  檢視每一個程式使用的函式庫,用命令ldd,如:

  % ldd /sbin/mke2fs

  libext2fs.so.2 => /lib/libext2fs.so.2 (0x40014000)

  libcom_err.so.2 => /lib/libcom_err.so.2 (0x40026000)

  libuuid.so.1 => /lib/libuuid.so.1 (0x40028000)

  libc.so.6 => /lib/libc.so.6 (0x4002c000)

  /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

  輸出右邊的庫都是必須的,有的可能是連結檔案。

  在/lib目錄下你還必須有函式庫裝載器,這個裝載器或是ld.so (對 a.out 庫) 或是 ld-linux.so (對 ELF 庫)。新版本的ldd一般會告訴你所需庫的裝載器。

  把裝載器和庫複製到/lib後,再仔細檢查一遍,一定保證沒有遺漏。

  2.3 模組

  如果你有一個模組化的核心,你還得考慮需要載入的模組,它們都位於/lib/modules,你可以把不是很重要的模組放到別的盤上,當系統啟動後再載入,這樣會節省啟動盤的空間。

  2.4 打包

  一旦你完成了上述工作,卸下虛擬盤,複製到一個檔案中,然後壓縮。

  umount /mnt

  dd if=/dev/ram0 bs=1k | gzip -v9>rfs.gz

  壓縮結束後,你就擁有了一個壓縮的根檔案系統,不過你得檢查它的大小,如果大了,你還得刪除一些東西。

  3.組織引導盤

  有了根檔案系統和核心之後,最後的工作就是把它們組織在一起。

  先檢查總檔案的大小,如果超出1.44MB,就得考慮重新建立所需或用兩張磁碟,即使用兩張磁碟,你的根檔案系統也得小於1.44MB。

  接著就是確定是用LILO控制啟動還是直接用複製到盤上的核心控制啟動。用LILO的好處是你能增加支援初始化硬體的引數到核心中,缺點是較複雜且佔用珍貴的磁碟空間,不過我還是建議使用LILO控制系統啟動。下面我就介紹用LILO的過程,直接用複製到盤上的核心控制啟動的方法就不作敘述了。

  用LILO控制啟動首先就得寫一個LILO配置檔案,以下是一個最簡單的配置檔案,但是已經夠用了。

  boot =/dev/fd0

  install =/boot/boot.b

  map =/boot/map

  read-write

  backup =/dev/null

  compact

  image = KERNEL

  label = Bootdisk

  root =/dev/fd0

  引數說明見相關資料。然後把它命名為bdlilo.conf。 接下來就是建立一個核心檔案系統。把一張乾淨的軟盤插入軟碟機,在上面建立ext2檔案系統。

  mke2fs -i 8192 -m 0 /dev/fd0 50

  “-i 8192”表示每8192位建立一個資訊節點。接著登入系統:

  mount /dev/fd0 /mnt/floppy

  rm -rf /mnt/floppy/lost+found

  mkdir /mnt/floppy{boot,dev}

  刪去目錄/ lost+found,建立兩個目錄/boot和/dev,再執行:

  cp -R /dev/{null,fd0} /mnt/floppy/dev

  接著複製啟動載入器boot.b到目錄/boot中,

  cp /boot/boot.b /mnt/floppy/boot

  最後,複製你建立的配置檔案bdlilo.conf和核心到核心檔案系統的根目錄下,

  cp bdlilo.conf KERNEL /mnt/floppy

  現在,根檔案系統所需的所有檔案都準備就緒了。再執行下面的命令可以幫助安裝LILO引導器到軟盤的根檔案系統上面:

  lilo -v -C bdlilo.conf -r /mnt

  OK,可以執行它了,如果執行結果沒有錯誤就表明成功,否則就應該仔細檢查一下上面的設定。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-940132/,如需轉載,請註明出處,否則將追究法律責任。

相關文章