iT邦幫忙

21

不景氣下的省錢妙招 在linux上玩 Soft RAID

從23歲踏入IT產業後,因為工作的關係(自我滿足居多)手上的電腦始終保持三台以上,最多的時候小小的房間裝了七台主機,有novell的netware3.12、win nt、win31、dos等等。一有新的硬體就會死命存錢買,有新軟體也會死命買"泡麵"(現在大概已經不流行了,大家都改用BT Emule)。好不容易結婚了,在老婆的嚴格管教下,不敢再亂買~但還是維持三台PC+四台NB 哈哈~資料越來越多,小孩的照片、老婆的韓劇日劇、自己的程式、學習筆記等等,本想買壹台NAS,可是...有點貴,而且為了省電書房不開冷氣簡直要人命,所以決定拿一台現成的PC來玩玩RAID,前提是不花錢啦!以下就來看看過程吧!
這一次我安裝 Mandriva 10,核心是2.6,使用 mdadm這一套softraid 軟體,程序如下(整理於 自身建立過程與網路資料):

安裝

先安裝 # rpm -ivh mdadm-1.12.0-1mdk.i586.rpm ...應該已經夠用!沒有 RAID10 及 GROW MODE
也可再升級 # rpm -Uvh mdadm-2.6-1.i386.rpm

==========
準備磁碟

fdisk -l (顯示所有系統上的硬碟狀況,可以知道哪一些硬碟尚未配置及代號)

fdisk /dev/sdb

將設備/dev/sdb上的全部磁碟空間劃分給一個主分區,建立/dev/sdb1分區,並修改分區的類型標識為fd(linux raid auto)

建立RAID的使用指令

清除已經建立的raid記錄資料 重新開始

mdadm -C /dev/md0 -l5 -n3 /dev/sd{a,b,c}1 --assume-clean

注意,如果沒有使用--assume-clean系統建立陣列後,會自動重建原有的內容!若要全新來過,一定要加此指令!

============
建立RAID 0:

mdadm -Cv -l 0 /dev/md0 -n 2 /dev/hdc {8,9}

-C是指建立
-v是指察看過程
-l是指建立的屬於level linear、0、1或5
/dec/md0是指在linux中建立的裝置名稱為RAID 0
-n 2是指幾個RAID裝置屬於建立好的RAID 0
/dev/hdc {8,9}是指建立在/dev/hdc8和/dev/hdc9兩個partition上

======================
查閱目前的raid資訊

方法一:
可利用--detail參數來觀看建立好的RAID 0(1、5)的資訊

mdadm --detail /dev/md0(md1、5)

其中有chunk-size是指寫進一個partition的大小 ,例如RAID 0中把一個file同時寫進兩個或以上partition時,會把file分成多大寫進其中一個partition(系統記
錄在/proc/mdstat)

方法二:
mdadm -D /dev/md0

========
格式化:

ext2 格式:

mke2fs -v -b 4096 -R stride=16 /dev/md0(md後為數字0)

(-R stride=n來增加效能,因為chunk-size=block*stride,因此對於RAID 0來說可以增加效能,對於其它RAID不一定能增加效能,例:RAID 1)

ext3格式:
mkfs -t ext3 /dev/md0

==========
掛載並使用

mkdir /mnt/md0(建立/mnt/md0資料夾)

mount /dev/md0 /mnt/md0(掛載/dev/md0至/mnt/md0)

============
解除RAID裝置

umount /dev/md0(卸載/dev/md0)

mdadm -S /dev/md0(參數-S會直接解除 /dev/md0上的RAID 0)

================
重新啟用raid裝置

方法一:直接指定使用的磁區

mdadm -A /dev/md0 /dev/sd{c,d,e}1 (啟動先前已經建立的陣列,並指定原來使用的磁區)

方法二:使用配置檔 /etc/mdadm.conf
mdadm的缺省配置檔為/etc/mdadm.conf,它主要是為了方便陣列的日常管理而設置的,對於陣列而言不是必須的,但是為了減少日後管理中不必要的麻煩,還是應該堅持把這一步做完。
在mdadm.conf檔中要包含兩種類型的行:
一種是以DEVICE開頭的行,它指明在陣列中的設備列表;
另一種是以ARRAY開頭的行,它詳細地說明了陣列的名稱、模式、陣列中活動設備的數目以及設備的UUID號。
格式如下:
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0
以上的這些資訊可以通過掃描系統的陣列來獲取
建立好被製檔案後,啟動的語法如下

mdadm -As /dev/md0 (s 表示使用配置檔中的設定啟動raid)

======================
如果是做raid1+0 的啟動

mdadm -As /dev/md0

mdadm -As /dev/md1

mdadm -A /dev/md2 /dev/md{0,1}

