linux 軟RAID配置1

來源:互聯網
上載者:User

資料在現今企業中佔有重要的地位,資料存放區的安全性有而是人們使用電腦要注意的重要問題之一。通常情況下人們在伺服器端採用各種冗餘磁碟陣列RAID技術來保護資料,中高檔的伺服器一般都提供了昂貴的硬體RAID控制器,但是很多中小企業沒有足夠的經費承受這筆開銷。我們有沒有方法可以通過軟體來實現RAID呢?

   實際上在Linux下可以通過軟體來實現硬體的RAID功能,這樣既節省了投資,又能達到很好的效果。今天就由我為大家介紹如何在網路環境中實現帶有一塊Spare-disk的軟RAID1(資料鏡像)陣列。
小提示:什麼是RAID1(資料鏡像)?RAID 1是比較可靠的資料存放區方式,每一個磁碟都具有一個對應的鏡像盤。對任何磁碟的資料寫入都會被複製鏡像盤中;系統可以從一組鏡像盤中的任何一個磁碟讀取資料,也就是說同一個資料會被重複寫入兩次,這樣的磁碟鏡像肯定會提高系統成本。因為我們所能使用的空間只是所有磁碟容量總和的一半。
由於本文中會使用mdadm軟體,而該軟體一般情況下都會整合在Redhat linux中,所以可以直接使用。如果系統中沒有安裝可以到[url]http://www.cse.unsw.edu.au/~neilb/source/mdadm[/url]來下載mdadm-1.8.1.tgz進行編譯安裝,也可以到[url]http://www.cse.unsw.edu.au/~neilb/source/mdadm/rpm[/url]下載mdadm-1.8.1-1.i386.rpm直接安裝。

   作為一個面向伺服器的網路型作業系統,Linux對資料的安全和存取速度給予了高度重視,從2.4版核心開始Linux就實現了對軟體RAID的支援,這讓我們可以不必購買昂貴的硬體RAID裝置,就能享受到增強磁碟I/O效能和可靠性,進一步降低了系統的總體擁有成本。下面就讓我們看一個Redhat Linux AS 4下的軟體RAID配置執行個體吧。

● 作業系統為RedHat Linux AS 4;
● 核心版本為2.6.9-5.EL;
● 支援RAID0、RAID1、RAID4、RAID5、RAID6;
● 五塊36GB SCSI介面的磁碟,其中RedHat AS 4安裝在第一塊磁碟,其它四塊組成RAID 5用來存放Oracle資料庫。
在RedHat AS 4下實現軟體RAID是通過mdadm工具實現的,其版本為1.6.0,它是一個單一的程式,建立、管理RAID都非常方便,而且也很穩定。而在早期Linux下使用的raidtools,由於維護起來很困難,而且其效能有限,在RedHat AS 4下已經不支援了。

實現過程

-:配置RAID1
第一步:以root使用者登入系統,對磁碟進行分區。
#fdisk /dev/sdb
將裝置/dev/sdb上的全部磁碟空間劃分給一個主要磁碟分割,建立/dev/sdb1分區,並修改分區的類型標識為fd(linux raid auto),然後對剩餘的磁碟做同樣的操作。創/dev/sdb1,/dev/sdc1,/dev/sdd1三個分區。

第二步:建立RAID陣列
#mdadm -Cv /dev/md0 -l1 -n2 -x1 /dev/sd{b,c,d}1
# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 \
/dev/hda1 /dev/hdc1
小提示:-C參數為建立陣列模式。/dev/md0為陣列的裝置名稱。-l1為陣列模式,可以選擇0,1,4,5等多種不同的陣列模式,分別對應RAID0,RAID1,RAID4,RAID5。-n2為陣列中活動磁碟的數目,該數目加上備用磁碟的數目應該等於陣列中總的磁碟數目。-x1為陣列中備用磁碟的數目,因為我們是RAID1所以設定當前陣列中含有一塊備用磁碟。/dev/sd{b,c,d}1為參與建立陣列的磁碟名稱,陣列由三塊磁碟組成,其中兩塊為鏡象的活動磁碟,一塊備用磁碟提供故障後的替換。

第三步:查看RAID陣列情況
建立RAID過程需要很長時間,因為磁碟要進行同步化操作,查看/proc/mdstat檔案,該檔案顯示RAID的目前狀態和同步完成所需要的時間。
#cat /proc/mdstat
系統會顯示——
personalities:[raid1]
read_ahead 1024 sectors
event:1
md0:active raid1 sdb1[0] sdc1[1] sdd1[2]
18432000 blocks [2/2] [UU]
unused devices:
出現上面的提示後就表示建立的RAID1已經可以使用了。

