2007年5月7日 星期一

LPI心得筆記簿 ─ 硬碟規劃(RAID)

今年一月,跑去上了某電腦補習班有關於LPI的認證課程,花了不少的銀子,所以只好乖乖的去上課(全勤,唸書有這麼乖就好),之後一直忙於轉換工作的事情,總是覺得沒時間複習,所以就上來跟大家一起分享上課的心得,同時也在這地方與大家做個交流吧!如果有所遺漏之處還請各位不吝指教

前言:

1. 其實在上LPI之前,有先安排關於網路概論的課程,這裡不加說明(跳線就是當時老師說不用教的地方= =+),不過這跟大學課程中機算機概論的部份有許多雷同之處(除了ROUTE TABLE之外),需要的人還是回去翻翻家中已蓋滿灰塵的機概吧!

2.說明一下上課時所用的系統,使用FEDORA6(那時剛出約一個多月吧!),雖然說只是LINUX的一個分支,不過因為使用者較多,且社群的資料較多,硬體部份就略過了(補習班的硬體能夠多好呢?唉...),現在還有一股熱潮的UBUNTU當然也不可小看(因為有金主支持總是比較有利),不過因為使用模組不同(不知這說法有無不當UBUNTU為Debian、FEDORA為 Redhat),真的有需要的也可以去參考一下

安裝:

在安裝之前要先介紹一下硬體的規畫,在剛開始上手時,可以用防呆的安裝法,全部下一步(同時關閉防火牆及SELINUX),如果是要在實務上應用的主機,就要動點頭腦規畫

硬碟規畫:首先要先有RAID或是LVM的規畫概念,這裡先介紹RAID

RAID(Redundant Array of Independent Disks,俗稱為磁碟陣列),level有分為RAID0~6七種類型,不過一般常見的應用仍只有RAID 0、1和5三種

舉例來說:如果我們要存一份資料,其中包括了A、B、C、D四個資料的組合

RAID 0:需二個硬碟
分別把A、B和C、D分別存在不同的PARTITION中,特性是速度快,但無安全性,因為資料是分存在兩個不同的磁碟中(如果兩個PARTITION是在同個硬體磁碟區中則無意義),所以可以增進存取速度,但是其中一個硬碟如果毀損就會造成該資料無法存取

RAID 1:最少需二個硬碟
分別把A、B、C、D存在兩個不同的PARTITION中,特性是安全性高,但速度慢,因為是將資料同步存在兩個不同硬碟當中,故所需時間較久,所以也不能夠把兩份資料存在同一個硬體磁碟中,不然硬體壞了,資料受損機率也極高

RAID 5:最少需三個硬碟
意思類似將A、B、C和B、C、D及A、C、D分別存在三個不同硬體磁碟區中,特性是速度比RAID 1快、安全性較RAID 0好,因為只要三個其中一個硬碟毀損,我們還是可以利用剩下兩個讀取到完整的資料,但是建構成本較高(硬碟多一個)

PS:當RAID1和5的其中一個硬碟毀損時,需要一個新的硬碟來做為備援(Hot Spare),這個備援的硬碟也可以在一開始時就加入mdadm在建立raid的架構中,所以在本文後段的範例中,筆者已經直接把備援的硬碟,在建立raid時就直接加入(即時性
的考量)

在linux中的製作模組為mdadm,當準備好四個相同大小的硬碟後,以
# rpm -qa | grep mdadm(以rpm方式查詢是否具有此套件)

無:mdadm
# yum -y install mdadm (利用線上更新yum來安裝此套件)

有:mdadm
# uname -r(確認kernel 2.4以上版本才支援RAID)

建立RAID的使用指令

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

可利用--detail參數來觀看建立好的RAID 0(1、5)的資訊
# mdadm --detail /dev/md0(md1、5)

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

格式化:
# mke2fs -v -b 4096 -R stride=16 /dev/md0(md後為數字0)
(-R stride=n來增加效能,因為chunk-size=block*stride,因此對於RAID 0來說可以增加效能,對於其它RAID不一定能增加效能,例:RAID 1)

掛載並使用
# 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)

寫入/etc/fstab(開機時會載入的硬體設定檔)
# vi /etc/fstab(以vi編輯/etc/fstab設定檔)

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

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

建立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中的資料做測試)
# mdadm /dev/md0 -f /dev/hdc9 (測試/dev/hdc9壞掉時)
# mdadm -D /dev/md0

恢復/dev/hdc9
# mdadm /dev/md0 --remove /dev/hdc9
# mdadm /dev/md0 --add /dev/hdc9

建立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在Linux(Fedora)中的實作,如有興趣也可以自己實作一下,當然不用真的準備這麼多實體硬碟,可以在同個硬碟中割出4個相同大小的PARTITION來測試,等真的有這麼多實體硬碟時才能派上用場

不過這種軟體的RAID,效能上一定比不上動輒數萬元的硬體RAID備援來得高,但是對於小市民來說,也無非是種資料備援的手段之一(也要看是那種重要資料啦!)

PS:發現隨便整理一小點筆記就可以寫出來一堆,真害怕後面的路...