Linux Software RAID 1 實作

常常聽到 RAID 的好處,但 towns 一直都沒嘗到甜頭,一定是 towns 的技術還有待加強,這一篇會實驗 Linux的軟體RAID的功能,並簡單說明各RAID應達到的要求

RAID 0
合併多個硬碟,最大的好處是提昇效能及擴大空間,不過,這個功能在Linux中,可用LVM方式取代,這篇文章中不說明

RAID 1
硬碟鏡像。在應用中可以說是安全性高、又有備份功能,又方便的方式,但磁碟空間與IO效能就會下降。這一個是本文的重點。towns 期望RAID 1 能達到的功能,1. 當另一個硬磁壞軌取下後,單一硬碟能運作。2. 當換上一個新硬碟後,鏡像能自動產生。

RAID 5
可以說是 0、1的中間方案,空間可用率較大,這篇文章中不說明
相關技術資料:http://zh.wikipedia.org/wiki/Raid
詳細說明:鳥哥 第十五章 磁碟配額(Quota)與進階檔案系統管理

測試系統:VMW 8、CentOS 5.5

一般正常來說,使用RAID 1做兩個硬碟的mirror,所有的磁區者能備份到,但有一個地方是備不到的,硬碟中的MBR部分,所以,如果 towns 要使用RAID 1中的第二個硬碟來開機,必須手動重建MBR,這樣在使用第二個硬碟重開機時,系統才能找到開機磁區資料,下面會一步步圖解說明來說HOWTO


soft raid 需要重開機,是不合理的,towns 要找時間再來試試

1. 建立Raid 1


在安裝時使用自定分割模式




使用新增加入軟體陣列




使用新增方式,將兩個硬碟分為相同的三塊



分割好,兩個硬碟磁區會變成這樣



使用RAID選項設定陣列



在這裡開始將磁區做為陣列,towns第一個做的是swap,切割時給了1G的空間並設為第一分區,並設得將RAID類型選為 RAID1


習慣上 towns 會將系統切為三大部分 /boot、/、swap,依序做完後,會如上圖的樣子,建立兩硬碟mirror的部分就到此完成,其他關於系統需要的套件部分,就不在此說明



在設定正確的情形,安裝過程中,兩個硬碟的燈號應該是同時明暗的。


2.單一硬碟啟動
當 towns 設定好後,當然要試試單一硬碟啟動,結果是拔掉第二個硬碟時,系統可以啟動,拔掉第一個硬碟時,系統不能啟動並出現了 GRUB Hard Disk Error 的錯誤,這是因為在第二個硬碟中,並沒有設定MBR,SoftWare Raid,並沒有辦法同步第0軌(開機磁區)

如果損壞的是第二個硬碟,可以單純的換硬碟並使用指令同步,但如果壞的是第一個硬碟,需要先建立MBR 使第二個硬碟可以開機後,再使用指令同步,這裡說明如何建立第二個硬碟的MBR


在正常的情形下,可以看到,UU,表示兩個硬就都正常掛在md中

 
拔掉第二個硬碟後,重新開機,可以正常啟動,而且會看到只剩一個 U,是第一個硬碟


拔掉第一個硬碟後,重新開機,系統無法啟動並出現錯誤

建立MBR有兩種方式,1. 已經將損壞的硬碟取出,只剩下第二個硬碟也呈現無法開機的狀態,使用linux rescue 重建MBR。2. 在硬碟未損壞前,直接使用grub為第二個硬碟建立MBR,這個方式的好處,就是不用執行第一個動作 ^0^

一般在使用 linux rescue 救援時,系統問詢問是否載入已存在的系統,但這時系統是無法載入的,towns需手動掛載磁區,並執行grub


進入救援模式後先確認硬碟位置,並確認磁區,主要是要確定是否是這個硬碟
註:在這裡有一點比較奇怪,當 towns 只掛載sda3這個磁區時,所有的path會消失,而且會造指令無法使用,所以 towns 都是同時掛載兩個磁區 sda1及sda3。


掛載後,執行grub指令進入grub管理介面,再使用root (hd0,0),進入hd0扇區,使用setup (hd0) 建立第二個硬碟的MBR
 