第四步:編輯陣列的設定檔
mdadm的設定檔主要提供人們日常管理,編輯這個檔案可以讓RAID更好的為我們工作,當然這個步驟不是必須的。不經過編輯設定檔也可以讓RAID工作。
首先掃描系統中的全部陣列
#mdadm --detail -scan
掃描結果將顯示陣列的名稱,模式和磁碟名稱,並且列出陣列的UUID號,UUID也同時存在於陣列的每個磁碟中,缺少該號碼的磁碟是不能夠參與陣列的組成的。
接下來編輯陣列的設定檔/etc/mdadm.conf檔案,將掃描的顯示結果按照檔案規定的格式修改後添加到檔案的末尾。
#vi /etc/mdadm.conf
添加以下內容到mdadm.conf檔案中
device /dev/sdb1 /dev/sdc1 /dev/sdd1
array /dev/md0 level=raid1 num-devices=2 uuid=2ed2ba37:d952280c:a5a9c282:a51b48da spare-group=group1
在設定檔中定義了陣列的名稱和模式,還有陣列中活動磁碟的數目與名稱,另外也定義了一個備用的磁碟組group1。

第五步:啟動停止RAID1陣列
啟動和停止RAID1陣列的命令非常簡單。啟動直接執行“mdadm -as /dev/md0”即可。執行mdadm -s /dev/md0將停止RAID1陣列。另外在rc.sysinit啟動指令檔中加入命令mdadm -as /dev/md0後將設定為陣列隨系統啟動而啟動。

總結:配置RAID1的步驟相對RAID5來說不是很煩瑣,不過在使用mdadm時應該注意就是不要在一塊硬碟上劃分多個分區,再將多個分區組成陣列,這種方式不但不能提高硬碟的訪問速度,反而會降低整體系統的效能。正確的方法是將一塊硬碟分成一個或多個分區,然後將多塊不同硬碟的分區組成陣列。另外系統目錄如/usr最好不要放在陣列中,因為一旦陣列出現問題系統將無法正常運行。

二:配置RAID 5

1.建立分區

五塊SCSI磁碟分別對應/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde。其中第一塊磁碟/dev/sda分兩個區,用於安裝RedHat AS 4和做交換分區,其他四塊磁碟每塊只分一個主要磁碟分割,分別為/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1,並且將分區類型指定為“fd”,這將使Linux核心能將它們識別為RAID分區,且在每次引導時自動被檢測並啟動。建立分區使用fdisk命令。

# fdisk /dev/sdb
進入fdisk命令列後,使用命令n建立分區,命令t改變分區類型,命令w儲存分區表並退出,命令m為協助。

2.建立RAID 5

這裡使用了/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1四個裝置建立RAID 5,其中/dev/sde1作為備份裝置,其他為活動裝置。備份裝置主要起備用作用,一旦某一裝置損壞可以立即用備份裝置替換,當然也可以不使用備份裝置。命令格式如下:

# mdadm -Cv /dev/md0 -l5 -n3 -x1 -c128 /dev/sd[b,c,d,e]1
#mdadm --create --verbose /dev/md5 --level=raid5 --raid-devices=3 --chunk=32 /dev/hda3 /dev/hdb3 /dev/hdc3
parity-algorithm left-symmetric
parity-algorithm表示raid5的奇偶效驗的運演算法則,可用選擇有:
left-symmetric left-asymmetric right-symmetric right-asymmetric
最佳效能的是:left-symmetric
命令中各參數分別表示如下作用:“-C”指建立一個新的陣列;“/dev/md0”表示陣列裝置名稱;“-l5”表示設定陣列模式,可以選擇0、1、4、5、6,它們分別對應於RAID0、RAID1、RAID4、RAID5、RAID6,這裡設為RAID5模式;“-n3”指設定陣列中活動裝置的數目,該數目加上備用裝置的數目應等於陣列中的總裝置數; “-x1”設定陣列中備份裝置的數目,當前陣列中含有1個備份裝置;“-c128”指設定塊的尺寸為128KB,預設為64KB;“/dev/sd[b,c,d,e]1”指當前陣列中包含的所有裝置標識符,也可以分開來寫,中間用空格分開,其中最後一個為備份裝置。

3.查看陣列狀態

當建立一個新陣列或者陣列重構時,裝置需要進行同步操作,這一過程需要一定時間,可以通過查看/proc/mdstat檔案,來顯示陣列的目前狀態以及同步進度、所需時間等。

# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[3] sde1[4] sdc1[1] sdb1[0]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 4.3% (1622601/37734912) finish=1.0min speed=15146K/sec

unused devices:
當建立或重構完成後,再次查看/proc/mdstat檔案:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[0]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
通過以上內容,可以很清楚地看出當前陣列的狀態,各部分所代表的意思如下:“[3/3]”中的第一位元表示陣列所包含的裝置數,第二位元表示活動的裝置數,如果有一個裝置損壞,則第二位元將減1;“[UUU]”標記當前陣列可以正常使用的裝置情況,現假設/dev/sdb1出現故障,則該標記將變成[_UU],這時的陣列以降級模式運行,即該陣列仍然可用,但是不再具有任何冗餘;“sdd1[2]”指陣列所包含的裝置數為n,若方括弧內的數值小於n,則表示該裝置為活動裝置,若數值大於等於n,則該裝置為備份裝置,當一個裝置出現故障的時候,相應裝置的方括弧後將被標以(F)。

