2013年10月16日 星期三

Linux Software RAID 介紹

最近接到一個任務,就是要把Server裡的資料都放到RAID 1(mirror)上,雖然每天都會自動備份,但若能有更即時的mirror,哪天硬碟壞了,換上新硬碟直接resync即可,而每天的備份就當第二層防護,畢竟公司的資料可是相當寶貴的。

蕃薯選用Linux內建的Software RAID功能,它比起Hardware RAID有以下優點:
1. 省錢,這是最主要的因素,以蕃薯這種克勤克儉的公司,Server都用PC來ㄍㄧㄥ,哪還花得起錢買貴參參的RAID卡呢。
2. 空間不會浪費,Software RAID以Partition為單位,只要硬碟切同樣大的Partition就可以建RAID。而Hardware RAID以硬碟為單位,例如: 1*1TB + 1*2TB,那顆2TB的硬碟就只能當1TB來用。
3. Software RAID可以看到硬碟的S.M.A.R.T資訊,發現壞軌可以及早更換。Hardware RAID 卡並不是所有都支援S.M.A.R.T。
4. Software RAID跟晶片無關,機器壞掉只要拿硬碟到別台Linux都捉得到。而Hardward RAID卡要是壞了,必須找到相同或相容的的型號,才能捉得到RAID。

至於缺點呢,大概就是會吃CPU資源,剛好公司的Server CPU使用率並不高,拿來應付Software RAID運算應該OK。
 
另外,如果是在BIOS設定的RAID或是便宜的RAID卡,其實是Fake RAID而不是真正的Hardware RAID,都還是用CPU來運算,跟Software RAID差不多。

要建立RAID可以用圖形化操作或文字命令方式,以下介紹操作步驟。

系統環境:

OS: CentOS 6.4
sda: 10G,系統碟
sdb: 8G, RAID 1
sdc: 8G, RAID 1
必須以root帳號登入或sudo才能建立RAID

圖形化操作方式:

點選 Application -> System Tools -> Disk Utility

Disk Utility只會捉取尚未分配的空間,所以不能預先建立partition

點選 File -> Create -> RAID Array...

Scroll bar往下拉可以看到硬碟與容量,將它打勾,Array Name 可以不用更改,用預設的即可。

點選 RAID Level 可以選擇RAID-1, RAID-5, RAID-6,本範例使用RAID-1

RAID建立好了,會看到Multi-disk Devices多出一個New RAID Array,Device 為 /dev/md0,且在進行Resyncing
Stop RAID Array可以將RAID停止。
如果要對RAID做修改,可以選擇Edit Components(增加、刪除Partition等)

最後點選下方的 "Format Volume"格式化完成即可mount /dev/md0 到指定的路徑。
把 "Take ownership of filesystem"的勾勾拿掉,只有root才有權限存取。

重開機後/dev/md0會變成/dev/md127

如果要將 /dev/md0固定,必須自行建立一個檔案 /etc/mdadm.conf,增加一行設定。否則會從md127, md126...一直往下遞減。以下藍字全部在同一行:(必須依自己的RAID更改level, UUID, devices喔!)

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=627f695b:400a706a:245bf981:3ca79a37 devices=/dev/sda1,/dev/sdb1

怎麼知道RAID的UUID呢? 這就要使用指令來看了,指令如下:
mdadm --detail /dev/md127
再重開機後就會變成指定的/dev/md0了

以指令操作方式

以指令方式建立RAID必須先建立Partition,任何Type的Partition都可以,建立Empty就好了。最簡單的方式是用Disk Utility,如果對fdisk指令熟悉的朋友也可以用它建立Partiton。

Disk Utility點選Create Partition

將Type 改成 Empty

再點選 "Edit Partition" 將 Type 改為 "Linux RAID autodetect (0xfd)"

 將所有Partion建立好,就可以開始建立RAID。

Linux的RAID管理工具是mdadm,CentOS已內建,若尚未安裝則需要使用apt-get或yum安裝。開啟 Terminal輸入指令:
mdadm --create /dev/md0 --leve=raid1 --raid-devices=2 /dev/sdb1 /dev/sdc1
會顯示警告訊息: 如果RAID裡有/boot目錄,除非確定boot-loader支援1.x版,否則要再加參數 --metadata=0.90, 按"Y"繼續。

Partition若是EXT2/3/4則給顯示警告訊息,但仍可以加入

參數說明
  • --create /dev/md0 或 -C /dev/md0: 建立一個/dev/md0的RAID
  • --level=raid1 或 -l raid1: 建立RAID-1,可以用下列參數
linear, raid0,  0,  stripe, raid1, 1, mirror, raid4, 4, raid5, 5, raid6, 6, raid10, 10, multipath, mp, faulty, container
  • --raid-devices=2或 -n 2: 有2個Partition
  • /dev/sdb1 /dev/sdc1: 要加入的Partition
也可以用簡短的參數,但每個參數的意義就比較不是那麼直覺
mdadm -C /dev/md0 -l 1  -n 2 /dev/sdb1 /dev/sdc1

如果有Partition稍後才要加入,建立RAID時可以使用missing參數代替
mdadm --create /dev/md0 --leve=raid1 --raid-devices=2 missing /dev/sdc1

再使用Disk Utility進行Format就可以mount了。

查詢RAID狀態

使用Disk Utility


指令: cat /proc/mdstat

剛建立的RAID可以看resync進度

建立好的RAID

移除掉一個Partition

指令: mdadm --detail /dev/md0 或 mdadm -D /dev/md0


 移除掉一個Partition,可以看到Active只剩下一個Device

補充說明

  • 如果要刪除RAID,必須先Stop RAID Array,再刪除所有的Partition。
  • 由於本範例是在VMware示範,若為實際硬碟則Disk Utility可以顯示S.M.A.R.T資訊,可以檢查是否有壞軌(05,196,197)或其他警告訊息。
 Disk Utility點選 "SMART Data"

  • 還有以下幾個常用的指令:
增加Partition:
mdadm /dev/md0 --add /dev/sdd1

將Partition設置成損壞,才能使用 --remove移除
mdadm /dev/md0 --fail /dev/sdc1

移除Partition
mdadm /dev/md0 --remove /dev/sdc1

以上是Software RAID建立步驟與常用的指令,介紹得有點亂。其實mdadm還有很多參數,在此無法一一說明,有興趣想知道一些進階的用法可以參考linux的man page。

沒有留言:

張貼留言