這是有一段時間前寫的文章,到現在,Debain 也改版了,raidtools2 也不存在 Debian 的套件裡了,而是用 mdadm。所以,以下的文章可以參考步驟,但是使用的指令一定會有不同。

現在比較沒機會再去把 Non-Raid 的系統轉換為 Raid,如果有,或許我會再來一篇 update。

有鑑於目前的硬碟價格越來越低, 耐用度也越來越低,決定來用兩顆IDE的硬碟來做 software raid1。很多人可能會覺的 boot,root disk 為何要 mirror?重灌就好了!我比較懶,我想只換硬碟就好,更何況,我換硬碟的速度絕對比重灌來的快,所以上網找了一些文章就做了。

安裝 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 的部份請參考Software Raid 1 之 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,把 failed-disk 改為 raid-disk:

# 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/hdb1
raid-disk 0
device /dev/hda1
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
http://lists.us.dell.com/pipermail/linux-poweredge/2003-July/008898.html