4.組建組態檔案

mdadm的預設設定檔為/etc/mdadm.conf,它主要是為了方便陣列的日常管理而設定的,對於陣列而言不是必須的,但是為了減少日後管理中不必要的麻煩,還是應該堅持把這一步做完。

在mdadm.conf檔案中要包含兩種類型的行:一種是以DEVICE開頭的行,它指明在陣列中的裝置列表;另一種是以ARRAY開頭的行,它詳細地說明了陣列的名稱、模式、陣列中活動裝置的數目以及裝置的UUID號。格式如下:

DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0

以上的這些資訊可以通過掃描系統的陣列來擷取,命令為:
# mdadm -Ds
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0

devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
使用vi命令,按照規定的格式編輯修改/etc/mdadm.conf檔案
# vi /etc/mdadm.conf

5.建立檔案系統並掛接(mount)使用

RAID5已經啟動並處於運行狀態,現在要做的就是在其上建立一個檔案系統,這裡使用mkfs命令,檔案系統類型為ext3。命令如下:
# mkfs -t ext3 /dev/md0
當新的檔案系統產生之後,就可以將/dev/md0掛接到指定的目錄了。命令如下:
# mount /dev/md0 /mnt/raid
為了讓系統在啟動時自動將/dev/md0掛接到/mnt/raid,還需要修改/etc/fstab檔案,添加如下內容:
/dev/md0 /mnt/raid ext3 defaults 0 0

故障類比

上面的執行個體,讓我們對Redhat Linux AS 4的軟體RAID功能有了一定的認識,並且通過詳細的步驟說明了如何建立RAID5。有了RAID做保障,電腦裡的資料看起來似乎已經很安全了,然而現有的情況還是不能讓我們高枕無憂,想一想,萬一磁碟出現故障怎麼辦?下面我們類比一個更換RAID5故障磁碟的完整過程,希望以此豐富大家處理RAID5故障的經驗,提高管理和維護水平。

我們仍然沿用上面的RAID5配置,首先往陣列中拷貝一些資料,接下來開始類比/dev/sdb1裝置故障。不過,對於無備份裝置的RAID5的類比過程也要經過如下三步,只是陣列重構和資料恢複是發生在新裝置添加到陣列中之後,而不是裝置損壞時。

1.將/dev/sdb1標記為已損壞的裝置
# mdadm /dev/md0 -f /dev/sdb1
查看當前陣列狀態
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[4](F)
75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [_UU]
[=>...................] recovery = 8.9% (3358407/37734912) finish=1.6min speed=9382K/sec

unused devices:
因為有備份裝置,所以當陣列中出現裝置損壞時,陣列能夠在短時間內實現重構和資料的恢複。從當前的狀態可以看出,陣列正在重構,且運行在降級模式,sdb1[4]的後面已經標上了(F),活動裝置數也降為2個。

經過幾分鐘後,再次查看當前陣列狀態。
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[0] sdc1[1] sdb1[3](F)
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
此時陣列重構已經完成,資料恢複完畢,原有的備份裝置sde1成為了活動裝置。

2.移除損壞的裝置
# mdadm /dev/md0 -r /dev/sdb1
查看當前陣列的狀態:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[0] sdc1[1]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
損壞的sdb1已經從陣列中移掉。

3.將新裝置添加到陣列中
因為是類比操作,可以通過下面的命令再次將/dev/sdb1添加到陣列中。如果是實際操作則要注意兩點:一是在添加之前要對新磁碟進行正確的分區;二是添加時要用所添加裝置的裝置名稱替換/dev/sdb1。

# mdadm /dev/md0 -a /dev/sdb1
查看當前陣列的狀態:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdb1[3] sdd1[2] sde1[0] sdc1[1]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
這時sdb1作為備份裝置再次出現在陣列中
常用陣列維護命令

1.啟動陣列
# mdadm -As /dev/md0
該命令指啟動/dev/md0陣列,其中“-A”指裝載一個已存在的陣列;“-s”指尋找mdadm.conf檔案中的配置資訊,並以此為依據啟動陣列。
#mdadm -As
該命令指啟動mdadm.conf檔案中的所有陣列。
#mdadm -A /dev/md0 /dev/sd[b,c,d,e]1
如果沒有建立mdadm.conf檔案則可以採用上面這種啟動方式。

2.停止陣列
# mdadm -S /dev/md0

3.顯示指定陣列的詳細資料
# mdadm -D /dev/md0

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.