標簽:
安裝程序實現(xiàn)軟件RAID代替硬件RAID的方法,今天再進一步談談手動創(chuàng)建軟RAID和日常維護的方法。 mdadm使用的也是md驅動,由于其擁有多種模式,而且單一工具,不依賴任何配置文件,是替代raidtools的好工具。目前幾乎所有發(fā)行版本使用的都是該工具。
RAID 是冗余磁盤陣列(Redundant Array of Inexpensive Disk)的簡稱。它是把多個磁盤組成一個陣列,當作單一磁盤使用。它將數(shù)據(jù)以分段(striping)的方式分散存儲在不同的磁盤中,通過多個磁盤的同 時讀寫,來減少數(shù)據(jù)的存取時間,并且可以利用不同的技術實現(xiàn)數(shù)據(jù)的冗余,即使有一個磁盤損壞,也可以從其他的磁盤中恢復所有的數(shù)據(jù)。簡單地說,其好處就 是:安全性高、速度快、數(shù)據(jù)容量大。
RAID 0 全稱叫做Striped Disk Array without Fault Tolerance( 沒有容錯設計的條帶磁盤陣列)。圖中一個圓柱就是一塊磁盤(以下均是),它們并聯(lián)在一起。從圖中可以看出,RAID 0在存儲數(shù)據(jù)時由RAID 控制器(硬件或軟件)分割成大小相同的數(shù)據(jù)條,同時寫入陣列中的磁盤。如果發(fā)揮一下想象力,你會覺得數(shù)據(jù)象一條帶子橫跨過所有的陣列磁盤,每個磁盤上的條帶深度則是一樣的。
至于每個條帶的深度則要看所采用的RAID 類型,在NT 系統(tǒng)的軟RAID 0等級中,每個條帶深度只有64KB 一種選項,而在硬RAID 0等級,可以提供8、16、32、64 以及128KB 等多種深度參數(shù)。Striped 是RAID 的一種典型方式,在很多RAID 術語解釋中,都把Striped 指向RAID 0。在讀取時,也是順序從陣列磁盤中讀取后再由RAID 控制器進行組合
這樣,數(shù)據(jù)就等于并行的寫入和讀取,從而非常有助于提高存儲系統(tǒng)的性能。對于兩個硬盤的RAID 0系統(tǒng),提高一倍的讀寫性能可能有些夸張,畢竟要考慮到也同時繒加的數(shù)據(jù)分割與組合等與RAID 相關的操作處理時間,但比單個硬盤提高50% 的性能是完全可以的。
不過,RAID 0還不能算是真正的RAID,因為它沒有數(shù)據(jù)冗余能力。由于沒有備份或校驗恢復設計,在RAID 0陣列中任何一個硬盤損壞就可導致整個陣列數(shù)據(jù)的損壞,因為數(shù)據(jù)都是分布存儲的。
對比RAID 0等級,存儲工程師能發(fā)現(xiàn)硬盤的內容是兩兩相同的。這就是鏡像――兩個硬盤的內容完全一樣,這等于內容彼此備份。比如陣列中有兩個硬盤,在寫入時,RAID 控制器并不是將數(shù)據(jù)分成條帶而是將數(shù)據(jù)同時寫入兩個硬盤。這樣,其中任何一個硬盤的數(shù)據(jù)出現(xiàn)問題,可以馬上從另一個硬盤中進行恢復。注意,這兩個硬盤并不是主從關系,也就是說是相互鏡像/恢復的。
RAID 1 已經可以算是一種真正的RAID 系統(tǒng),它提供了強有力的數(shù)據(jù)容錯能力,但這是由一個硬盤的代價所帶來的效果,而這個硬盤并不能增加整個陣列的有效容量
RAID 0磁盤陣列的數(shù)據(jù)映射 上圖顯示了RAID 0磁盤陣列的虛擬設備是如何映射到單個的成員磁盤的,一般情況下,虛擬設備的容量是成員磁盤容量的總和。
假如RAID 0磁盤陣列的磁盤失敗,那么,數(shù)據(jù)將徹底丟失。為了在RAID 0磁盤陣列情況下恢復數(shù)據(jù),唯一的辦法是使用磁帶備份或者鏡像拷貝。
典型的RAID 0使用獨立訪問的方法將數(shù)據(jù)分塊,然后發(fā)送給成員磁盤,而不是使用并行訪問方法,它能實現(xiàn)多個I / O操作同時并行地處理。因為RAID 0不需要計算校驗,因而,它是所有類型的陣列中吞吐量最快的。
創(chuàng)建軟RAID
在紅旗Linux服務器中是通過mdadm工具來創(chuàng)建和維護軟RAID的,mdadm在創(chuàng)建和管理軟RAID時非常方便,而且很靈活。mdadm常用的參數(shù)有如下:
- –create或-C:創(chuàng)建一個新的軟RAID,后面接raid設備的名稱。例如,/dev/md0,/dev/md1等。
- –assemble或-A:加載一個已存在的陣列,后面跟陣列以及設備的名稱。
- –detail或-D:輸出指定RAID設備的詳細信息。
- –stop或-S:停止指定的RAID設備。
- –level或-l:設置RAID的級別,例如,設置“–level=5”則表示創(chuàng)建陣列的級別是RAID 5。
- –raid-devices或-n:指定陣列中活動磁盤的數(shù)目。
- –scan或-s:掃描配置文件或/proc/mdstat文件來搜索軟RAID的配置信息,該參數(shù)不能單獨使用,只能配置其它參數(shù)才能使用。
- -a 記住,一般在系統(tǒng)中有md0這個設備,但是沒有md1,md3等其他設備,所以在創(chuàng)建md1或者其他raid 的時候要加上參數(shù) -a yes,否則會報錯沒有這個文件
下面將通過一個實例來講述通過mdadm如何實現(xiàn)軟RAID的功能。
-c, –chunk=: Specify chunk size of kibibytes. RHEL 6.X或和CentOS 6.X缺省為512KB
chunk-size是一個重要的參數(shù),決定了一次向陣列中每個磁盤寫入數(shù)據(jù)的量
Chunk:可以理解為raid分儲數(shù)據(jù)時每個數(shù)據(jù)段的大小(通常為32/64/128/256/512等這類數(shù)字大。;合理的選擇chunk大小非常重要,若chunk過大可能一塊磁盤上的帶區(qū)空間就可以滿足大部分的I/O操作,使得數(shù)據(jù)的讀寫只局限于一塊硬盤上,這便不能充分發(fā)揮RAID并發(fā)的優(yōu)勢;如果chunk設置過小,任何很小的I/O指令都 可能引發(fā)大量的讀寫操作,不能良好發(fā)揮并發(fā)性能,占用過多的控制器總線帶寬,也影響了陣列的整體性能。所以,在創(chuàng)建帶區(qū)時,我們應該根據(jù)實際應用的需要,合理的選擇帶區(qū)大小。
chunk 表示的是給每個盤一次寫這么多數(shù)據(jù)
stride=size of chunk /size of block 表示的是在一個磁盤上每次寫這么多數(shù)據(jù)步幅
配置raid 0
[root@mail ~]# fdisk -l|grep ^\/dev/
/dev/sda1 * 1 38 305203+ 83 Linux
/dev/sda2 39 3790 30137940 83 Linux
/dev/sda3 3791 3916 1012095 82 Linux swap / Solaris
/dev/sdb1 1 1305 10482381 83 Linux
/dev/sdc1 1 1305 10482381 83 Linux
/dev/sdd1 1 130 1044193+ 83 Linux
/dev/sde1 1 261 2096451 83 Linux
/dev/sdf1 1 261 2096451 83 Linux
/dev/sdg1 1 652 5237158+ 83 Linux
[root@mail ~]# mdadm -C /dev/md0 -l 0 -n 2 –chunk=64 /dev/sdb1 /dev/sdc1
mdadm: /dev/sdb1 appears to contain an ext2fs file system
size=10482380K mtime=Thu Jan 1 08:00:00 1970
mdadm: /dev/sdc1 appears to contain an ext2fs file system
size=10482380K mtime=Thu Jan 1 08:00:00 1970
Continue creating array? yes
mdadm: array /dev/md0 started.
[root@mail ~]# mkfs.ext3 /dev/md0
[root@mail ~]# mount /dev/md0 /os/
|