RAID 概述
RAID即廉價冗余磁盤陣列(RedundantArray of Inexpensive Disk)的簡稱,通過該技術可以將多個磁盤組成一個陣列整體,而應用時可以作為單個磁盤使用。RAID 磁盤陣列根據其使用的技術不同,可用於提高數據讀寫效率、提高數據冗余(備份),當陣列中的一個磁盤發生故障時,可以通過校驗數據從其他磁盤中進行恢復,大大增強了應用系統數據的讀寫性能及可靠性。
較常見的 RAID技術包括如下幾個級別:
RAID 0:最基本的一種陣列方式,通過簡單的將多個磁盤(最少2 塊)組成到一起,作為一個大磁盤使用。存取數據時,通過將數據分段同時寫入到不同的磁盤中,大大提高了效率。但是這種方式沒有數據冗余,其中任何一個磁盤壞了以後,都可能導致數據丟失。
RAID 1:即磁盤鏡像技術,需要最少2 塊磁盤(磁盤利用率:1/n)。這種方式將數據同時寫入到陣列中的多塊磁盤中,不同磁盤中的數據互為鏡像。因此,其中任何一個磁盤壞了以後,數據不會丟失。
RAID 5:通過引入數據校驗技術來保證數據的安全,需要最少 3 塊磁盤(磁盤利用率: n-1)。
這種方式並不使用固定的某塊磁盤存放校驗數據,而是分段存儲在各個磁盤中。因此,其中任何一個磁盤壞了以後,也可以根據其他磁盤中的校驗數據進行恢復。
由於 RAID5 陣列技術既通過數據冗余增強了可靠性,又通過多塊磁盤同時寫入數據提高了效率,一直以來受到廣泛的應用。
未使用硬件磁盤卡方式實現的 RAID 技術,通常稱為軟 RAID 技術。本文將在 RHEL5 系統中,使用不同磁盤中的多個分區,配置實現 RAID 5磁盤陣列。
9.2 構建使用軟 RAID磁盤陣列
在 RHEL5 系統中,配置軟 RAID 陣列可以通過安裝 mdadm 軟件包實現。該軟件包一般為系統默認安裝,若檢查沒有安裝的話,從 RHEL5 系統光盤中查找安裝即可。
[root@localhost ~]# mount /dev/cdrom/media/cdrom/
mount: block device /dev/cdrom iswrite-protected, mounting read-only
[root@localhost ~]# rpm -ivh /media/cdrom/Server/mdadm-2.5.4-3.el5.i386.rpm
Preparing... ########################################### [100%]
1:mdadm ########################################### [100%]
[root@localhost ~]# rpm -qi mdadm | grep"Summary"
Summary : mdadm 控制 Linux md 設備 (軟件 RAID 陣列)
下面將以 RAID5磁盤陣列為例,講解軟磁盤陣列的配置使用方法。
准備用於 RAID陣列的分區
用於組成 RAID陣列的各個分區應該位於不同的磁盤設備中,否則實用價值不大。各分區的容量最好也相同,必要時可以將整個硬盤劃分為一個分區。
為 Linux服務器添加 4塊 SCSI 硬盤,並使用 fdisk 工具各劃分出一塊 2GB 的分區,依次為:
/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1。分區前請注意確保沒有別的程序正在使用對應的磁盤。下一小節中將以這 4 個分區為例(RAID 5需要至少 3 塊磁盤或分區)講解 RAID5 磁盤陣列的創建方法。
對於上述分區還應該將其類型 ID更改為“fd”,對應為“Linux raid autodetect”,表示支持用於 RAID磁盤陣列。
[root@localhost ~]# fdisk /dev/sdb
……
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-522, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK(1-522, default 522): +2048M
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd(Linux raid autodetect)
Command (m for help): p
……
Device Boot Start End Blocks Id System
/dev/sdb1 1 250 2008093+ fd Linux raid autodetect
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]#
創建好三個分區以後,執行“partprobe”重新探測分區表(或重啟系統),驗證分區類型和容量等信息。
[root@localhost ~]# partprobe
[root@localhost ~]# fdisk -l /dev/sd[b-e] |grep "^/dev/sd"
/dev/sdb1 1 250 2008093+ fd Linux raid autodetect
/dev/sdc1 1 250 2008093+ fd Linux raid autodetect
/dev/sdd1 1 250 2008093+ fd Linux raid autodetect
/dev/sde1 1 250 2008093+ fd Linux raid autodetect
創建 RAID設備
使用 mdadm 工具可以組合多個 RAID 分區作為一個磁盤陣列,陣列設備文件名習慣上使用“/dev/md0”、“/dev/md1”等。
[root@localhost ~]# mdadm -Cv /dev/md0 -ayes -n4 -l5 /dev/sd[b-e]1
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: /dev/sdb1 appears to be part of araid array:
level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009
mdadm: /dev/sdc1 appears to be part of araid array:
level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009
mdadm: /dev/sdd1 appears to be part of araid array:
level=raid5 devices=4 ctime=Sat Jul 2508:44:50 2009
mdadm: /dev/sde1 appears to be part of araid array:
level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009
mdadm: size set to 2008000K
Continue creating array? y
mdadm: array /dev/md0 started.
[root@localhost ~]#
在上述命令操作中,“/dev/md0”為新建的 RAID陣列設備文件名,“/dev/sd[bcd]1”表示此陣列將使用/dev/sdb1、/dev/sdc1、/dev/sdd1 這三個分區。其他各部分選項、參數的含義如下:
-C,等同於 --create:創建一個新的陣列設備
-v,等同於--verbose:執行過程中輸出細節信息
-a,等同於 --auto=:指定參數為 yes 時,表示若對應的設備文件不存在則自動創建
-n,等同於--raid-devices=:用於組成陣列的分區設備個數,“-n3”表示為 3 個
-l,等同於 --level=:使用的 RAID級別,“-l5”表示為 RAID 5
關於 mdadm 命令更多選項的使用,請參考“man mdadm”幫助信息。
創建好 md0陣列設備後,將自動被激活,執行“cat /proc/mdstat”可以觀察陣列設備的運行狀態。
[root@localhost ~]# ls -l /dev/md0
brw------- 1 root root 9, 0 07-25 09:03/dev/md0
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde1[3] sdd1[2] sdc1[1]sdb1[0]
6024000 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
其中,“[4/4]”部分中的第一個“4”表示成員設備個數,後邊的“4”表示當前的活動設備個數,“UUUU”對應為成員設備的狀態。例如,若出現“[4/3][UUU_]”的信息時,則表示第 4 個成員設備(/dev/sde1)出現故障了。
在 RAID設備中建立文件系統
創建好磁盤陣列設備文件“/dev/md0”以後,就可以在該設備中建立文件系統了。在 RHEL5系統中,可以使用 mkfs 命令格式化該設備,將其作為 ext3文件系統來使用。
[root@localhost ~]# mkfs -t ext3 /dev/md0
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
753664 inodes, 1506000 blocks
75300 blocks (5.00%) reserved for the superuser
First data block=0
Maximum filesystem blocks=1543503872
46 block groups
32768 blocks per group, 32768 fragments pergroup
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystemaccounting information: done
This filesystem will be automaticallychecked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
掛載並使用文件系統
創建掛載點目錄“/mdata”,並將上一小節中建立好的文件系統掛載到該目錄,即可正常使用。
[root@localhost ~]# mkdir /mdata
[root@localhost ~]# mount /dev/md0 /mdata
[root@localhost ~]# df -T | grep"md0" //驗證掛載的“/mdata”文件系統
/dev/md0 ext3 5929360 142976 5485184 3% /mdata
除去一個成員設備作為校驗盤以後,磁盤陣列的有效存儲空間為 3個成員設備的容量之和(大約為 2GB×3=6GB)。
如果希望在每次開機後自動掛載該陣列設備,可以在“/etc/fstab”文件中添加相應設置。
[root@localhost ~]# vi /etc/fstab
/dev/md0 /mdata ext3 defaults 0 0
陣列的管理及設備恢復
 
