[分享] Software Raid1 (boot, root) 安裝

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

[分享] Software Raid1 (boot, root) 安裝

文章phantom » 週三 9月 29, 2004 11:35 am

有鑑於目前的硬碟價格越來越低, 耐用度也越來越低, 決定來用兩顆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 的部份就不在此詳述.
修改 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
Linux 非萬能, 沒 Linux 萬萬不能.
root = God
apt-get install ultimate-horsepower
圖檔
頭像
phantom
活潑的高中生
活潑的高中生
 
文章: 306
註冊時間: 週三 8月 18, 2004 10:23 am

文章訪客 » 週五 8月 05, 2005 12:17 pm

代碼: 選擇全部
把 /dev/hda1 加到 raid 裡面:
代碼:
# raidhotadd /dev/md0 /dev/hda1

我做了以上的步驟..它說
/dev/md0: can not hot-add disk: invalid argument.
請問該怎麼辦呢
訪客
 

文章訪客 » 週一 11月 07, 2005 11:14 am

Anonymous 寫:
代碼: 選擇全部
把 /dev/hda1 加到 raid 裡面:
代碼:
# raidhotadd /dev/md0 /dev/hda1

我做了以上的步驟..它說
/dev/md0: can not hot-add disk: invalid argument.
請問該怎麼辦呢


過了三個月… 有人能幫我看一下嗎?
假如卡在該步驟,該步驟以下的不做的話會怎樣呢?
訪客
 

文章phantom » 週一 11月 07, 2005 11:50 am

對了, 您現在用那些套件?

我寫這篇有一點久了...
那時用的是 raidtools2. 現在已不存在.

現在已改用 mdadm

有沒有其它的錯誤訊息可供參考?
請 show "cat /proc/mdstat" 及 "df -h" 的結果.
Linux 非萬能, 沒 Linux 萬萬不能.
root = God
apt-get install ultimate-horsepower
圖檔
頭像
phantom
活潑的高中生
活潑的高中生
 
文章: 306
註冊時間: 週三 8月 18, 2004 10:23 am

文章訪客 » 週一 11月 07, 2005 7:17 pm

phantom 寫:對了, 您現在用那些套件?

我寫這篇有一點久了...
那時用的是 raidtools2. 現在已不存在.

現在已改用 mdadm

有沒有其它的錯誤訊息可供參考?
請 show "cat /proc/mdstat" 及 "df -h" 的結果.


cat /proc/mdstat

Personalities : [raid1]
md0 : active raid1 sdb1[0]
34652096 blocks [2/1] [U_]

unused devices: <none>

------------------------------------
df -h

Filesystem Size Used Avail Use% Mounted on
/dev/md0 33G 23G 8.3G 74% /
tmpfs 253M 0 253M 0% /dev/shm

關於您寫的,我幾乎完全看不懂;我的環境是 sarge
只能照著上面操作..
所以遇到問題也不知道該怎麼解決 :crying:
謝謝您的回覆
因為這是好久之前做到一半然後放著的 raid,但是印象中從該步驟之前都做的蠻順利的,都沒出現不太正常的訊息
訪客
 

文章phantom » 週二 11月 08, 2005 9:11 am

您用的是 sata 或 scsi 硬碟?

md0 : active raid1 sdb1


如果是, 指令請改為:
# raidhotadd /dev/md0 /dev/sda1
Linux 非萬能, 沒 Linux 萬萬不能.
root = God
apt-get install ultimate-horsepower
圖檔
頭像
phantom
活潑的高中生
活潑的高中生
 
文章: 306
註冊時間: 週三 8月 18, 2004 10:23 am

文章訪客 » 週二 11月 08, 2005 2:06 pm

phantom 寫:您用的是 sata 或 scsi 硬碟?

md0 : active raid1 sdb1


如果是, 指令請改為:
# raidhotadd /dev/md0 /dev/sda1


我是用 sata 的硬碟,您上面的教學我是全部改成 sda 去弄
把 hda1 改成 sda1 也是一樣..
/dev/md0: can not hot-add disk: invalid argument.
訪客
 

文章phantom » 週二 11月 08, 2005 2:21 pm

看一下 /var/log/messages
有沒有相關的錯誤訊息.

我現在沒有環境可以進行測試...
Linux 非萬能, 沒 Linux 萬萬不能.
root = God
apt-get install ultimate-horsepower
圖檔
頭像
phantom
活潑的高中生
活潑的高中生
 
文章: 306
註冊時間: 週三 8月 18, 2004 10:23 am

文章訪客 » 週三 11月 09, 2005 2:03 am

phantom 寫:看一下 /var/log/messages
有沒有相關的錯誤訊息.

我現在沒有環境可以進行測試...


有ㄝ!

cat /var/log/message 最下方:

代碼: 選擇全部
Nov  9 02:01:09 localhost kernel: md: trying to hot-add unknown-block(8,1) to md0 ...
Nov  9 02:01:09 localhost kernel: md: error, md_import_device() returned -16
訪客
 

文章phantom » 週三 11月 09, 2005 10:01 am

這...

我也幫不了你... :-?
sorry...
Linux 非萬能, 沒 Linux 萬萬不能.
root = God
apt-get install ultimate-horsepower
圖檔
頭像
phantom
活潑的高中生
活潑的高中生
 
文章: 306
註冊時間: 週三 8月 18, 2004 10:23 am

文章kibymo » 週三 11月 05, 2008 7:03 pm

我參考這一篇完成Install Debian Etch on a Software Raid 1 with S-ATA disks
http://andreas.scherbaum.la/blog/archiv ... disks.html
寫的不錯供參考 ,沒用過還真不會設定
kibymo
懵懂的國中生
懵懂的國中生
 
文章: 114
註冊時間: 週六 12月 13, 2003 10:06 pm


回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客