正常完成會出現這樣的訊息,到此,第二個硬碟的MBR已建立完成,並可以重啟動了
註1:如何確認grub抓到的硬碟順序,可看/boot/grub/device.map
註2:使用root指令掛載磁區時,切記!要掛的是boot磁區,如果掛到其他磁區(如swap)就無法重建MBR了


啟動後,查看一下raid狀態,cat /proc/mdstat,資料顯示,由第二個硬碟啟重了


3. 重建RAID 1
在較舊的主機中,放入第一個硬碟後,有可能會發生還是無法開機的情形,因為BIOS中預設使用第一個硬碟開機,這時請調整BIOS的開機順序或將第二個改為第一個硬碟


towns 拿了一個新的硬碟放上去,查看一下磁碟的變化,sda 出現了,而 raid 在sdb上,先將新硬碟磁區做好切割,使用sfdisk -d 指令來同步 sdb及sda 磁區



這樣就完成新硬碟的磁區設定,下一步是同步兩個硬碟
註1:這個動作sfdisk -d /dev/sdb | sfdisk /dev/sda 是非常危險的,如果方向設錯,RAID的磁區將被洗掉,資料也完全消失,所以在執行時,一定要非常小心
註2:sfdisk這個指令在Fedora 14中,因util-linux-ng版本不同,會出現錯誤造成不執行,而且錯誤訊息很可愛(sfdisk: I don't like these partitions - nothing changed.)


towns 習慣上都會再確認一次磁區是否正確,也要確認md*所對應的磁區,避免下一個動作出現錯誤。md1指的是/boot ,要加入的是sda1,md0指是的swap,要加入的是sda2,md2指是的 / ,要加入的是sda3,如果同步錯了,就有可能發生磁碟空間不足等問題,確認無誤後,開始同步


開始同步後,查看一下mdstat 狀態,可以看到磁區正在同步的情形,同步的時間與資料量有關

完成後,再查看狀態,會看到兩個 UU,這就是完成了

註1:完成後,最好能先將第一個硬碟的MBR 建好,就可以不使用救援模式建立MBR
註2:如果是不同大小的硬碟,也可以這麼做,只是會浪費空間而以,不過,將來仍可以使用mdadm指定來擴大指定的磁區
註3:這些動作,都可用指令來執行,也可以將沒有Raid 的系統加入哦!
註4:這是在一個完美的測試環境下做的測試,如果在客戶端做轉移時,要確定OS版本、套件版本及其他問題

相關資料:
jeantean大 http://jeantean.idv.tw/computer/raid.html
鳥哥的Linux私房菜  第十五章、磁碟配額(Quota)與進階檔案系統管理
這個要稱為茶哥吧!^^http://j796160836.pixnet.net/blog/post/26940577-%5Bfedora12%5Dlinux%E7%9A%84grub%E4%BF%AE%E5%BE%A9%EF%BC%8C%E5%AE%89%E8%A3%9Dgrub
范老師上課筆記
小舖討論區 http://www.blueshop.com.tw/board/FUM20050110200903ZWZ/BRD201110051624563KY.html


補充1:
在Feodra 14中設置RAID,第二個硬碟似乎不需做任何重作就可以直接開機!這個能是新版的mdadm套件的修正哦!但如果換了新的硬碟,並使用上述方式,新放的硬碟就必需重建MBR


關於CentOS 6.2 安裝Raid 1後,移除硬碟產生的問題
1. 在CentOS 6.2 64bit中,使用上述方式建立Raid 1,拔除任何一個硬碟,都會出現下面的錯誤
kernel panice -- notsyncing:Attempted to kill init!
這個問題似乎是 6.2版(kernel版本:2.6.32-220)的一個bug
處理方式:在安裝完成後,使用 yum upgrade更新kernel版本到2.6.32-220.7.1,該問題就解決了
相關討論:
http://bugs.centos.org/view.php?id=5400
https://bugzilla.redhat.com/show_bug.cgi?id=735124

2.  進入 linux  rescue 無法掛載磁區
掛載時會出現這樣的錯誤,看來要使用新版的套件,才會認識呢!


測試後,發覺,在CentOS62中,並不用掛載硬碟,可直接使用grub建立MBR,如果只有一個硬碟,指令就是,root (hd0,0),進入hd0扇區,使用setup (hd0) 


對現行系統加入Raid 1(指令方式)
這個可能是很常見的情形,在早期towns就有一些server並沒使用Raid 1,這時就需要手動設定了
OS:CentOS 5.8 (64Bit)

1. 加入硬碟
2. 切割磁區使新硬碟與舊硬碟磁區相同
3. 將新硬碟的磁區型態設定為 Linux raid auto
註:如果這個動作沒做,mdadm --examine --scan > /etc/mdadm.conf 會失敗
4. 增加Raid磁區(md0、md1、md2)並將新硬碟依需求加入Raid磁區
如:madmd -C /dev/md0 -l 1 -n 2 missing /dev/sdb1
5. 格式化Raid磁區
如:mkfs.ext3 /dev/md0,其中有一個是swap,要這樣下指令 mkswap /dev/md1
6. 產生Raid的設定檔
如:mdadm --examine --scan > /etc/mdadm.conf
7. 掛載Raid磁區,並將舊硬碟資料同步到Raid磁區
 7.1. mount /dev/md0 /mnt/md0
 7.2. cp -dpRx /boot/. /mnt/md0(dp,不複製symbolic link;R,複製所有項目含子目錄;x,不會跨越檔案系統進行操作)
8. 修改fstab
將/、/boot及swap 改為/dev/md2、/dev/md0、/dev/md1
9. 修改mtab
將/及/boot 改為 /dev/md2、/dev/md0
10. 修改開機清單 /boot/grub/grub.conf
11. 重建虛擬檔案系統 initrd
12. 重建MBR
13. 重啟系統
到此,Raid 1已經建立完成,其他步驟為設定舊硬碟為type為Raid及將舊硬碟加入Raid中,詳細的設定資料,請參考安大資料。此方式只能用於CentOS5版(核心為 2.6.18)

相關資料:
這是一個很多Linux 教學資源的站台
http://www.howtoforge.com/how-to-set-up-software-raid1-on-a-running-system-incl-grub2-configuration-debian-squeeze-p2
鳥哥的Linux私房菜  第十五章、磁碟配額(Quota)與進階檔案系統管理
安大資料,簡單明瞭的說明
http://anderson1029.pixnet.net/blog/post/27587198--%E4%B8%8D%E9%87%8D%E7%81%8C%E7%B3%BB%E7%B5%B1%E4%B8%8B%E5%AF%A6%E4%BD%9C-raid1-for-fedora-8-linux


CentOS 6.3 Raid 1 架設問題
在之前有試過使用CentOS 6.2架設Raid 1所發生的問題,目前找到答案了
1. 請參考上面 關於CentOS 6.2 安裝Raid 1後,移除硬碟產生的問題
2. 磁區切割問題,Patition * does not end on cylinder boundary(磁區沒有結尾),這個問題會造成移除硬碟後無法開機的問題

第二個問題主要是 towns 在做磁碟分割時的錯誤,造成磁區沒結尾的問題

在設定Raid 時,必需要選擇固定大小,不要使用 填滿分割區直到(MB)及填滿分割區至可使用的最大值。

在正確設定磁區後,使用CentOS 6.3 架設 Raid1 完成後,發覺,不需要如CentOS 5,再去建立第二個硬碟的MBR,就可以單獨使用第二個硬碟直接開機了 ^0^,這個跟Fedora 14是相同的

補充:現在有不少硬體商,將Soft Raid的功能做成了硬體哦!如Synology、QNAP,而且也解決了幾個問題
1. 開機問題:將實際系統與硬碟分開,這樣一來,硬碟就完全是RAID,與系統完全沒關係


在現行的 LVM 系統加入 RAID 1

 

參考資料:
Falko Timme 大文章
https://www.howtoforge.com/set-up-raid1-on-a-running-lvm-system-debian-etch


拆除 SoftRaid 1

mdadm /dev/md[x] --fail /dev/sd[x]
mdadm /dev/md[x] --remove /dev/sd[x]
mdadm --grow /dev/md[x] --raid-devices=1 --force

參考資料:
frostschutz 大的回應
https://unix.stackexchange.com/questions/190264/disassemble-a-raid-1-arragement-without-removing-reinstalling-the-system

留言

這個網誌中的熱門文章

zimbra 安裝、管理、設定

Fortigate 100D -- 管理、設定

IT 隨手記6