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