RAID(獨立冗餘磁盤陣列)由加利福尼亞大學伯克利分校(University of California-Berkeley)在1987年提出這個概念,首先提出的是廉價冗餘磁盤陣列(Redundant Arrays of Inexpensive Disks),後來發現,大量便宜磁盤組合並不能適用於現實的生產環境,後來改爲獨立冗餘磁盤陣列(Redundant Arrays of Independent Disks)。
RAID的類型
RAID 0 : 只需要2塊硬盤以上即可組建,條帶化讀寫,可以提高整個磁盤的性能和吞吐量,但沒有冗餘或錯誤修復能力,任何一塊磁盤塊都會導至陣列無法使用,數據丟失,磁盤利用量爲NS,即n*磁盤容量
RAID 1 : 磁盤鏡像,寫入一塊磁盤時,另一塊磁盤上生成鏡像文件,寫性能降低,讀性能提升,有冗餘能力,磁盤的利用率50%,需要2的倍數來組建陣列
RAID 3,4 : 帶有奇偶校驗碼的存儲數據方式, 訪問數據時一次處理一個帶區,可以提升讀寫數據性能,有冗餘能力,但校驗碼是存在一塊磁盤上,校驗盤的寫性能會成爲瓶頸,3與4的區別在於存儲數據時,3是橫向條帶化讀寫的,4是豎向存儲的,磁盤利用率爲(n-1)/n。如圖
RAID 5 : 與RAID4相似,都是有奇偶檢驗的獨立磁盤結構,但是校驗碼不是存在一個磁盤上,而是輪流寫入每個磁盤,讀寫性能提升,有冗餘,空間利用率爲(n-1)/n。
RAID 01 與RAID 10 : RAID 01 是RAID0與RAID1的結合體,先做RAID0條帶化提升性能,然後再做鏡像,保證冗餘,RAID10是先做鏡像保證冗餘然後再做條帶化提升性能,但當磁盤出現故障時修復能力RAID10比RAID01好,至少需要4塊磁盤才能做陣列,磁盤的利用率爲50%。如圖
陣列的實現方式有硬陣列和軟陣列,LINUX中軟陣列的實現方法:
linux中是通過內核中的md模塊來模擬一個RAID的,在創建RAID時需要把磁盤的模式設置爲fd模式,mdadm命令能把任何的塊設備模擬成RAID,過程如下
1. 將用fdisk命令將磁盤/dev/xvdb /dev/xvdc 模式設置爲fd模式,
fdisk /dev/xvdb ,創建磁盤 n ,按P 創建主分區,按1 創建第一個主分區,回車,按m,顯示所有幫助信息
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
按t ,
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L 顯示所有linux系統支持的文件系統ID,輸入fd
fd爲linux raid auto
然後按p
顯示磁盤列表爲
Device Boot Start End Blocks Id System
/dev/xvdb1 1 2610 20964793+ fd Linux raid autodetect
創建磁盤模式爲RAID結束
同樣把xvdbc創建爲RAID模式,cat /proc/partitions 可以顯示所有的分區
2 .mdadm命令
mdadm
創建模式 -C /dev/md#
專用選項:
-l :RAID級別 0 、1、3、5、10、 等
-n #: 設備個數,多少個硬盤設備來做RAID
-a {yes|no} : 是否自動爲其創建設備文件
-c : chunk 大小 ,2^n
-x # :指定空閒盤個數,當RAID正常是,這些盤是沒有起作用的,但當RAID當中有一個磁盤有故障時,這個空閒盤會自動頂替有故障的磁盤,並同步數據。
輸入命令 mdadm -C /dev/md0 -l 0 -n 2 -a yes /dev/xvdb1 /dev/xvdc1
[root@jiankong ~]# mdadm -C /dev/md0 -l 0 -n 2 -a yes /dev/xvdb1 /dev/xvdc1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
然後格式化 /dev/md0 mkfs.ext4 /dev/md0
就可以掛載了,
mount /dev/md0 /data
然後用df命令查看磁盤
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 1.6G 16G 9% /
tmpfs 497M 0 497M 0% /dev/shm
/dev/xvda1 485M 33M 427M 8% /boot
/dev/md0 40G 176M 38G 1% /data
軟陣列RAID0就已經創建並使用了。
管理模式
-a : --add 添加一塊磁盤到陣列中去
-r : --remove 移除一塊磁盤到陣列中去
-f : --fail 設置一塊磁盤狀態爲fail 不可用
裝配模式
-D :—detail 顯示陣列的詳細信息 mdadm –D /dev/md0
-s : --scan 把陣列詳細信息保存到配置文件 mdadm –D –s /dev/md0 > /etc/mdadm.conf
-S : --stop 停止陣列 mdadm –S /dev/md0
-A : 加載啓動陣列,如果沒有保存陣列的配置文件,則需要把陣列以及陣列包含的磁盤信息都要加上,否則無法加載
mdadm -A /dev/md1 /dev/xvdb1 /dev/xvdc1
cat /proc/mdstat 可以查看 md陣列的狀態,如果有同步的話可以看到同步過程