RAID:Redundant Arrays of Inexpensive Disk 廉價冗餘磁盤陣列,通過對多塊硬盤按不同的方式組織起來,來提高IO能力,或提高耐用性等。RAID可分爲軟RAID和硬RAID,軟RAID通過軟件實現,硬RAID使用專業的RAID卡和磁盤組成。
RAID級別:多塊磁盤組織在一起的工作方式有所不同。常見的RAID級別有RAID0,RAID1,RAID2,RAID3,RAID4,RAID5,RAID6,RAID10,RAID01。
RAID0:striping 條帶化數據,存儲到不多個硬盤
讀寫性能均有提升
可用空間:N*磁盤空間(受最小的磁盤空間的限制)
無容錯能力,任何一塊設備算壞,都會導致數據丟失
最少磁盤數:2
RAID1:鏡像RAID
讀性能提升、寫性能略有下降;
可用空間:容量較小的磁盤的容量
有冗餘能力,單塊磁盤損壞,不會導致數據丟失
最少磁盤數:2
RAID4:用一塊磁盤專門存儲校驗碼
讀,寫性能均有提升
可用空間:(N-1)*最小磁盤的容量
有容錯能力:可以壞1塊磁盤
最少磁盤數:3
RAID5:
讀,寫性能均有提升
可用空間:(N-1)*最小磁盤的容量
有容錯能力:可以壞1塊磁盤
最少磁盤數:3
RAID6:交驗信息存儲兩份:會導致更多磁盤空間的浪費
讀、寫性能提升
可用空間:(N-2)*最小磁盤的容量
有容錯能力:最多可有2塊磁盤損壞
最少磁盤數:4
RAID10:
讀寫系能均有提升
可用磁盤空間:50%
有容錯能力:沒組最多壞一塊盤
最少磁盤數:4
其它:
JBOD:Just a bunch of disks.
功能:將多塊磁盤的空間合併一個大的連續空間使用;
可用空間:sum(S1,S2,...)
CentOS 6上的軟件RAID的實現:
結合內核中的md(multi devices)
mdadm:模式化的工具
命令的語法格式:mdadm [mode] <raiddevice> [options] <component-devices>
支持的RAID級別:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;
模式:
創建:-C
裝配: -A
監控: -F
管理:-f, -r, -a
<raiddevice>: /dev/md#
<component-devices>: 任意塊設備
-C: 創建模式
-n #: 使用#個塊設備來創建此RAID;
-l #:指明要創建的RAID的級別;
-a {yes|no}:自動創建目標RAID設備的設備文件;
-c CHUNK_SIZE: 指明塊大小;
-x #: 指明空閒盤的個數;
練習:創建一個10G可用空間的RAID5,留一個空閒盤做熱備
第一步:使用fdisk命令劃分4個5G的分區,3個組成RAID5,另外一個做位空閒盤
root@centos6 ~]# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n #創建新分區
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-15665, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +5G
...
...
重複此上步驟,直至創建好4個所需的分區:同時需要注意將分區id改爲fd格式,可以參照如下步驟使用fdisk命令來修改
[root@centos6 ~]# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): t #x修改分區id
Partition number (1-5): 1
Hex code (type L to list codes): fd #選擇RARID所需的分區id
Command (m for help): w #保存修改
The partition table has been altered!
第二步:格式化分區
所有的分區都已經創建好,效果如下
[root@centos6 ~]# fdisk -l /dev/sdb #查看分區情況
Disk /dev/sdb: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x067824c0
Device Boot Start End Blocks Id System
/dev/sdb1 1 654 5253223+ fd Linux raid autodetect
/dev/sdb2 655 1308 5253255 fd Linux raid autodetect
/dev/sdb3 1309 1962 5253255 fd Linux raid autodetect
/dev/sdb4 1963 15665 110069347+ 5 Extended
/dev/sdb5 1963 2616 5253223+ fd Linux raid autodetect
[root@centos6 ~]# mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sdb{1,2,3,5}
mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
[root@centos6 ~]#watch -n1 cat /proc/mdstat #查看mad的狀態
mdadm: set /dev/sdb1 faulty in /dev/md0
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb3[4] sdb5[3] sdb2[1] sdb1[0](F)
10498048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
[==================>..] recovery = 91.5% (4804320/5249024) finish=0.1min speed=72603K/sec
unused devices: <none>
root@centos6 ~]# mkfs.ext4 /dev/md0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
657072 inodes, 2624512 blocks
131225 blocks (5.00%) reserved for the super user
...此處省略N行信息
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override
第三步:掛載檢驗RAID是否成功創建
[root@centos6 ~]# mkdir /mnt/raid5 #創建掛載點
[root@centos6 ~]# mount /dev/md0 /mnt/raid5/ #掛載RAID
[root@centos6 ~]# mdadm -D /dev/md0
/dev/md0:
... 此處省略N行信息
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
4 8 19 2 active sync /dev/sdb3
3 8 21 - spare /dev/sdb5
[root@centos6 ~]# ls -l /mnt/raid5/
total 16
drwx------ 2 root root 16384 Aug 30 03:57 lost+found
[root@centos6 ~]# df -lh /mnt/raid5/
Filesystem Size Used Avail Use% Mounted on
/dev/md0 9.8G 23M 9.3G 1% /mnt/raid5
如果要讓此文件系統自動掛載,同樣需要添加到/etc/fstab中
模擬RAID5磁盤損壞的,空閒盤會自動補充到RIAD5中去
mdadm -D /dev/md0 查看當前md狀態
[root@centos6 ~]# mdadm /dev/md0 -f /dev/sdb5 #將sdb5設置爲faulty(損壞)
mdadm: set /dev/sdb5 faulty in /dev/md0
此時sdb1會自動添加到RAID5中去,以下是正在recovery的狀態
恢復完成後:再度查看,RAID已經完全恢復正常狀態:
此時,可以移除壞掉的磁盤sdb5,重新添加新的可用分區做位RAID5的空閒盤
[root@centos6 ~]# mdadm /dev/md0 --remove /dev/sdb5 #從RAID中移除sdb5
mdadm: hot removed /dev/sdb5 from /dev/md0
root@centos6 ~]# mdadm /dev/md0 --add /dev/sdb6 #將sdb6添加到RIAD中去
mdadm: added /dev/sdb6
其它命令
-D:顯raid的詳細信息;
mdadm -D /dev/md#
管理模式:
-f: 標記指定磁盤爲損壞;
-a: 添加磁盤
-r: 移除磁盤
觀察md的狀態:
cat /proc/mdstat
停止md設備:
mdadm -S /dev/md#
watch命令:
-n #: 刷新間隔,單位是秒;
watch -n# 'COMMAND'