1、前言
實際環境應用上磁碟陣列可以概略區分為硬體式 (Hardware) 或軟體式 (Software) 磁碟陣列,通常使用於工作站或個人 PC 才會使用 Software RAID,功能簡單並且因為沒有硬體晶片協助資料處理。因此,相關的所有運算負載皆落到主機上頭,除了影響資料存取的效能之外主機的整體效能也會受到影響,CentOS 作業系統內建支援 Software RAID 的建立,支援的類型有 RAID 0、1、4、5、6、10,其中只有 RAID 1 類型才能 保護作業系統。不過在 CentOS 中 Software RAID 將採用如下機制以使 Software RAID 運好效能更好更穩定:
- 採用線程方式進行回復作業 (Threaded Rebuild Process)。
- 基於核心 (Kernel-Based) 的方式進行設定。
- 使用作業系統的閒置資源進行背景方式 RAID 重建作業。
- 支援熱插拔 (Hot-Swappable)。
- 自動使用 CPU 進行檢測及優化的動作 (CPU Detection and Optimizations)。
文章目錄
1、前言2、實作 Software RAID 5 + Hot Spare
設定硬碟分割區格式
初始化 Software RAID
格式化 Software RAID 及掛載
查看 Software RAID 狀態
模擬硬碟損壞
3、定期檢查 Software RAID 狀態
2、實作 Software RAID 5 + Hot Spare
下列將實作 Software RAID 5 + Hot Spare 示意圖如下所示:設定硬碟分割區格式
加入四顆 1GB 硬碟,其中 /dev/sdb、/dev/sdc、/dev/sdd 用來建立 Software RAID 5,而 Hot Spare 則由 /dev/sde 擔任,請使用「fdisk」指令對每四顆硬碟「sdb、sdc、sdd、sde」進行分割區及格式的設定,格式請設定為「fd (Linux raid auto)」,下列先以 /dev/sdb 為示範,當然全部硬碟都進行分割區設定完畢後,記得確認系統是否已經正確辨識到相關分割區資訊了。(# fdisk /dev/sdb //每顆硬碟進行如下流程分割區設定
n > p > 1 > enter > enter > t > fd > w
# cat /proc/partitions //查看分割區資訊
major minor #blocks name
8 0 10485760 sda
8 1 512000 sda1
8 2 9972736 sda2
253 0 7905280 dm-0
253 1 2064384 dm-1
8 16 1048576 sdb
8 17 1048376 sdb1
8 32 1048576 sdc
8 33 1048376 sdc1
8 48 1048576 sdd
8 49 1048376 sdd1
8 64 1048576 sde
8 65 1048376 sde1
初始化 Software RAID
接著使用「mdadm」指令搭配參數建立 Software RAID,參數說明如下:- -C: 初始化 Software RAID 裝置 (從 0 開始)。
- -l: 建立 Software RAID Level (所以 -l 5 表示建立 RAID 5)。
- -n: 建立 Software RAID 硬碟數量。
- -x: 指定 Hot Spare 硬碟數量及裝置代號。
# mdadm -C /dev/md0 -l 5 -n 3 /dev/sd{b,c,d}1 -x 1 /dev/sde1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# cat /proc/mdstat //查看 Software RAID 進度 (S 表示 Hot Spare)
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0]
2096128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[=======>.............] recovery = 35.3% (370320/1048064) finish=0.2min speed=46290K/sec
格式化 Software RAID 及掛載
接著將建立好的 Software RAID 裝置進行格式化及掛載的動作:# mkfs.ext4 -L raid5 /dev/md0
mke2fs 1.41.12 (17-May-2010)
...略...
# mkdir /raid5
# mount /dev/md0 /raid5
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_centos6-lv_root 7.5G 2.1G 5.0G 30% /
tmpfs 504M 436K 504M 1% /dev/shm
/dev/sda1 485M 29M 431M 7% /boot
/dev/md0 2.0G 35M 1.9G 2% /raid5 //掛載成功
查看 Software RAID 狀態
此時 Software RAID 運作正常時的狀態,以便等一下可以跟有硬碟損壞時進行比較:# cat /proc/mdstat //查看 Software RAID 資訊
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0]
2096128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
# mdadm --detail /dev/md0 //查看 Software RAID 資訊
/dev/md0:
Version : 1.2
Creation Time : Mon Oct 24 13:59:05 2011
Raid Level : raid5
Array Size : 2096128 (2047.34 MiB 2146.44 MB)
Used Dev Size : 1048064 (1023.67 MiB 1073.22 MB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Oct 24 14:02:22 2011
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Name : Centos6.weithenn.org:0 (local to host Centos6.weithenn.org)
UUID : b19c810a:0a2203f3:0550a8cc:3dc22992
Events : 18
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
4 8 49 2 active sync /dev/sdd1
3 8 65 - spare /dev/sde1
模擬硬碟損壞
接著模擬 /dev/sdd 硬碟損壞的情況,使用參數 「--fail」 指令 Software RAID 中哪顆成員硬碟損壞,並且再使用參數 「--remove」 後才表示可以把該硬碟正常卸載後換上新硬碟,最後使用參數 「--add」 加入,而加入的硬碟則成為 Hot Spare 硬碟 (因為本來的 Hot Spare 已經接手)。# mdadm --fail /dev/md0 /dev/sdd1 //sdd 硬碟損壞
mdadm: set /dev/sdd1 faulty in /dev/md0
# cat /proc/mdstat //sde 馬上接手 (Hot Spare 機制運作)
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[4](F) sde1[3] sdc1[1] sdb1[0]
2096128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[===========>.........] recovery = 55.3% (580248/1048064) finish=0.1min speed=44634K/sec
# mdadm --detail /dev/md0 //僅列出與正常狀況時不同之處
/dev/md0:
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Events : 37
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
3 8 65 2 active sync /dev/sde1
4 8 49 - faulty spare /dev/sdd1
# mdadm --remove /dev/md0 /dev/sdd1 //可拔出 sdd 硬碟
mdadm: hot removed /dev/sdd1 from /dev/md0
You have new mail in /var/spool/mail/root
# mdadm --add /dev/md0 /dev/sdd1 //將新硬碟加入為成員硬碟
mdadm: re-added /dev/sdd1
# cat /proc/mdstat //目前 Hot Spare 為 sdd
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[4](S) sde1[3] sdc1[1] sdb1[0]
2096128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
3、定期檢查 Software RAID 狀態
我們可以撰寫一個簡單的 Shell Script,使系統每天執行定期排程時順便檢查 Software RAID 狀態,並將狀態結果寄給管理者,如下我們建立「check-raid.sh」腳本檔案於 「/etc/cron.daily」,並且給予 755 的檔案權限設定,之後每天就可以定期收到檢查 Software RAID 狀態 Mail。# cat /etc/cron.daily/check-raid.sh
#!/bin/sh
/sbin/mdadm --monitor --oneshot --test --mail=weithenn@weithenn.org /dev/md
# chmod 755 /etc/cron.daily/check-raid.sh