linux技術之製作USB啓動盤

linux技術之製作USB啓動盤

USB閃存存儲裝置(優盤)由於具有輕巧精緻、使用方便、便於攜帶等優點,特別是對比軟盤具有容量較大、安全可靠、讀取速度較快等特性,越來越多人 使用這種裝置取代了軟驅與軟盤,在PC之間交換文件。目前新出的主板BIOS都支持 USB軟盤和硬盤的啓動方式,這樣對於Windows的系統維護與安裝工作越來越方便。但是,廠家僅提供製作Windows 98啓動盤的製作工具,並不提供Linux啓動盤的製作工具。在優盤上建立Linux啓動盤,對於系統維護人員具有更加實用的意義,你可以使用Linux 建立小巧的內核,建立網絡環境,快速地判斷和排除網絡故障與傳送文件。本文以Red Hat 爲例,使用朗科的雙啓動型優盤建立優盤的Linux啓動盤。

下載相關軟件:e3,bvi,Linux內核。

編譯內核

首先計算機的主板必須要支持USB硬盤的啓動方式,並且所使用的優盤是啓動型優盤。

我以Linux-2.4.20爲例說明。編譯時一定要注意不要編譯不必要的模塊,如聲卡驅動等驅動模塊,使編譯的內核儘可能小一些。由於要支持優盤啓 動,必須將SCSI設備、usbcore、usb-storage、Loopback device support、RAM disk support和initrd等編譯到內核中。

許多人會問,usb-storage模塊已經包括在內核了爲什麼還要建立 initrd.img文件?這是由於優盤的初始化過程比執行/sbin/init慢,導致內核已經啓動完成了,優盤還沒有完成初始化工作,因此根文件系統 沒有加載,這時執行/sbin/init命令肯定不成功。通過建立initrd.img文件,在啓動內核時加載initrd.img文件到內存中,等待3 秒使優盤完成初始化工作,再執行/sbin/init指令。具體操作步驟如下。

1.建立initrd.img文件



# mkdir -p /mnt/initrd
# cd /tmp
# mkinitrd /tmp/initrd.gz 2.4.20-usb


2.解壓initrd.img文件,修改啓動腳本linuxrc


# gunzip initrd.gz
# mount -o loop /tmp/initrd /mnt/initrd
# cp /sbin/busybox /mnt/initrd/bin
# cd /mnt/initrd/bin
# ln -s busybox sleep
# vi /mnt/initrd/linuxrc


加入如下內容:


echo 'wait 3 seconds.....'
/bin/sleep 3

3.重新生成initrd.img文件

由於缺省建立的initrd文件比較大(爲4MB),爲了加快優盤的啓動,必須減小它。具體操作如下:


# mkdir -p /mnt/initrdusb
# cd /tmp
# dd if =/dev/zero of= /tmp/initrdusb bs=1M count=1
# mke2fs -m 0 initrdusb
# mount -o loop /tmp/initrdusb /mnt/initrdusb
# cp -a /mnt/initrd/* /mnt/initrdusb
# umount /mnt/initrd
# umount /mnt/initrdusb
# cd /tmp
# gzip -9 initrdusb
# cp initrdusb.gz /boot/initrd-2.4.20-usb.img

4.測試編譯的內核是否正常啓動

測試編譯的內核是否正常啓動,以及在啓動過程中是否可看見優盤的相關信息。
建立優盤啓動盤
1.將優盤分成兩個分區

留給Linux分區容量大小完全取決於安裝哪些系統維護工具,結果如下:


# modprobe usb-storage
# fdisk -l /dev/sda
Disk /dev/sda: 16 heads, 63 sectors, 126 cylinders
Units = cylinders of 1008 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 102 51376+ 6 FAT16
/dev/sda2 103 126 12096 83 Linux

注意:如果需要使用優盤引導Windows 98,扇區大小必須設置爲63個扇區,可以通過fdisk的x命令擴展修改heads、sectors和cylinders參數。

