歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> Linux業界 >> 動手制做自己的一張軟盤大小的Linux(1)

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

日期:2017/2/27 11:12:48   编辑:Linux業界

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

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

所有的PC機都是通過執行ROM中的代碼加載啟動盤的0柱面0扇區中的代碼來啟動整個系統。在Linux系統中啟動盤的0柱面0扇區中含有的是啟動裝載器L ILO,它定位內核,裝載它,最後執行它。一旦內核裝載後,它先是進行基本設備初始化,接著試圖加載並登陸磁盤中根文件系統,如果內核找不到可裝載的根文件系統,啟動過程會就此停止。如果根文件系統裝載完畢並登陸成功後,你會看到一行信息:
VFS: Mounted root (ext2 filesystem) readonly.
之後,系統發現init程序並執行它,init程序尋找它的配置文件/etc/inittab,並開始執行其中的腳本,這些腳本是一些SHELL命令的組合,用來執行如下命令,如加載所需模塊、裝載S WAP、初始化網絡、裝載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 AMDISK),通過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開關保證鏈結文件仍然不變,不會拷貝鏈結所指原文件,而且屬性不變。
必須注意的是,每一個設備文件占用一個信息節點,而軟盤上節點數是有限的,因此有必要刪除沒用的設備文件。例如,如果你沒有SCSI 設備,刪除所有的以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 | gzip -v9 > rootfs.gz
壓縮結束後,你就擁有了一個壓縮的根文件系統,不過你得檢查它的大小,如果大了,你還得去掉一些東西。




Copyright © Linux教程網 All Rights Reserved