基本管理操作
1.掃描或查看磁盤陣列信息
使用 mdadm 命令時,“-D”選項相當於“--detail”,表示顯示掃描結果的詳細內容;“-s”選項相當於“--scan”,用於掃描陣列設備。
未指定陣列設備文件時,可以顯示出當前系統中的陣列配置信息、RAID設備列表。
[root@localhost ~]# mdadm -vDs
ARRAY /dev/md0 level=raid5 num-devices=4
UUID=35bcffa1:cdc5ba41:0c5b5702:e32a3259
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
當指定陣列設備作為參數時,可以輸出指定陣列設備的詳細參數,包括活動設備個數、失效設備個數、更新時間、列表成員設備位置等。
[root@localhost ~]# mdadm -vDs /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Sat Jul 25 11:23:07 2009
Raid Level : raid5
Array Size : 6024000 (5.74 GiB 6.17 GB)
Device Size : 2008000 (1961.27 MiB 2056.19 MB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Sat Jul 25 11:26:01 2009
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
UUID : 35bcffa1:cdc5ba41:0c5b5702:e32a3259
Events : 0.6
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
3 8 18 3 active sync /dev/sde1
2.創建配置文件 mdadm.conf
mdamd 的配置文件為“/etc/mdadm.conf”,該文件只是用來方便用戶管理和使用,缺少此文件並不會影響磁盤陣列的功能。在配置文件中可以保存多個磁盤陣列的配置信息。配置文件中的基本信息可以通過前面講過的“mdadm -vDs”命令獲得。
[root@localhost ~]# vi /etc/mdadm.conf
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1/dev/sde1
ARRAY /dev/md0 level=raid5 num-devices=4
UUID=35bcffa1:cdc5ba41:0c5b5702:e32a3259
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
CREATE owner=root group=root mode=0640
在上述文件中,“ARRAY”、“UUID”“devices”部分是位於同一行中的內容,最後一行中的“CREATE”用於設置自動創建陣列設備文件的屬主、屬組及默認權限。關於mdadm.conf配置文件中更多配置項的使用,可以參考“man mdadm.conf”幫助信息。
3.啟動/停止RAID陣列
在確保沒有相關程序讀寫磁盤陣列設備的情況下,可以停止陣列設備。只需使用 mdadm命令結合“-S”選項(等同於“--stop”選項)即可。執行該操作將會禁用對應的陣列設備,釋放相關資源。
[root@localhost ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
結合“-A”選項(等同於“--assemble”選項)可以重新組合對應的磁盤陣列設備。
[root@localhost ~]# mdadm -A /dev/md0
mdadm: /dev/md0 has been started with 4drives.
[root@localhost ~]# mount /dev/md0 /mdata/
設備恢復操作
1.模擬陣列設備故障
對於運行中的磁盤陣列,可以結合 mdadm 命令的“-f”選項(等同於“”選項)用於模擬成員設備故障,例如可將陣列中的“/dev/sdb1”標記為故障設備。
[root@localhost ~]# mdadm /dev/md0 -f/dev/sde1
mdadm: set /dev/sde1 faulty in /dev/md0
當陣列中的某個成員設備出現故障時,陣列會將其標記為失活狀態。此時通過“cat /proc/mdstat”可以觀察到丟失出現故障的設備(/dev/sde1)。
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde1[3](F) sdd1[2]sdc1[1] sdb1[0]
6024000 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]
2.更換故障設備,並恢復數據
對於出現故障的設備,可以結合“-r”選項將其移除,然後換上正常的設備,結合“-a”選項重新添加到陣列中即可。
[root@localhost ~]# mdadm /dev/md0 -r/dev/sde1
mdadm: hot removed /dev/sde1 //移除故障設備
[root@localhost ~]# mdadm /dev/md0 -a/dev/sde1
mdadm: re-added /dev/sde1 //重新加入正常設備
RAID5 磁盤陣列能夠在較短時間內進行重構和數據恢復,當需要恢復的數據較多時,可以在此期間觀察到陣列狀態的恢復進度。
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde1[3] sdd1[2] sdc1[1]sdb1[0]
6024000 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]
[===>.................] recovery = 16.3% (328192/2008000)finish=2.6min
speed=10586K/sec
unused devices: <none>
待數據恢復完成以後,再次查看陣列狀態即顯示為正常了。
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde1[3] sdd1[2] sdc1[1]sdb1[0]
6024000 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
unused devices: <none>
本文出自 “吖吖個呸” 博客,請務必保留此出處http://gm100861.blog.51cto.com/1930562/794271