Topic: 複製Linux到新的硬碟
a. 前言
最近我拿了一顆新的硬碟..想說跑跑Debian
當然每次裝Debian都很容易,跑跑光碟片就可以完全裝好了
但是我想試試看..有沒有別的方法..直接copy Linux到HDD上
所以我拿了OpenGroupware.org版的Knoppix CD複製..
把過程記錄下來
b. 說在前頭
這種安裝方式,其實idea是從LFS中的Contructing Temporary System來的
經過我的試驗,雖然可以.但是跑出來的Linux並不是很好,也不完整,
不適合作第一次安裝的方式.. 不過如果你願意..我想在vmware中練習也是很好啦
c. 上路囉!
1. 掏出你的Knoppix光碟吧!
Knoppix真是一個好東西..LiveCD可以讓你馬上有一個現成的Linux
如果你也是跟我一樣用OpenGroupware.org版的Knoppix
請你在開始LILO的畫面中輸入
knoppix lang=us 2
<說明>
lang=us 代表使用英文, 因為預設是德文..Keyboard的排列真的不太一樣
在德文的鍵盤中, = 要用Shift+0打出來
2 代表使用init 2 , 不進入X-Window的環境
一但進入Knoppix後,你會以root身份在Knoppix中
2. 新硬碟的安裝
新的硬碟當然要分割,以及格式化
這方面我不多談,請見任何一本介紹Linux書,大概會有介紹吧
我的硬碟是 /dev/hda1 , 也已經mkfs -t ext3 /dev/hda1 好了
所以在Knoppix中,把他抓進來吧
#mkdir /mnt/hda1
#mount /dev/hda1 /mnt/hda1
<說明>
mkdir代表建立目錄,這裡是為了要把硬碟抓進來,放在這個目錄
mount 把硬碟載入進來
3. 好啦..先了解Linux Tree吧
一個Linux 要跑得起來,基本上先了解他的硬碟目錄結構吧
/etc 這個目錄充滿著設定檔,有點像是在DOS下的config.sys,autoexec.bat的味道
/bin bin代表binary.是一般Linux基本的程式會放的地方 ,比如ls, mkdir , dir , cp 等等
有點像是MS-DOS的外部指令
/sbin 和上面的相同,不過擺的是一些比較屬於管理的程式,比如 MAKEDEV , fdisk , fsck , ifconfig ,init等等
/lib 這個很重要,是放置系統常用的程式庫, 比如glibc,等等 ,
在這個目錄中,有一些檔案很重要,比如ld-linux.so.2 , libc.so.6 等等
,此外,/lib/modules下面是放置Kernel編譯出來的modules, 這些也很重要,有點算是"驅動程式"的東西
/dev 在Linux的世界中,把所有的裝置當成是一個檔案,比如說/dev/hda 代表IDE中,IDE0的Master硬碟,比如/dev/dsp 代表你的音效卡,
/dev/eth0 代表你的第一張Ethernet網路卡..都很重要
/boot 這個目錄不一定要有,不過Knoppix是拿他擺設kernel 和system map的地方,當然重要
/proc 這個目錄是一個很特別的地方,是你電腦狀況,比如說你想知道你記憶體用的多少
以前在DOS中有一個mem.exe,在Linux中可以看/proc/meminfo來知道,
輸入cat /proc/meminfo即可
cat /proc/version 可看你的Linux版本, cat /proc/uptime 可看你開機多久等等
/mnt 這個目錄不一定要有,通常我拿他來放置要掛載的東西,比如說我會先建立一個/mnt/floppy這樣的目錄,再把/dev/fb0 把他mount起來
/usr /usr/通常是拿來放每個人自己編譯的程式,或是自己安裝的程式,不屬於系統的程式,像是我的/usr/bin就有像是xmms,mozilla等等應用程式
有點像是MS-Windows下的c:\Program Files這個目錄
/var 通常是一些log檔案會擺的地方
/tmp 常見,擺設temporary file的地方..通常是放暫存檔案
/ 就是你的linux root,根目錄啦
4. 好啦,這樣我要開始複製囉!!
在知道Linux Directory Tree後,我們開始真正行動吧
剛剛已經把硬碟mount到/mnt/hda1了.所以現在我們到那裡面去開始新的Linux吧
#cd /mnt/hda1
開始建立必備的目錄
[/mnt/hda1]mkdir bin boot dev etc home lib mnt proc sbin tmp usr var
1. 複製你的bin目錄
[/mnt/hda1]cd bin
請你一個一個複製下面的程式
</bin建議複製的名單>
ls (就是DOS下的dir)
dir (和ls類似)
mkdir (建立目錄用)
rmdir (取消目錄用)
cp (複製檔案用)
dmesg (看開機訊息用)
gunzip gzip (壓縮和解壓縮用)
login (登入用)
more (常用,用法是cat yourfile |more ,防止卷頁用)
mv (搬移檔案用)
sh, bash (Shell)
touch (建立空白檔案用)
mount , umount (掛載東西用)
cat (看文件用,有點像是DOS下的type)
echo (這在用Shell Script常用)
greo (常用,為查看檔案內容用)
mktemp (常用,建議暫存檔案用)
sed (Stream Editor,常用)
tar (包檔案用,就是通常說的tarball..)
uname (看系統資訊用,有點像是DOS中的ver)
hostname (設定主機名稱用)
su (變換身份用)
[/mnt/hda1/bin]cp /bin/ls .
就像這樣,把他們通通拷貝吧!!
2. 複製你的/etc目錄
[/mnt/hda1/bin]cd ../etc
請你一個一個複製下面的程式
</etc建議複製的名單>
fstab , mtab (掛載設備的紀錄檔)
inittab (必拷,有點像是config.sys)
lilo.conf (設定Lilo用,lilo=LInux LOader)
services , protocol(網路設定的檔案,有需要)
/etc/init.d/rcS (必拷,有點像是autoexec.bat)
/etc/joe/* (因為我愛用joe,所以也要拷貝他的設定檔)
[/mnt/hda1/etc]cp /etc/fstab .
就像這樣,把他們通通拷貝吧!!
如果是init.d ,joe這兩個,就先建立目錄再複製
[/mnt/hda1/etc]mkdir init.d
[/mnt/hda1/etc]cd init.d
[/mnt/hda1/etc/init.d]cp /etc/init.d/rcS .
[/mnt/hda1/etc/init.d]cd ..
[/mnt/hda1/etc]mkdir joe
[/mnt/hda1/etc]cd joe
[/mnt/hda1/etc/joe]cp /etc/joe/* .
2. 複製你的/boot目錄
[/mnt/hda1/etc/joe]cd ../../
[/mnt/hda1]cd boot
[/mnt/hda1/boot]cp /boot/* .
[/mnt/hda1/boot]ln -s System.map map
[/mnt/hda1/boot]cd ..
[/mnt/hda1]ln -s boot/vmlinuz vmlinuz
這個步驟把Linux的Kernel複製過來
3. 複製你的/lib目錄
[/mnt/hda1]cd lib
[/mnt/hda1/lib]cp /lib/librt.so.1 .
[/mnt/hda1/lib]cp /lib/libc.so.6 .
[/mnt/hda1/lib]cp /lib/libpthread.so.0 .
[/mnt/hda1/lib]cp /lib/ld-linux.so.2 .
[/mnt/hda1/lib]cp /lib/libncurses.so.5 .
[/mnt/hda1/lib]mkdir -r /lib/modules .
最後一個指令是把kernel 的modules也一並複製過來, 會比較方便
4. 複製你的/sbin目錄
[/mnt/hda1/lib]cd ../sbin
請你一個一個複製下面的程式
</sbin建議複製的名單>
fdisk (分割硬碟用)
halt (關機用)
init (必備,一定要複製)
lilo,lilo.real (必備,裝開機用)
lsmod (查modules用)
modprobe (必備,裝上modules用)
shutdown (必備,關機用)
fsck (有點像是DOS下的chkdsk, scandisk的)
insmod (裝modules用)
reboot (重開機)
runlevel (設定跑得RunLevel)
ifconfig, route (設定網路卡有用)
[/mnt/hda1/sbin]cp /sbin/fdisk .
就像這樣一個一個copy吧
5. 複製你的/usr目錄
其實對我而言,主要是一個joe要拷貝
[/mnt/hda1/sbin]cd ../usr
[/mnt/hda1/usr]mkdir bin
[/mnt/hda1/usr/bin]cp /usr/bin/joe .
好啦
6. 複製你的/dev目錄
[/mnt/hda1/usr/bin]cd ../../
[/mnt/hda1]cd dev
[/mnt/hda1/dev]cp -a /dev/* .
這裡比較特別,cp 要加上-a ,代表複製檔案本身,並非設備
5. 呼呼.終於複製好了..現在怎麼辦!!
[/mnt/hda1/dev]cd ..
現在我們要修改lilo.conf這個檔案,才能夠重新開機阿!!
[/mnt/hda1]cd etc
[/mnt/hda1/etc]joe lilo.conf
修改幾個地方
"!Please Edit .... " 這行前面加一個#
把boot=/dev/hda
找一個default=Knoppix 修改一下
改成以下狀況
default=Linux
image=/vmlinuz
append="lang=us apm=power-off vga=791 quiet"
root=/dev/hda1
label=Linux
read-write
存檔離開...
重開機,並且準備Debian的第一張光碟..或是請你去抓一下Slackware的Rescue磁碟都可以
6. 重要的時刻來臨了
我是把Debian光碟放進去啦,用光碟開始
在出現光碟的lilo時候,輸入下面的指令
#rescue rw root=/dev/hda1
就會開使用新硬碟當成是root, 不過因為Knoppix所附送的Kernel是2.4.20 ,而Debian的是2.2 所以會出現許多找不到/lib/modules/2.2.??的訊息
不用管他
等到開好後,輸入
lilo -v -v -v
把Lilo裝到你的硬碟, 這樣你就可以用硬碟開機了,當然是馬上又重新開機吧
7. 哈哈.現在終於一切都可了..不過開機會出現很多很多的錯誤訊息
這些你必須修改你的/etc/inittab , /etc/init.d/rcS檔案等等,才可以獲得一個比較單純的Linux環境
d. 後記
我是真的很無聊,所以才考慮這樣的粗略,就沒有內容的方式安裝Linux,
不過這樣讓我對Linux的概念真的深入不少...,至少知道如何徒手裝 Linux,
不過已經有很完整這方面的資料,請你看看http://www.linuxfromscratch.org
我是用類似的觀念的..
隨時歡迎與我討論;-)
This document is written in Kwrite, Debian , Linux kernel 2.4.18-bf2.4