安裝 system 的部份我就不詳述了, kernel compile 的部份也寫的比較簡單, 如有需要請參考其它文件.
系統環境:
1. Debian 3.0 r1 (Woody),
2. lilo 安裝於 MBR,
3. lilo 版本為 22.2-3
4. 系統安裝於 /dev/hda1, 而 /dev/hdb 目前是空的.
第一步, 安裝 raid-tools2:
- 代碼: 選擇全部
# apt-get install raid-tools2
第二, 重新編譯 kernel, 要把 raid 的部份編入 kernel. 因為如果只是用 module 的方式做的話, 將不能從 raid 開機.
我用的是 2.4.19, 您可自行決定要使用的 kernel 版本.
- 代碼: 選擇全部
# apt-get install kernel-source-2.4.19
# apt-get install debhelper modutils kernel-package libncurses5-dev
# apt-get install fakeroot
在 /etc/kernel-pkg.conf 加入您的名字和 e-mail:
- 代碼: 選擇全部
# vi /etc/kernel-pkg.conf
解壓縮 kernel source:
- 代碼: 選擇全部
# cd /usr/src
# tar --bzip2 -xvf kernel-source-2.4.19.tar.bz2
# cd kernel-source-2.4.19
您原本的 config 可能和我的不同, 請自行修改:
- 代碼: 選擇全部
# cp /boot/config-2.4.18-bf2.4 .config
修改 config:
- 代碼: 選擇全部
# make menuconfig
在 "Multi-device support (RAID and LVM) --->" 的底下
確定將你要用的 Raid 模式加為 build-in <*> 而不是 module <M>
- 代碼: 選擇全部
Multiple devices driver support (RAID and LVM)
<*> RAID support
<*> Linear (append) mode
<*> RAID-0 (striping) mode
<*> RAID-1 (mirroring) mode
<*> RAID-4/RAID-5 mode
<M> Multipath I/O support
<M> Logical volume manager (LVM) support
Compile 新的 kernel:
- 代碼: 選擇全部
# make-kpkg clean
# fakeroot make-kpkg --append_to_version -486 --initrd \
--revision=rev.01 kernel_image \
modules_image # modules_image is for pcmcia-cs* etc.
# cd ..
make-kpkg kernel_image 會做 make oldconfig 和 make dep. 如果您不是用 initrd, 不要加入 --initrd 這一個 option.
安裝新的 kernel image:
- 代碼: 選擇全部
# dpkg -i kernel-image*.deb pcmcia-cs*.deb
用新的 kernel 重新開機.
現在可以開始做 Raid 的部份:
以最簡單的 layout 來做示範:
hda 和 hdb 為一模一樣的硬碟, partition 也切的一模一樣.
- 代碼: 選擇全部
/dev/hda1 -> /
/dev/hda2 -> SWAP
/dev/hdb1 -> /
/dev/hdb2 -> SWAP
建立 /etc/raidtab 如下:
- 代碼: 選擇全部
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
chunk-size 32
# Spare disks for hot reconstruction
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb1
raid-disk 0
# boot is marked failed as well
device /dev/hda1
failed-disk 1
注意: /dev/hda1 目前是設定為 failed-disk
把第二顆硬碟(/dev/hdb1)的 file system type 改為 "fd"
我用 fdisk /dev/hdb, 下指令 (t), 選 partition (1), File system ID (fd)
建立 raid:
- 代碼: 選擇全部
# mkraid /dev/md0
我是用 ext3 的 file system, 您可自行選擇您喜愛的 file system
- 代碼: 選擇全部
# mkfs.ext3 /dev/md0
建立一個暫時的目錄要將 md0 mount 起來
- 代碼: 選擇全部
# mkdir /mnt/md0
# mount -t ext3 /dev/md0 /mnt/md0
# cd /
將所有檔案 copy 到 /mnt/md0
- 代碼: 選擇全部
# find . -xdev | cpio -pm /mnt/md0
重新開機一次, 確定 raid 有跑起來
- 代碼: 選擇全部
cat /proc/mdstat
應該會顯示:
- 代碼: 選擇全部
Personalities: [rad1] pmultipath]
read_ahead 1024 sectors
md0 : active raid1 hdb1[0] hda1[1]
16064896 blocks [1/2] [U_]
再把 raid mount 起來.
- 代碼: 選擇全部
# mount -t ext3 /dev/md0 /mnt/md0/
# cd /mnt/md0/etc
# vi lilo.conf
因為我用的是 lilo, grub 的部份就不在此詳述.
修改 lilo.conf, 把 boot device 改為 /dev/md0 (原本為 /dev/hda1)
- 代碼: 選擇全部
boot=/dev/md0
測試修改完的 lilo.conf
- 代碼: 選擇全部
# lilo -t -C /mnt/md0/etc/lilo.conf
如果沒有任何的錯誤訊息, 安裝 lilo
- 代碼: 選擇全部
# lilo -C /mnt/md0/etc/lilo.conf
修改 /etc/fstab (我只有列相關的 entry):
原本為:
- 代碼: 選擇全部
/dev/hda1 / ext3 errore=remount-ro 0 1
修改為:
- 代碼: 選擇全部
/dev/md0 / ext3 errore=remount-ro 0 1
# 兩個 swap 的 partation 都用
/dev/hda2 none swap sw 0 0
/dev/hdb2 none swap sw 0 0
重新開機.
確定您是從 raid 開機:
- 代碼: 選擇全部
# df -h
會 show 類似以下的資訊:
- 代碼: 選擇全部
Filesystem Size Used Avail Use% Mounted on
/dev/md0 35G 770M 32G 3% /
更改 /dev/hda1 的系統 id 為 "fd"
改完後再 check 一次:
- 代碼: 選擇全部
fdisk -l /dev/hda
會 show "fd" 為系統 Id.
把 /dev/hda1 加到 raid 裡面:
- 代碼: 選擇全部
# raidhotadd /dev/md0 /dev/hda1
您可以用下面的指令看 sync 的程度:
- 代碼: 選擇全部
cat /proc/mdstat
我等它 sync 再做以下的動作(應該非必要)
最後要來做, 用 raid 來 boot:
修改 /etc/lilo.conf
注意: lilo 版本為 22.2-3
- 代碼: 選擇全部
# 先前已修改的部份
boot=/dev/md0
# 新增加用 raid 開機
raid-extra-boot=/dev/hda,/dev/hdb
如果是 lilo 21.5beta:
- 代碼: 選擇全部
boot=/dev/md0
root=/dev/md0
最後, 再次修改 /etc/raidtab
1. 最主要把 failed-disk 改為 raid-disk
2. (非必要)我把 device 的順序修改為 /dev/hda1 在 /dev/hdb1 的前面.
- 代碼: 選擇全部
# md0 is the /boot /root array
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
chunk-size 32
# Spare disks for hot reconstruction
nr-spare-disks 0
persistent-superblock 1
device /dev/hda1
raid-disk 0
device /dev/hdb1
raid-disk 1
大功告成!!!
參考網站:
http://www.subnet.at/howtos/linux-software-raid1.html#partitions
http://www.faqs.org/docs/Linux-mini/Boot+Root+Raid+LILO.html#s4
http://members.ferrara.linux.it/calicant/docs/debianraid/debian_raid1.html
http://docman.sourceforge.net/home_html/md-raid1.html