摘自:大陸新聞組
來源:linuxfourm
From: lb.bbs@bbs.gliet.edu.cn (吻我)
原文在http://neg.topcool.net/txt/cpcw/28.txt
好些時候,我們需要一個只要一張軟盤就能啟動Linux 的系統,比如說做路由
器。但是我們該怎樣做呢? 也就是說我們要把Kernel和FileSystem都做在一張3.5
的盤上。我們先把FileSystem分解成如下幾個部分吧。
1./bin目錄下的文件
bin 目錄通常是放置系統的一些基本命令文件的目錄,要保證你的系統能夠正
常啟動而且能夠完成必要的功能,你需要在/bin目錄下放置如下文件:
ksh--->shell是不可少的
more-->要知道Linux下可沒有type命令
dmesg->雖然你很熟悉你的系統硬件,但是有它還是方便多了
ps---->檢查系統進程是管理員的良好習慣
login->總不至于不要人家登錄吧,再說它也是底層系統的構成
sync-->更新磁盤的Block,很有好處
mount->除非你不要文件系統就不需要它
umount->卸載文件系統的東東
kill-->殺掉那些無用或停止響應的進程
setterm->修改終端參數的
hostname->顯示當前機器名字
telnet->遠程登錄,你的Linux不會不幹點其他的事吧
ping-->檢查網絡連接狀態
ftp--->雖然什麼也放不下,但是留下它也有好處的
tar--->備份很重要!即使你的系統只有一個軟驅
killall->shutdown時系統會用它哦
chmod->修改文件屬性的
chown->修改文件的歸屬
cp--->拷貝文件,修復系統時可以用啊
dd--->據說好多管理員常用,但是我還真沒用過!因為我很少進行介質拷貝
df--->查看磁盤使用情況
du--->查看指定路徑的佔用空間
ls--->你不會一次都沒用過吧
mkdir->建目錄是常事,即使在只有一張盤的情況下
mv--->移動文件的命令
rm--->刪除文件,萬一有多的怎麼辦?靠它了
ln--->鏈接文件,當然有用了
dircolors-->設定目錄的顏色,當你用的是彩顯時
cut-->將文件的一些行送到標準輸出設備
cat-->把標準輸入送到文件或把文件送到標準輸入
stty-->很重要的終端命令哦
gzip-->打包和解包的程序
domainname-->查看域名
還要把一些東西鏈接起來哦
date@->/sbin/clock
less@->more
sh@->ksh
gunzip@->gzip
zcat@->gzip
bash@->sh
tcsh@->sh
2./etc目錄下的文件
etc 目錄是放置系統配置信息的文件目錄,同時也放置了一些系統初始化文件
:
mtab-->mounted table已經mount的FileSystem列表
kernel-->系統內核
issue-->login時的prompt信息
profile-->bash下的全域用戶登陸時執行的批處理文件
psdevtab-->kernel映象的相關文件
inittab-->初始化列表,系統啟動時要用到的東東
passwd-->用戶的password數據庫
motd-->message of today用戶login時顯示的信息
fstab-->開機時要自動mount的FileSystem
hosts-->domain name到IP的解析文件
resolv.conf-->本機的IP地址和域名服務器地址配置文件
termcap-->終端字符映射文件
services-->系統啟動時加載的服務項目
rpc-->RPC資源解釋文件
protocols-->系統協議說明文件
networks-->定義本機IP和子網的配置文件
mtools-->mtools的parameter文件
hosts.deny-->設置那些目的機不能Telnet到此主機
hosts.allow-->和hosts.deny相反,設置可以Telnet到此機的目的機地址
exports-->NFS的系統檔案
DIR_COLORS-->設置ansi-color終端的系統顏色
HOSTNAME-->本機的domain name
inetd.conf-->inetd進程的配置文件
ld.so.cache-->系統lib的緩存信息
shells-->系統可用的shell的記錄
host.conf-->本機的網絡相關配置
magic-->系統內檔案格式的資料
utmp-->當前login用戶的記錄
group-->用戶組參數記錄
ld.so.conf-->記錄一些lib所在的目錄
fastboot-->shutdown命令產生的一個文件,系統重新啟動時會檢查該文件
3./sbin目錄下的文件
這個目錄下放置一些系統擴展命令:
swapoff@->swapon-->把swapoff連接到swapon命令
telinit@->init-->把telinit連接到init命令
reboot@->halt-->把reboot連接到halt命令
addswap-->增加一個交換分區,需要自己編輯一個addswap腳本
chkhd-->檢查硬盤
clock-->測定設置時間
swapon-->打開交換分區
update-->bdflush的守護
mkswap-->格式化交換分區
agetty-->終端守護
init-->系統初始化命令
shutdown-->關閉系統
halt-->系統停機
killall5-->清出所有進程
ifconfig-->網絡配置程序
route-->路由設置命令
bdflushd-->打開buffer回寫到磁盤
4./usr目錄下的文件
用戶目錄,目錄下放置了一些用戶經常需要使用的程序和一些配置數據
spool@->../var/adm -->連接到/var/adm
tmp@->../var/adm-->連接到/var/adm
adm@->../var/adm-->連接到/var/adm
/usr/bin目錄,用戶命令文件目錄:
who-->查詢當前登陸用戶
superformat-->高級格式化工具
loadkeys-->加載鍵盤影射表
joe-->一種十分好使的編輯器
uptime-->查看系統從啟動到現在的運行時間
finger-->查詢用戶信息
mcheck-->檢查dos系統軟盤
tput-->初始化終端或者查詢終端信息
traceroute-->檢查路由路徑
host->檢查當前主機配置信息
split-->分割文件
sleep-->延遲指定時間
setfont-->設置字體
grep-->行查詢指令,常常配合管道使用
reset-->重置系統參數
usr/sbin目錄下放置了用戶需要使用的高級指令,但我們沒有使用到,看看磁
盤空間,能放些什麼自己放吧。
/usr/local目錄放置了一些應用程序的配置文件
usr/local/lib目錄
lynx.cfg-->lynx瀏覽器的配置文件
usr/lib目錄
es.map-->鍵盤映射文件
t.fnt-->字體文件
5./lib目錄下的文件
此目錄下放置了系統的一些庫文件,這裡不做解釋
libgpm.so@->libgpm.so.1
libdl.so@->libdl.so.1
ld-linux.so.1
libtermcap.so.2
libm.so.5
libc.so.5
libdl.so.1
libgpm.so.1
libtermcap.so.2
libcurses.so.1
ld.so
6./dev目錄,系統設備文件目錄,按照標準設備定制。
7./var目錄,主要放置系統參數和配置。
var/adm/
utmp-->空文件,為uucp準備的tmp文件
cron-->空文件,kernel加載時的tmp文件
/var/spool/locks目錄,放置一些正在運行的程序的臨時文件和進程號文件。
8.其他目錄都為空目錄,有:
/dosa
/dosc
/iomega
/tmp@->/dosc/onedisk
/root
9.addswap命令腳本腳本,放置在/sbin下。
if [ "$1" = "" ];
then
$mide=10000
if
dd if=/dev/zero of=/tmp/linux.swp bs=1k count=$mida
mkswap -c /tmp/linux.swp 2>/dev/null
sync 2>/dev/null
swapon /tmp/linux.swp 2>/dev/null
mida=`cat /proc/meminfo | grep SwapTotal | cut -b16-19 `
echo $mida KB aCTiuarxiu=`ls /dosc/ | grep .swp`
系統的基本文件系統就介紹完了,下面我們介紹OLD (one disk Linux)系統的
具體制作。
介紹完了主要目錄和文件的結構,我們對ODL的大概也比較了解了。 現在你可
以找一個Linux把他裁剪一下,把必要的東西放到一張軟盤上, 以後用他來啟動了
你的系統進入Linux了。然後在放進一些需要的軟件,如 Linux Router,或者其他
的小的應用軟件,那麼他就成了一台小的路由器、代理服務器,你的小玩具,你可
以用他上網,讀新聞,看信,和瀏覽。這是多麼不可以想象的事情,全不都可以在
一張1.44M的軟盤系統上實現。
制作ODL的詳細過程十分復雜,基本思想是在一張軟盤上做好可啟動的 Kernel
,然後再將定制的文件系統傳到磁盤的剩餘空間裡,啟動時先讀前面的讓系統boot
起來,再讀後面的,讓系統mount到一個Ramdisk裡,然後將定制好的文件系統解壓
縮,釋放到Ramdisk裡。這樣整個磁盤系統既有kernel,又有File System,自然可
以使用一張磁盤啟動整個Linux系統。 由于篇幅的限制,我們不詳細說明全部過程
,只把其中最關鍵的部分,定制文件系統和讓系統在無lilo的引導下啟動這兩個部
分做說明(其他目錄的相關文件,請按照開始將的文件系統結構建立)。
定制文件系統的過程如下:
dd if=/dev/zero of=DEVICE bs=1k count=3000 (分配內存空間做RamDisk)
mke2fs -m 0 -i 2000 DEVICE (格式化Ramdisk)
mount -t ext2 DEVICE /mnt (裝載到/mnt目錄下)
cp -dpR /dev /mnt (將/dev/下的硬件設備拷貝到/mnt/dev下)
mkdir /mnt/etc (建立ODL系統配置文件目錄)
寫/mnt/etc/rc.d文件,其內容如下:
#!/bin/sh
/bin/mount -av
/bin/hostname silver
寫/mnt/etc/fstab文件,其內容如下:
/dev/ram0 / ext2 defaults
/dev/fd0 / ext2 defaults
/proc /proc proc defaults
寫入/mnt/etc/inittab文件,其內容如下:
id:2:initdefault:
si::sysinit:/etc/rc
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
umount /mnt (卸載Ramdisk)
dd if=DEVICE bs=1k | gzip -v9 > root.gz (將Ramdisk內容寫入root.gz)
讓系統在無lilo的引導下啟動
mke2fs -i 8192 -m 0 /dev/fd0 KERNEL_BLOCKS (KERNEL_BLOCKS為內核部分
在磁盤上佔的空間大小)
mount /dev/fd0 /mnt
rm -rf /mnt/lost+found
mkdir /mnt/boot
mkdir /mnt/dev(建立一些啟動時需要的基本文件目錄)
cp -R /dev/{null,fd0} /mnt/dev (將啟動需要的兩個設備NULL和fd0拷貝到
啟動盤中)
cp /boot/boot.b /mnt/boot (建立boot的映象文件)
cp bdlilo.conf KERNEL /mnt (KERNEL為OLD需要的內核文件)
lilo -v -C bdlilo.conf -r /mnt (將lilo信息寫到OLD中)
其dblilo.conf的內容如下(可以根據需要修改):
boot =/dev/fd0
install =/boot/boot.b
map =/boot/map
read-write
backup =/dev/null
compact
image = KERNEL
label = Bootdisk
root =/dev/fd0
dd if=KERNEL of=/dev/fd0 bs=1k(將內核KERNEL寫到系統的前1024字節,使
OLD軟盤可以啟動系統)
dd if=rootfs.gz of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS(將原來定制的文
件系統傳到磁盤剩餘空間中)
此時,你做好的這張磁盤就可以直接將系統啟動了。如果你配置好了網絡系統
,那麼網絡也可以通過他自動啟動。如果你對Linux 還不是很了解,自己定制一個
系統還比較困難,那麼OLD的全部系統映象文件可以在http://linux.apostols.org
/guru/wen/1.x/stone.img下載得到。 將下載的文件用rawrite.exe程序在dos下寫
入一張1.44M的軟盤中,此張盤就可以啟動系統,並將你帶入到神奇的Linux世界。
值得注意的是:此映象文件是一個德國人所做,其終端鍵盤為類型不是標準的
US鍵盤,所以我們需要修改他的鍵盤定義。
系統啟動後,在/usr/lib/下有一個es.map文件,需要修改它, 可在redhat下
拷貝一個default.kmap文件,然後執行/bin/loadkeys default.kmap,此時鍵盤就
可以正常使用了。