有關於什麼是磁盤陣列,你們能夠查看百度百科對磁盤陣列的解釋安全
大概的磁盤陣列的產生緣由是因爲直接使用大量IO速度快的磁盤須要很高的價錢,可是使用便宜的磁盤可以提供的IO速度又不夠理想,因此人們就開發出了磁盤陣列這個東西,將不少相對便宜的磁盤組合在一塊兒,按照必定方式組合在一塊兒的磁盤就叫作磁盤陣列,這個磁盤陣列根據不一樣的組合方式還能夠有不一樣的功能,具體的功能一樣也能夠點擊上面的網址,到百度百科中查看。dom
按照磁盤組合方式和IO方式的不一樣分爲RAID0、RAID一、RAID二、RAID三、RAID四、RAID五、RAID六、RAID7。其中RAID0是構建條帶卷,使用至少兩個磁盤,在進行寫入磁盤的操做時,將數據均分到兩個磁盤進行寫入,這樣寫入的速度就提升了兩倍,當磁盤的數量增加時,速度也會隨之增加。同理,讀取的速度也會成倍的增加。可是在實際的使用當中,咱們更加註重的是數據的安全性,若是僅僅使用RAID0進行速度的提高並不能保證數據的安全性,就好比若是有一塊磁盤被損壞,那麼這塊磁盤中的數據和在其餘磁盤上與其有關的數據都會被損壞,這種多是頗有可能發生的,因此出現了RAID1,RAID1的組合方式是使用至少兩個磁盤,在寫入數據的時候同時將相同的數據寫到兩個磁盤中,完成一次備份,當讀取的時候就從兩個磁盤同時進行讀取。在這種方式下雖然寫入速度並無提升,可是數據的安全性獲得了保證,若是當有一塊磁盤損壞的時候只須要及時的進行更換新的硬盤便可,並且使用這種方式還可以加快讀取速度。在實際的使用中還能夠經過RAID0和RAID1的組合使用,也就是RAID01或RAID10,RAID01是先進行RAID0,在進行RAID1;而RAID10則爲反過來。分佈式
在說完了RAID0和RAID1以後,RAID二、RAID三、RAID4、RAID5、RAID6都是類似的,因此在這裏只簡單的介紹RAID5的工做方式。RAID5是分佈式奇偶校驗的獨立磁盤結構,RAID5創建在RAID0之上,先是將數據條段化分開,保存在至少兩個磁盤中,而後將這兩個磁盤中的數據進行奇偶校驗,將結果保存在另外一塊新的磁盤中,因此RAID5至少須要三塊磁盤。和RAID01/10相似,RAID5也能和別的類型組合使用。ide
最後一個RAID7能夠理解爲一個獨立存儲計算機,自身帶有操做系統和管理工具,能夠獨立運行,理論上性能最高的RAID模式。固然,若是指向擴大磁盤的容量而創建的磁盤矩陣叫作JBOD(Just a Bunch Of Disks),它的功能是將多塊磁盤的空間合併一個大的連續空間使用。工具
在瞭解了什麼是磁盤陣列以後,咱們就能夠本身來實現一個磁盤陣列了,實現磁盤陣列的方式有兩種,第一種是硬件實現方式,經過不一樣的鏈接方式來構建;第二種是軟件實現方式,在Centos6上的實現方式是經過mdadm模式化工具來實現的。性能
mdadm:模式化工具,爲何叫模式化呢?就是由於這個工具在使用的過程當中有不少的模式,經過不一樣的選項可以進入不一樣的模式來對磁盤進行管理這個命令的語法格式:ui
mdadm [mode] <raiddevice> [options] <component-devices>url
它可以支持的RAID級別有:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10,...spa
[mode]:模式,分爲建立模式、管理模式、監控模式、裝配模式這四種模式,分別對應的功能以下:
建立模式:用來建立磁盤陣列
管理模式:向磁盤陣列中添加或者刪除磁盤
監控模式:監控磁盤陣列的工做狀況
裝配模式:像是備份同樣,將原先的磁盤陣列或者一個正在使用的磁盤陣列的配置用於一個新的磁盤陣列中
<raiddevice>:/dev/md#
<component-devices>:任意塊設備,注意若是是分區的話,其分區類型要改成fd
建立模式:
在平常的使用中首先是建立一個磁盤陣列,使用-C選項進入建立模式,而後跟上如下選項來完成各自的功能:
-n #:使用#個塊設備來建立此RAID
-l #:指明要建立的RAID的級別
-a {yes|no}:自動建立目標RAID設備的設備文件
-c CHUNK_SIZE:指明塊大小, 默認值爲512K
-x #:指明空閒盤的個數
好比建立一個RAID0:
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2} mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [root@localhost ~]#
在這條命令中「-C」是指進入建立模式;「 /dev/md0 」是指定建立好的RAID0叫什麼名字;「-a」是指自動建立目標RAID設備的設備文件;「-l」後頭跟RAID的級別,如過建立RAID0就是0,若是建立RAID5就是5 ;「-n」 使用2個塊設備來建立此RAID;在最後跟上想要加入此磁盤陣列的磁盤。若是想要建立其餘等級的磁盤陣列,只須要更改「-l」後面跟着的數字便可,可是值得注意的是在建立不一樣等級的磁盤陣列的時候須要想好每個等級的磁盤陣列所需的最少磁盤數量。
在建立完成以後就能夠像使用一塊普通磁盤同樣來使用這個磁盤陣列了,固然,首先要進行的是磁盤格式化,使用mkfs或者mkfs.ext4等命令,具體方法參考有關於磁盤管理的那篇博客。
管理模式:
在建立完磁盤陣列並使用了一段時間以後,忽然發現一塊磁盤不能使用了,那麼咱們須要將其移除,並添加一塊新的磁盤,此時須要使用管理模式,選項以下:
-f:爲指定的磁盤或分區添加損壞標記
-a:添加磁盤或分區到md設備中
-r:從md設備中移除磁盤或分區
在這裏建立一個RAID5磁盤陣列,假設如今sdb2磁盤發生了損壞,想要將其更換爲sdb3磁盤,那麼首先要作的是先將sdb2磁盤標記爲損壞:
建立RAID5:
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 5 -n 3 /dev/sdb{1,2,3} mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
將RAID5中的sdb2磁盤標記爲損壞狀態
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb2 mdadm: set /dev/sdb2 faulty in /dev/md0
移除sdb2磁盤:
[root@localhost ~]# mdadm /dev/md0 -r /dev/sdb2 mdadm: hot removed /dev/sdb2 from /dev/md0 [root@localhost ~]#
此時使用如下命令查看md0:
[root@localhost ~]# cat /proc/mdstat Personalities : [raid0] [raid6] [raid5] [raid4] md0 : active raid5 sdb3[3] sdb1[0] 4190208 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U] unused devices: <none> [root@localhost ~]#
發現sdb2已經被移除了(還可使用mdadm -D /dev/md0 命令查看)
在移除了磁盤以後,能夠將一塊新的硬盤添加到md0中,在這裏能夠將剛纔移除的sdb2磁盤添加到md0中:
[root@localhost ~]# mdadm /dev/md0 -a /dev/sdb2 mdadm: added /dev/sdb2 [root@localhost ~]#
此時再次查看,發現sdb2又回來了:
[root@localhost ~]# cat /proc/mdstat Personalities : [raid0] [raid6] [raid5] [raid4] md0 : active raid5 sdb2[4] sdb3[3] sdb1[0] 4190208 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] unused devices: <none> [root@localhost ~]#
在一個磁盤陣列不用了以後,可使用mdadm -D md0 來將其中止
監控模式:
使用mdadm -F /dev/md0命令來進行磁盤陣列的監控,可是這個模式是不常用的:
[root@localhost ~]# mdadm -F /dev/md0 Jun 21 12:50:01: Fail on /dev/md0 /dev/sdb2 Jun 21 12:50:19: RebuildStarted on /dev/md0 unknown device
裝配模式:
在平常的使用當中,咱們可能會有須要將一個磁盤陣列的配置保存下來,而後在其餘地方根據保存的信息進行恢復,須要依賴/etc/mdadm.conf文件進行,使用的方法是首先進行磁盤陣列信息的保存:
[root@localhost ~]# mdadm -D --scan >> /etc/mdadm.conf
而後 /etc/mdadm.conf 這個文件中就會保存如下內容:
[root@localhost ~]# cat /etc/mdadm.conf ARRAY /dev/md0 metadata=1.2 name=localhost.localdomain:0 UUID=82254c47:09be5b28:3544ddd0:4dd92c21 [root@localhost ~]#
而後。此時就可將原來的磁盤陣列中止:
[root@localhost ~]# mdadm -S /dev/md0 mdadm: stopped /dev/md0 [root@localhost ~]#
而後再查看磁盤陣列的信息,發現已經沒有磁盤陣列存在了:
[root@localhost ~]# cat /proc/mdstat Personalities : [raid0] [raid6] [raid5] [raid4] unused devices: <none> [root@localhost ~]#
接下來就可使用mdadm -A /dev/md0 命令來快速恢復磁盤陣列:
[root@localhost ~]# mdadm -A /dev/md0 mdadm: /dev/md0 has been started with 3 drives. [root@localhost ~]#
再次查看磁盤陣列的信息,發現剛纔中止的磁盤陣列又回來了:
[root@localhost ~]# cat /proc/mdstat Personalities : [raid0] [raid6] [raid5] [raid4] md0 : active raid5 sdb1[0] sdb3[3] sdb2[4] 4190208 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] unused devices: <none> [root@localhost ~]#