動手製做自己的一張軟盤大小的Linux(1) (轉)

gugu99發表於2008-06-09
動手製做自己的一張軟盤大小的Linux(1) (轉)[@more@]

動手製做自己的一張大小的(1)

不詳

〖〗〖轉發〗

 凡是接觸久的朋友肯定都使用過DOS啟動軟盤,至於啟動軟盤的重要性大家肯定也都清楚。在Linux底下啟動軟盤同樣重要,它不僅能測試新核心、恢復錯誤,而且能升級重要的系統。但是在L inux下製做啟動盤不象在DOS下那麼容易,下面我就一步一步的教大家制做自己系統的啟動軟盤。 

1. Linux啟動過程簡介 
 一個啟動盤實際上是一個完整系統的縮影,它能夠一個完整系統的大部分功能。因此,如果想製做Linux啟動盤,你必須瞭解Linux系統啟動的基本過程。接下來我就先簡要介紹一下L inux的啟動過程。 

 所有的PC機都是透過執行ROM中的程式碼載入啟動盤的0柱面0扇區中的程式碼來啟動整個系統。在Linux系統中啟動盤的0柱面0扇區中含有的是啟動裝載器L ILO,它定位核心,裝載它,最後執行它。一旦核心裝載後,它先是進行基本裝置初始化,接著試圖載入並登陸中根檔案系統,如果核心找不到可裝載的根檔案系統,啟動過程會就此停止。如果根檔案系統裝載完畢並登陸成功後,你會看到一行資訊: 
VFS: Mounted  (ext2 filesystem) readonly. 
之後,系統發現init並執行它,init程式尋找它的檔案/etc/inittab,並開始執行其中的指令碼,這些指令碼是一些命令的組合,用來執行如下命令,如載入所需模組、裝載S 、初始化、裝載fstab中列出的所有器等。最後啟動一個叫getty的程式,它負責console和ttys之間的通訊,它在顯示器上列印l ogin提示符並啟用login程式,login處理登陸的有效性並建立與的對話。至此,啟動過程完畢。 

2. 製做啟動盤 
 建立一個啟動盤首先必須建立根檔案系統,由於軟盤容量有限,因此常採用的根檔案系統。下面我就詳細的介紹怎樣建立壓縮格式根檔案系統。 

2.1 準備 
 一個根檔案系統必須包括支援完整Linux系統的全部東西,因此,它至少應包括以下幾項: 
·基本檔案系統結構 
·至少含有以下目錄:/dev, /proc, /bin, /etc, /lib, /usr, /tmp 
·最基本的應用程式,如sh, ls, cp, mv等 
·最低限度的配置檔案,如rc, inittab, fstab等 
·裝置:/dev/hd*, /dev/tty*, /dev/fd0 
·基本程式執行所需的庫 

 由於以上所需檔案遠超過1.44M,因此我們通常的做法是先準備好內容後再壓縮到軟盤中,當用軟盤啟動時,再把檔案解壓到中,形成一個虛擬盤(R ISK),透過RAMDISK控制系統啟動。 
為了能建立以上的根檔案系統,你必須有一個空閒的能夠放下大約4M檔案的RAMDISK。 
 如果你使用LILO控制啟動,先檢查一下LILO的配置檔案/etc/lilo.conf中定義的RAMDISK的大小。/etc/lilo.conf 中有一行 
RAMDISK_SIZE = nnn 
它決定RAMDISK可使用的最大記憶體為nnn,預設情況下為4096K,對我們來說夠了,但是順便說一下,如果你的系統只有8M記憶體,千萬不要使用4 M的RAMDISK。再檢查一下你的系統裝置中是否有一個叫/dev/ram0或/dev/ram的裝置,這是RAMDISK的裝置名,如果沒有,用命令mknod建立一個裝置/ dev/ram0。 

2.2 建立根檔案系統 
 Linux核心識別兩種可以直接複製到RAMDISK的檔案系統,它們是minix 和ext2,ext2更好。如果你使用ext2,你會發現使用-i選項定義比預設更多的資訊節點非常有用。mke2fs預設情況下在1.44M的軟盤上產生3 60個資訊節點,使用壓縮格式的根檔案系統需要更多的資訊節點,所以使用如下命令建立檔案系統可以建立2000個資訊節點,一般不會用光: 
mke2fs -m 0 -i 2000 /dev/ram0 
mke2fs將會自動判斷裝置容量的大小並相應的配置自身,-m 0引數防止它給root保留空間,這樣會騰出更多的有用空間。接著把虛擬盤掛在節點/mnt上: 
mount -t ext2 /dev/ram0 /mnt 
如果沒有節點/mnt,建一個。 
接著是建立目錄。根檔案系統最少應該有如下8個目錄: 
/dev – 裝置 
/proc -- proc 檔案系統所需目錄 
/etc – 系統配置檔案 
/sbin – 重要的系統程式 
/bin – 基本應用程式 
/lib – 共享函式庫 
/mnt – 裝載其他磁碟節點 
/usr – 附加應用程式 
其中/proc,/mnt和/usr在此情況下都是空的,只需要用mkdir建立它們既可。其餘的目錄應根據需要分別建立,下面我一個一個的詳細敘述。 
·/dev:/dev中含有系統不可缺少的裝置檔案,雖然該目錄很普通,可以用 mkdir建立,然而目錄中的裝置檔案必須用mknod建立,當然也有捷徑,你可以把現有系統中/dev的檔案複製過來,然後刪除不必要的檔案。命令c p -dpR /dev /mnt會複製/dev整個目錄但不複製檔案內容,dp開關保證鏈結檔案仍然不變,不會複製鏈結所指原檔案,而且屬性不變。 
 必須注意的是,每一個裝置檔案佔用一個資訊節點,而軟盤上節點數是有限的,因此有必要刪除沒用的裝置檔案。例如,如果你沒有 裝置,刪除所有的以sd開頭的檔案。如果你不想使用串列埠裝置,刪除所有以cua開頭的檔案。不過記住一定要保留console, kmem, mem, null, ram, tty1等檔案。 
·/etc:這個目錄中含有一些必不可少的系統配置檔案,那麼到底哪些檔案是必需的,哪些可有可無呢?告訴你一個小竅門,用命令ls –ltru,該命令會根據最後使用日期反列一下目錄/etc中的檔案,如果一些檔案很長時間沒有被進入過,基本上可以從你的啟動盤中刪去。 

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

(1)啟動盤中必須含有的檔案 
·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 
(2)整理系統所需檔案 
·passwd – 使用者名稱和目錄. 
·group – 使用者組 
·shadow – 使用者密碼 
如果你覺得這不,就把passwd和shadow刪掉,這樣只有root可以進入系統。 
(3)偶爾使用的檔案,可根據自己的實際情況選擇。 

·/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 |  -v9 > rootfs.gz 
壓縮結束後,你就擁有了一個壓縮的根檔案系統,不過你得檢查它的大小,如果大了,你還得去掉一些東西。 


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

相關文章