首先我們來了解一下RAID這個概念
1988年由加利福尼亞大學伯克利分校發表的文章首次提到並定義了RAID,當今CPU性能每年可提升30%-50%但硬盤僅提升7%,漸漸的已經成為計算機整體性能的瓶頸,並且為了避免硬盤的突然損壞導致數據丟失還加入了冗余備份機制。
RAID的早先設計理念為”redundant array of Inexpensive disks“即不貴的硬盤組,而現在的定義是”Redundant Array ofIndependent Disks“即獨立的硬盤組,作用是防止硬盤物理損壞以及增加存儲設備的吞吐量。RAID常見的組合有0、1、5和10:
RAID0:需要至少兩塊(含)硬盤,可以有效的提高硬盤的性能和吞吐量,但沒有數據的冗余和錯誤修復能力。
將多塊硬盤通過硬件或軟件的方式串聯在一起,成為一個大的卷集,將數據依次寫入到各個硬盤中,這樣性能會極大提升,但若任意一塊硬盤故障則整個系統的數據都會受到破壞。
RAID1:需要至少兩塊(含)硬盤,可以有效的提高數據資料的安全性和可修復性,但成本卻提高了。
實現原來是在數據寫入硬盤時也會在另外一塊閑置的硬盤上生成鏡像文件,在不影響性能的情況下最大限度保證數據資料的可靠性,只要在一對鏡像盤中還有一塊硬盤可以使用,那么數據也不會丟失,具有很好的硬盤冗余能力,雖然對數據來講絕對的安全,但成本卻明顯增加,磁盤利用率僅為50%。
RAID5:需要至少三塊(含)硬盤,兼顧存儲性能、數據安全和儲存成本。
如上圖所示”parity”塊中保存的是其他硬盤數據的奇偶校驗信息(並非其他硬盤的數據),以數據的奇偶校驗信息來保證數據的安全,RAID5不以單獨的硬盤來存放數據的奇偶校驗信息,而是保存在各個磁盤上。
這樣當任何一個硬盤損壞都可以根據其他硬盤上的奇偶校驗信息來嘗試重建損壞的數據,性能也很高,兼顧了存儲性能、數據安全和存儲成本,可以看作是RAID0與RAID1的折中方案。
RAID10:需要至少四塊(含)硬盤,兼具速度和安全性,但成本很高。
繼承了RAID0的快速與RAID1的安全,RAID1在這里提供了冗余備份的陣列,而RAID0則負責數據的讀寫陣列。
因這種結構的成本高,一般用於存放要求速度與差錯控制的數據。
名稱結構:
下面我們來具體操作
首先我們先來掛載RAID5 設置為3個做RAID,2個用來做備份。
首先我們需要將虛擬機關機
點擊此處添加5個硬盤,注意要添加五個。因為sda已經被虛擬機本身占用。
此時的虛擬機上共有6個磁盤。
打開虛擬機,打開終端,輸入命令
[root@fanwenting-hbza ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 2 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
-C代表創建操作,-v顯示創建過程,-n是用到的硬盤個數,-l是定義RAID的級別而后面寫上要加入陣列的硬盤名稱,-x是用於備份的磁盤個數。
此處需要輸入y 來確認創建這個陣列。
下面用mdadm來查看陣列的詳細信息
[root@fanwenting-hbza ~]# mdadm -D /dev/md0
(Spare Devices數量為2)
然后將磁盤陣列格式化為ext4系統:
[root@fanwenting-hbza ~]# mkfs.ext4 /dev/md0
[root@fanwenting-hbza ~]# mount -a
將/dev/sdb設備設置為故障並移出陣列:
[root@fanwenting-hbza ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
此時再查看陣列的詳細信息
/dev/md0:
Version : 1.2
Creation Time : Tue Oct 22 00:54:55 2019
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Tue Oct 22 01:00:08 2019
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 1
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 51% complete
Name : fanwenting-hbza:0 (local to host fanwenting-hbza)
UUID : 2b3024a3:c4d4d3d1:3cd84251:622b8f9c
Events : 28
Number Major Minor RaidDevice State
4 8 80 0 spare rebuilding /dev/sdf
1 8 32 1 active sync /dev/sdc
5 8 48 2 active sync /dev/sdd
0 8 16 - faulty /dev/sdb
3 8 64 - spare /dev/sde
你會發現sdf直接頂替上去了。這樣大大方便了運維人員對磁盤的管理,磁盤損壞造成的損失大大減小了。
下面我們來掛載一個使用磁盤數為5的RAID10
因為現在RAID5在虛擬機上運行着,所以需要先輸入命令將陣列設備停用。
[root@fanwenting-hbza ~]#umount /dev/md0
[root@fanwenting-hbza ~]#mdadm -S /dev/md0
mdadm: stopped /dev/md0
將陣列徹底停用,現在陣列已經找不到了。
[root@fanwenting-hbza ~]#mdadm -D /dev/md0
此時就可以開始創建你RAID10新的陣列了。
輸入指令
[root@fanwenting-hbza ~]#mdadm -Cv /dev/md0 -a yes -n 5 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
-C代表創建操作,-v顯示創建過程,-a yes檢查RAID名稱,-n是用到的硬盤個數,-l是定義RAID的級別而后面寫上要加入陣列的硬盤名稱。
需要y來確認建立這個陣列,然后進行格式化並掛載使用。
將RAID磁盤陣列格式化為ext4格式:
[root@fanwenting-hbza ~]# mkfs.ext4 /dev/md0
然后創建掛載目錄:
[root@fanwenting-hbza ~]#mkdir /RAID
進行文件系統的掛載:
[root@fanwenting-hbza ~]# mount /dev/md0 /RAID
查看磁盤的掛載信息:
[root@fanwenting-hbza ~]# df -h
最后將它設為重啟后也依然生效:
[root@fanwenting-hbza ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
這樣磁盤在重啟以后也依然掛載在虛擬機上,如果想將RAID5掛載在虛擬機上且重啟后生效也可以執行上述操作。
參數-D查看RAID陣列的詳細信息:
[root@fanwenting-hbza ~]# mdadm -D /dev/md0
現在我們來模擬一個硬盤損壞的情況
使用mdadm的-f參數將/dev/sdb移出陣列:
[root@fanwenting-hbza ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
(此時的/dev/sdb狀態被是移除,失敗狀態)
因為RAID10級別能夠允許一組RAID1硬盤中存在一個故障盤而不影響使用,所以依然可以正常的創建或刪除文件~
現在就把新的硬盤添加進去吧,當然也可以讓硬盤sdb恢復使用:請重啟后執行“ mdadm /dev/md0 -a /dev/sdb”。