磁盤冗餘陣列node
1988年由加利福尼亞大學伯克利分校發表的文章首次提到並定義了RAID,當今CPU性能每一年可提高30%-50%但硬盤僅提高7%,漸漸的已經成爲計算機總體性能的瓶頸,而且爲了不硬盤的忽然損壞致使數據丟失還加入了冗餘備份機制。安全
RAID的早先設計理念爲」redundant array of Inexpensive disks「即不貴的硬盤組,而如今的定義是」Redundant Array ofIndependent Disks「即獨立的硬盤組,做用是防止硬盤物理損壞以及增長存儲設備的吞吐量。RAID常見的組合有0、一、5和10:app
RAID0:須要至少兩塊(含)硬盤,能夠有效的提升硬盤的性能和吞吐量,但沒有數據的冗餘和錯誤修復能力。運維
將多塊硬盤經過硬件或軟件的方式串聯在一塊兒,成爲一個大的卷集,將數據依次寫入到各個硬盤中,這樣性能會極大提高,但若任意一塊硬盤故障則整個系統的數據都會受到破壞。dom
RAID1:須要至少兩塊(含)硬盤,能夠有效的提升數據資料的安全性和可修復性,但成本卻提升了。ide
實現原來是在數據寫入硬盤時也會在另一塊閒置的硬盤上生成鏡像文件,在不影響性能的狀況下最大限度保證數據資料的可靠性,只要在一對鏡像盤中還有一塊硬盤可使用,那麼數據也不會丟失,具備很好的硬盤冗餘能力,雖然對數據來說絕對的安全,但成本卻明顯增長,磁盤利用率僅爲50%。性能
RAID5:須要至少三塊(含)硬盤,兼顧存儲性能、數據安全和儲存成本。ui
如上圖所示」parity」塊中保存的是其餘硬盤數據的奇偶校驗信息(並不是其餘硬盤的數據),以數據的奇偶校驗信息來保證數據的安全,RAID5不以單獨的硬盤來存放數據的奇偶校驗信息,而是保存在各個磁盤上。spa
這樣當任何一個硬盤損壞均可以根據其餘硬盤上的奇偶校驗信息來嘗試重建損壞的數據,性能也很高,兼顧了存儲性能、數據安全和存儲成本,能夠看做是RAID0與RAID1的折中方案。設計
RAID10:須要至少四塊(含)硬盤,兼具速度和安全性,但成本很高。
繼承了RAID0的快速與RAID1的安全,RAID1在這裏提供了冗餘備份的陣列,而RAID0則負責數據的讀寫陣列。
因這種結構的成本高,通常用於存放要求速度與差錯控制的數據。
mdadm命令用於管理系統軟件RAID硬盤陣列,格式爲:
」mdadm [模式] <RAID設備名稱> [選項] [成員設備名稱]」。
mdadm管理RAID陣列的動做有:
名稱 做用
Assemble 將設備加入到之前定義的陣列
Build 建立一個沒有超級塊的陣列
Create 建立一個新的陣列,每一個設備具備超級塊。
Manage 管理陣列(如添加和刪除)。
Misc 容許單獨對陣列中的某個設備進行操做(如中止陣列)。
Follow or Monitor 監控狀態。
Grow 改變陣列的容量或設備數目。
mdadm管理RAID陣列的參數有:
參數 做用
-a 檢測設備名稱
-n 指定設備數量
-l 指定raid級別
-C 建立
-v 顯示過程
-f 模擬設備損壞
-r 移除設備
-a 添加設備
-Q 查看摘要信息
-D 查看詳細信息
-S 中止陣列
模擬訓練:RAID10配置流程:
第1步:在虛擬機中再添加4塊硬盤:
第2步:使用mdadm命令建立RAID10,名稱爲」/dev/md0″。
-C表明建立操做,-v顯示建立過程,-a yes檢查RAID名稱,-n是用到的硬盤個數,-l是定義RAID的級別然後面寫上要加入陣列的硬盤名稱。
[root@www ~]#mdadm -Cv /dev/md0 -a yes -n4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954624K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
第3步:格式化並掛載使用
將RAID磁盤陣列格式化爲ext4格式:
[root@www ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477312 blocks
523865 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632,2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
建立掛載目錄:
[root@www ~]# mkdir /RAID
進行文件系統的掛載:
[root@www ~]# mount /dev/md0 /RAID
查看磁盤掛載信息:
[root@www ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.0G 15G 17% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 84K 914M 1% /dev/shm
tmpfs 914M 8.9M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom
/dev/sda1 497M 119M 379M 24% /boot
/dev/md0 40G 49M 38G 1% /RAID
將此磁盤陣列掛載信息設置爲重啓後也依然生效:
[root@www ~]# echo "/dev/md0 /RAIDext4 defaults 0 0" >> /etc/fstab
第4步:查看/dev/md0設備信息
參數-D查看RAID陣列的詳細信息:
[root@www ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue May 5 07:43:26 2015
Raid Level : raid10
Array Size : 41909248 (39.97 GiB 42.92 GB)
Used Dev Size : 20954624 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Tue May 5 07:46:59 2015
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : cc9a87d4:1e89e175:5383e1e8:a78ec62c
Events : 17
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
3 8 64 3 active sync /dev/sde
第5步:模擬有1塊硬盤損壞的狀況
使用mdadm的-f參數將/dev/sdb移出陣列:
[root@www ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
再看下陣列的狀態(此時的/dev/sdb狀態被是移除,失敗狀態):
[root@www ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 8 08:11:00 2015
Raid Level : raid10
Array Size : 41909248 (39.97 GiB 42.92 GB)
Used Dev Size : 20954624 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Fri May 8 08:27:18 2015
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : www.com:0 (local to host www.com)
UUID : f2993bbd:99c1eb63:bd61d4d4:3f06c3b0
Events : 21
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
3 8 64 3 active sync /dev/sde
0 8 16 - faulty /dev/sdb
第6步:損壞後依然正常使用
由於RAID10級別可以容許一組RAID1硬盤中存在一個故障盤而不影響使用,因此依然能夠正常的建立或刪除文件~
如今就把新的硬盤添加進去吧,固然也可讓硬盤sdb恢復使用:請重啓後執行「 mdadm /dev/md0 -a /dev/sdb」。
第7步:設置冗餘備份磁盤
如今發現了一個問題沒?運維人員須要在硬盤硬件出現故障後手工添加新的磁盤進去,這樣會不會比較不方便?
假如初始化RAID5陣列時直接給予4塊硬盤,其中1塊硬盤設備用於在陣列某塊磁盤故障時自動的替換上去,這樣很棒吧!
先將磁盤系統卸載:
[root@www ~]# umount /dev/md0
中止該陣列設備,完全的停用:
[root@www ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
如今該陣列已經找不到了:
[root@www ~]# mdadm -D /dev/md0
mdadm: cannot open /dev/md0: No such file ordirectory
建立RAID5並設置1塊備份故障盤:
[root@www ~]# mdadm -Cv /dev/md0 -n 3 -l5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: /dev/sdb appears to be part of a raidarray:
level=raid10 devices=4 ctime=Fri May 8 08:11:002015
mdadm: /dev/sdc appears to be part of a raidarray:
level=raid10 devices=4 ctime=Fri May 8 08:11:002015
mdadm: /dev/sdd appears to be part of a raidarray:
level=raid10 devices=4 ctime=Fri May 8 08:11:002015
mdadm: /dev/sde appears to be part of a raidarray:
level=raid10 devices=4 ctime=Fri May 8 08:11:002015
mdadm: size set to 20954624K
此處須要輸入y,確認建立這個陣列:
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
查看下陣列的詳細信息(Spare Devices數量爲1):
[root@www ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 8 09:20:35 2015
Raid Level : raid5
Array Size : 41909248 (39.97 GiB 42.92 GB)
Used Dev Size : 20954624 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Fri May 8 09:22:22 2015
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Name : www.com:0 (local to hostwww.com)
UUID : 44b1a152:3f1809d3:1d234916:4ac70481
Events : 18
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
3 8 64 - spare /dev/sde
將磁盤陣列格式化爲ext4系統:
[root@www ~]# mkfs.ex
t4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477312 blocks
523865 blocks (5.00%) reserved for the superuser
First data block=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments pergroup
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200,884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accountinginformation: done
由於前面設置過fstab文件,因此如今能夠直接給掛載:
[root@www ~]# mount -a
將/dev/sdb設備設置爲故障並移出陣列:
[root@www ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
再來看下陣列的詳細信息(此時硬盤sde直接頂替上去了):
[root@www ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 8 09:20:35 2015
Raid Level : raid5
Array Size : 41909248 (39.97 GiB 42.92 GB)
Used Dev Size : 20954624 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Fri May 8 09:23:51 2015
State : active, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Rebuild Status : 0% complete
Name : www.com:0 (local to hostwww.com)
UUID : 44b1a152:3f1809d3:1d234916:4ac70481
Events : 21
Number Major Minor RaidDevice State
3 8 64 0 spare rebuilding /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
0 8 16 - faulty /dev/sdb