歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux維護 >> Linux啟動盤boot/root盤的制作

Linux啟動盤boot/root盤的制作

日期:2017/3/2 10:46:50   编辑:Linux維護

  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,可以運行它了,如果運行結果沒有錯誤就表明成功,否則就應該仔細檢查一下上面的設置。

Copyright © Linux教程網 All Rights Reserved