2.建立與生成ext2分區



# mke2fs -m 0 /dev/sda2
# mkdir -p /mnt/sda2
# mount /dev/sda2 /mnt/sda2
# cd /mnt/sda2

3.建立boot目錄

將編譯好的內核與initrd-2.4.20-usb.img文件拷貝到boot目錄、編譯好的模塊拷貝到lib/modules目錄,以及將/boot/grub的文件拷貝到boot目錄,編輯boot/grub/menu.lst文件,內容如下:


timeout 10
color 0x17 0x70
default 0
title Windows 98
rootnoverify (hd0,0)
makeactive
chainloader +1
title GNU/Linux Redhat 8.0 (2.4.20-usb)
root (hd0,1)
kernel /boot/vmlinuz-2.4.20-usb ro root=/dev/sda2
initrd /boot/initrd-2.4.20-usb.img

安裝grub,具體操作如下:


grub> root (hd1,1)
grub> setup (hd1)
4.建立bin目錄
根據自工作的需要拷貝系統維護工具,如insmod、fsck和mkdosfs等實用程序。一定要注意使用ldd命令檢查那些共享庫文件,這些文件需要 按照原來的路徑拷貝到lib目錄。 由於受到磁盤空間的限制,使用busybox命令代替一些常見的Linux命令,主要原因就是busybox 文件非常小,並且是靜態鏈接的,包括許多常見的Linux命令(如cat、init、ifconig、route)用ln -s busybox建立這些文件的符號聯接。可以根據個人需要重新編譯busybox,包括vi等命令,也可以使用小巧的e3代替vi。

另外,如果使用bash,還必須編輯與裁減/etc/termcap及如下文件:

/bin/bash
/etc/termcap
/usr/share/terminfo/l/linux
/usr/share/terminfo/k/klone+acs
/usr/share/terminfo/k/klone+color
/usr/share/terminfo/k/klone+sgr

5.建立dev目錄

使用cp -a命令拷貝常用的設備文件,包括console、tty1、tty2、tty3sda、sda1、sda2、hda、hdb和hda1等設備文件。

6.編輯etc/init.d/rcS

內容如下:


#!/bin/sh
PATH=/sbin:/bin
eXPort PATH
mount -n -t proc none /proc
umount /initrd
mount -n -o remount,rw /
mount -n -o remount,rw -t proc none /proc
ifconfig lo 127.0.0.1

7.編輯etc/fstab文件

內容如下:


/dev/sda2 / ext2 defaults 1 1
none /proc proc defaults 0 0

應用舉例

舉一個傳送文件的例子。在一臺正常工作的Linux機器A(IP=192.168.100.5)上執行:


$ tar cf - win98 nc -l -p 5555

注意:可以在機器B上使用優盤啓動機器,telnet登陸到機器A上執行以上命令。在機器B上使用優盤啓動執行:


# mount -t vfat -o codepage=938,iocharset=cp936 /dev/hda5 /mnt/2dos
# cd /mnt/2dos
# modprobe eepro00
# ifconfig eth0 192.168.1.10
# route add default gw 192.168.1.1
# ping 192.168.10.5
# nc 192.168.10.5 5555 tar xf -

如果這時使用format /s命令無法建立優盤Windows 98啓動盤,可以採用變通的方式,具體操作如下:


# mkdosfs -F 16 /dev/sda1
# xxd -c 16 /dev/sda1 less

這時記錄下Boot Record的32~35字節內容(本例爲60 91 01 00,這4個字節記錄了FAT分區總的扇區數量),再使用朗科隨盤提供的製作引導盤的工具製作Windows 98啓動盤,然後使用Linux下bvi或者能夠編輯二進制文件的工具修改Boot Record的32~35字節爲原來的內容。這樣,就能夠實現名副其實的三啓動方式(Windows雙啓動+Linux啓動)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章