1.什麼是RAID?
RAID是容錯廉價磁盤陣列,可以將多個小磁盤整合爲一個較大的磁盤設備,不僅可以擴大磁盤的容量,還可以實現數據保護。
2.RAID等級
RAID根據等級的不同,實現的功能和性能也有所不同
RAID0 至少需要兩塊磁盤,在寫數據前現將數據分爲等大小的區塊(chunk),然後將數據交叉存放到不同的設備中。優點是數據的讀寫性能好,缺點是如果有一塊磁盤的數據損毀,整個文件就損毀了。
RAID1 鏡像模式,可以實現數據的完整備份,寫數據的時候,將同一份數據完整的寫到兩塊不同的磁盤上,磁盤的空間利用率爲50%,讀性能好,寫性能較差。最大的優點是可以實現數據的完整備份。
RAID 1+0 需要四塊磁盤,先用兩塊磁盤實現RAID1,再用兩個RAID1實現RAID0
RAID 0+1 需要四塊磁盤,先用兩塊磁盤實現RAID0,再用兩個RAID1實現RAID0
RAID5 至少需要三塊以上的磁盤實現,當任何一塊磁盤有數據損毀的時候,可以通過同位檢查碼(parity)將數據恢復。舉個例子 1+2=3,3可以看做是parity,當數據1損毀的時候,可以通過3-2=1得到損毀的數據(當然,具體實現肯定要比這複雜)。注意RAID5僅僅支持一塊磁盤的損毀情況。
3.RAID的預備磁盤
爲了可以更快的抽換損毀的磁盤,可以準備預備磁盤,該磁盤平時不被RAID使用,當有數據損毀的時候,這塊磁盤可以被主動拉入磁盤陣列替換損毀的磁盤。如果支持熱插拔,則可以在線替換,不同關機。
4.軟件磁盤陣列
平時生產環境中使用的都是硬件磁盤陣列,磁盤陣列的管理通過磁盤陣列卡中的芯片實現,性能很好,缺點是磁盤陣列卡一般都很貴。
軟件磁盤陣列可以通過軟件mdadm實現,但是會消耗較多的系統資源,性能較差。軟件磁盤陣列的設備名爲/dev/md#,我們可以通過軟件磁盤陣列達到學習的目的。
5.軟件磁盤陣列的設置
下面我們通過mdadm來演練一下,達到學習的目的。
mdadm的格式爲
mdadm --detail /dev/md# #查看某個RAID設備的詳細信息
mdadm --create --auto=yes /dev/md# --level=N --raid-devices=N
--spare-devices=N
具體參數的含義:
--create #創建RAID設備
--auto=yes #後面指定軟件磁盤陣列設備
--level=N #設置級別 建議只是用0 1 5
--raid-devices=N #設置幾個磁盤設備作爲RAID設備
--spare-devices=N #設置幾個磁盤作爲預備設備
下面實際演練一下,不實際操作永遠得不到直觀的經驗,馬哥的名言。。。。。。
mdadm --create --auto=yes /dev/md0 --level=1 --raid-device=2 --spare-devices=1 /dev/sda{9,10,11}
mdadm --detail /dev/md0
格式化RAID設備並且掛載
mke2fs -j /dev/md0
mkdir /mnt/raid
mount /dev/md0 /mnt/raid
df /mnt/raid #查看一下該設備我們可以看到設備的容量是100M ,因爲我們創建的是RAID1設備,另一個100M的分區是作爲鏡像存在的。
下面我們模擬損毀一塊磁盤,來實現熱插拔的功能
mdadm --manage /dev/md0
--add 設備 #添加設備
--remove 設備 #刪除設備
--fail 設備 #模擬損毀後面的設備
mdadm --manage /dev/md0 --fail /dev/sda9 #很顯然9換下去了,11換上來了。
下面將出錯的磁盤移除
mdadm --manage /dev/md0 --remove /dev/sda9
6.如何正確的關閉RAID設備
關閉RAID設備不能簡單的將其分區刪掉,必須按照步驟,否則會是文件系統出錯
umount /mnt/raid #先卸載
sed -i "/^\/dev\/md0/d" /mnt/raid #如果設置了自動掛載,將/mnt/raid哪一行刪掉
mdadm --stop /dev/md0 #關閉raid設備
cat /proc/mdstat #確實不存在任何的數組設備
vim /etc/mdadm.conf #將開頭的ARRAY那一行註釋掉。