===================
希望開機時直接啟用 .....前提是必須建立配置檔才可以,不然開機時無法順利啟動raid

=======
方法一:

當不是使用raid1時,或是raid1的硬碟群不很大!至於極限到哪,未測試!
寫入/etc/fstab(開機時會載入的硬體設定檔)

vi /etc/fstab(以vi編輯/etc/fstab設定檔)

最後一行加入
/dev/md0 /mnt/md0 ext2 default 0 0

(fstab欄位說明)
第一欄 實際的 device 名稱。
第二欄 對應到的目錄結構(mount point)。
第三欄 該分割區的檔案系統ext、ext2、msdos、iso9660、nfs、swap。
第四欄 在 mount 時的參數。
第五欄 在使用 dump 時是否記錄,不需要則輸入0。
第六欄 決定在開機時執行 fsck 的先後順序。

=======
方法二:

針對raid1硬碟群過大的時,必須加入指令於
/etc/rc.d/rc.sysinit or /etc/rc.d/rc.local
的最後面,讓raid1先隨系統啟動!以免無法順利掛載!
mdadm -As /dev/md0
mount /dev/md0 掛載目錄

=======
方法三:

在/etc/profile.d/
自行增加 **.sh的指令檔 例如 vi mdadm.sh
然後賦予mdadm.sh執行的權限 chmod 755 mdadm.sh
mdadm -As /dev/md0
mount /dev/md0 /dev/md0 掛載目錄

===>以上應該已經可以建立完成一個soft raid,以下是一些補充建立、修復說明

=========================================
建立RAID 1(建立流程,並參考RAID 0之說明)

mdadm -Cv --level=1 /dev/md0 -n 2 /dev/hdc8 /dev/hdc9 -x1 /dev/hdc10

(-x:指定備用的硬碟,當其中一個毀損時會自動備援)

mke2fs -j /dev/md0

mount /dev/md0 /mnt/md0

cp -a /bin /mnt/md0(copy /bin中的資料做測試,-R 可以讓複製過去的資料保有相同的資料權限)

=======================
測試/dev/hdc9壞掉與替換

mdadm /dev/md0 -f /dev/hdc9 (測試/dev/hdc9壞掉時,將/dev/hdc9標記為已損壞的設備)

mdadm -D /dev/md0 查閱raid目前狀況一

=================
查看當前陣列狀態二..可以看到目前正在自動恢復資料,這是抓其他地方的資料來補充,並不是原來的raid1

more /proc/mdstat

Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb14
75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [_UU]
[=>...................] recovery = 8.9% (3358407/37734912) finish=1.6min speed=9382K/sec
unused devices:

因為有備份設備,所以當陣列中出現設備損壞時,陣列能夠在短時間內實現重構和
資料的恢復。從當前的狀態可以看出,陣列正在重構,且運行在降級模式,
sdb1[4]的後面已經標上了(F),活動設備數也降為2個。

經過幾分鐘後,再次查看當前陣列狀態。

more /proc/mdstat

Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[0] sdc1[1] sdb13
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:

此時陣列重構已經完成,資料恢復完畢,原有的備份設備sde1成為了活動設備。

=============
恢復/dev/hdc9

mdadm /dev/md0 --remove /dev/hdc9 移除損壞的設備

mdadm /dev/md0 --add /dev/hdc9 將新設備添加到陣列中

mdadm --grow /dev/md-linear --add /dev/new-device 如果使用的是 linear raid

=========================================
建立RAID 5(建立流程,並參考RAID 0之說明)

mdadm -C -l 5 /dev/md0 -n 3 /dev/hdc{8,9,10} -x 1 /dev/hdc11

(可加入-c128的參數,代表chunk-size為128:可以增加raid的效能,由於是軟體陣列所以是使用系統主記憶體來進行 chunk,這個數值設大一點雖然對磁碟陣列效能有幫助,但卻會耗掉系統資源,建議使用預設值就好了)

下一次再分享我建立的raid10用作檔案伺服器過程~


0
jjw
iT邦研究生 1 級 ‧ 2008-07-23 22:33:21

謝謝分享

0
鐵殼心
iT邦高手 1 級 ‧ 2008-07-25 10:50:09

這個寫的太詳細了
請問可以轉載來當作教材嗎?

可以啊~只是記得滿足一下小弟的虛榮心,讓我知道你轉載的位置,有空也去逛逛~

0
willlee
iT邦新手 5 級 ‧ 2012-12-20 11:40:42

我在server上也是用軟RAID。
作的是RAID 1。

現在硬碟品質實在太遜了,一年左右就掛了…很囧
目前已更換過二次
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md0 --add /dev/sdb1

我要留言

立即登入留言