RAID詳解

磁盤冗餘陣列

    1988年由加利福尼亞大學伯克利分校發表的文章首次提到並定義了RAID,當今CPU性能每年可提升30%-50%但硬盤僅提升7%,漸漸的已經成爲計算機整體性能的瓶頸,並且爲了避免硬盤的突然損壞導致數據丟失還加入了冗餘備份機制。

RAID的早先設計理念爲”redundant array of Inexpensive disks“即不貴的硬盤組,而現在的定義是”Redundant Array ofIndependent Disks“即獨立的硬盤組,作用是防止硬盤物理損壞以及增加存儲設備的吞吐量。RAID常見的組合有0、1、5和10:


RAID0:需要至少兩塊(含)硬盤,可以有效的提高硬盤的性能和吞吐量,但沒有數據的冗餘和錯誤修復能力。

wKiom1br9d2whTCvAAA85iLxUuo683.jpg

將多塊硬盤通過硬件或軟件的方式串聯在一起,成爲一個大的卷集,將數據依次寫入到各個硬盤中,這樣性能會極大提升,但若任意一塊硬盤故障則整個系統的數據都會受到破壞。


RAID1:需要至少兩塊(含)硬盤,可以有效的提高數據資料的安全性和可修復性,但成本卻提高了。

wKioL1br9tWi_mRCAAA_riQXLGM634.jpg

實現原來是在數據寫入硬盤時也會在另外一塊閒置的硬盤上生成鏡像文件,在不影響性能的情況下最大限度保證數據資料的可靠性,只要在一對鏡像盤中還有一塊硬盤可以使用,那麼數據也不會丟失,具有很好的硬盤冗餘能力,雖然對數據來講絕對的安全,但成本卻明顯增加,磁盤利用率僅爲50%。


RAID5:需要至少三塊(含)硬盤,兼顧存儲性能、數據安全和儲存成本。

wKioL1br93GAetOzAACxI8DnZEI230.jpg


如上圖所示”parity”塊中保存的是其他硬盤數據的奇偶校驗信息(並非其他硬盤的數據),以數據的奇偶校驗信息來保證數據的安全,RAID5不以單獨的硬盤來存放數據的奇偶校驗信息,而是保存在各個磁盤上。

這樣當任何一個硬盤損壞都可以根據其他硬盤上的奇偶校驗信息來嘗試重建損壞的數據,性能也很高,兼顧了存儲性能、數據安全和存儲成本,可以看作是RAID0與RAID1的折中方案。


RAID10:需要至少四塊(含)硬盤,兼具速度和安全性,但成本很高。

wKiom1br90aT3ig6AACfAd7DDSw047.jpg


繼承了RAID0的快速與RAID1的安全,RAID1在這裏提供了冗餘備份的陣列,而RAID0則負責數據的讀寫陣列。

因這種結構的成本高,一般用於存放要求速度與差錯控制的數據。

mdadm命令用於管理系統軟件RAID硬盤陣列,格式爲:

”mdadm [模式] <RAID設備名稱> [選項] [成員設備名稱]”。


mdadm管理RAID陣列的動作有:

名稱   作用

Assemble 將設備加入到以前定義的陣列

Build 創建一個沒有超級塊的陣列

Create 創建一個新的陣列,每個設備具有超級塊。

Manage 管理陣列(如添加和刪除)。

Misc 允許單獨對陣列中的某個設備進行操作(如停止陣列)。

Follow or Monitor 監控狀態。

Grow 改變陣列的容量或設備數目。

mdadm管理RAID陣列的參數有:

參數 作用

-a 檢測設備名稱

-n 指定設備數量

-l 指定raid級別

-C 創建

-v 顯示過程

-f 模擬設備損壞

-r 移除設備

-a 添加設備

-Q 查看摘要信息

-D 查看詳細信息

-S 停止陣列


模擬訓練:RAID10配置流程:

第1步:在虛擬機中再添加4塊硬盤:

wKioL1br-o6AWRYJAAGU4SXDlPU321.jpg


第2步:使用mdadm命令創建RAID10,名稱爲”/dev/md0″。


-C代表創建操作,-v顯示創建過程,-a yes檢查RAID名稱,-n是用到的硬盤個數,-l是定義RAID的級別而後面寫上要加入陣列的硬盤名稱。


[root@www ~]#mdadm -Cv /dev/md0 -a yes -n4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde

mdadm: layout defaults to n2

mdadm: layout defaults to n2

mdadm: chunk size defaults to 512K

mdadm: size set to 20954624K

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.


第3步:格式化並掛載使用

將RAID磁盤陣列格式化爲ext4格式:

[root@www ~]# mkfs.ext4 /dev/md0

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=128 blocks, Stripe width=256 blocks

2621440 inodes, 10477312 blocks

523865 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=2157969408

320 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632,2654208,

4096000, 7962624

Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

創建掛載目錄:

[root@www ~]# mkdir /RAID

進行文件系統的掛載:

[root@www ~]# mount /dev/md0 /RAID

查看磁盤掛載信息:

[root@www ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/rhel-root 18G 3.0G 15G 17% /

devtmpfs 905M 0 905M 0% /dev

tmpfs 914M 84K 914M 1% /dev/shm

tmpfs 914M 8.9M 905M 1% /run

tmpfs 914M 0 914M 0% /sys/fs/cgroup

/dev/sr0 3.5G 3.5G 0 100% /media/cdrom

/dev/sda1 497M 119M 379M 24% /boot

/dev/md0 40G 49M 38G 1% /RAID

將此磁盤陣列掛載信息設置爲重啓後也依然生效:

[root@www ~]# echo "/dev/md0 /RAIDext4 defaults 0 0" >> /etc/fstab


第4步:查看/dev/md0設備信息


參數-D查看RAID陣列的詳細信息:

[root@www ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Tue May 5 07:43:26 2015

Raid Level : raid10

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 4

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Tue May 5 07:46:59 2015

State : clean

Active Devices : 4

Working Devices : 4

Failed Devices : 0

Spare Devices : 0

Layout : near=2

Chunk Size : 512K

Name : localhost.localdomain:0 (local to host localhost.localdomain)

UUID : cc9a87d4:1e89e175:5383e1e8:a78ec62c

Events : 17

Number Major Minor RaidDevice State

0 8 16 0 active sync /dev/sdb

1 8 32 1 active sync /dev/sdc

2 8 48 2 active sync /dev/sdd

3 8 64 3 active sync /dev/sde


第5步:模擬有1塊硬盤損壞的情況


使用mdadm的-f參數將/dev/sdb移出陣列:

[root@www ~]# mdadm /dev/md0 -f /dev/sdb

mdadm: set /dev/sdb faulty in /dev/md0

再看下陣列的狀態(此時的/dev/sdb狀態被是移除,失敗狀態):

[root@www ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Fri May 8 08:11:00 2015

Raid Level : raid10

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 4

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Fri May 8 08:27:18 2015

State : clean, degraded

Active Devices : 3

Working Devices : 3

Failed Devices : 1

Spare Devices : 0

Layout : near=2

Chunk Size : 512K

Name : www.com:0 (local to host www.com)

UUID : f2993bbd:99c1eb63:bd61d4d4:3f06c3b0

Events : 21

Number Major Minor RaidDevice State

0 0 0 0 removed

1 8 32 1 active sync /dev/sdc

2 8 48 2 active sync /dev/sdd

3 8 64 3 active sync /dev/sde

0 8 16 - faulty /dev/sdb


第6步:損壞後依然正常使用


因爲RAID10級別能夠允許一組RAID1硬盤中存在一個故障盤而不影響使用,所以依然可以正常的創建或刪除文件~

現在就把新的硬盤添加進去吧,當然也可以讓硬盤sdb恢復使用:請重啓後執行“ mdadm /dev/md0 -a /dev/sdb”。


第7步:設置冗餘備份磁盤


現在發現了一個問題沒?運維人員需要在硬盤硬件出現故障後手工添加新的磁盤進去,這樣會不會比較不方便?
假如初始化RAID5陣列時直接給予4塊硬盤,其中1塊硬盤設備用於在陣列某塊磁盤故障時自動的替換上去,這樣很棒吧!
先將磁盤系統卸載:

[root@www ~]# umount /dev/md0

停止該陣列設備,徹底的停用:

[root@www ~]# mdadm -S /dev/md0

mdadm: stopped /dev/md0

現在該陣列已經找不到了:

[root@www ~]# mdadm -D /dev/md0

mdadm: cannot open /dev/md0: No such file ordirectory

創建RAID5並設置1塊備份故障盤:

[root@www ~]# mdadm -Cv /dev/md0 -n 3 -l5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde

mdadm: layout defaults to left-symmetric

mdadm: layout defaults to left-symmetric

mdadm: chunk size defaults to 512K

mdadm: /dev/sdb appears to be part of a raidarray:

level=raid10 devices=4 ctime=Fri May 8 08:11:002015

mdadm: /dev/sdc appears to be part of a raidarray:

level=raid10 devices=4 ctime=Fri May 8 08:11:002015

mdadm: /dev/sdd appears to be part of a raidarray:

level=raid10 devices=4 ctime=Fri May 8 08:11:002015

mdadm: /dev/sde appears to be part of a raidarray:

level=raid10 devices=4 ctime=Fri May 8 08:11:002015

mdadm: size set to 20954624K

此處需要輸入y,確認創建這個陣列:

Continue creating array? y

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.

查看下陣列的詳細信息(Spare Devices數量爲1):

[root@www ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Fri May 8 09:20:35 2015

Raid Level : raid5

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 3

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Fri May 8 09:22:22 2015

State : clean

Active Devices : 3

Working Devices : 4

Failed Devices : 0

Spare Devices : 1

Layout : left-symmetric

Chunk Size : 512K

Name : www.com:0 (local to hostwww.com)

UUID : 44b1a152:3f1809d3:1d234916:4ac70481

Events : 18

Number Major Minor RaidDevice State

0 8 16 0 active sync /dev/sdb

1 8 32 1 active sync /dev/sdc

4 8 48 2 active sync /dev/sdd

3 8 64 - spare /dev/sde

將磁盤陣列格式化爲ext4系統:

[root@www ~]# mkfs.ex

t4 /dev/md0

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=128 blocks, Stripe width=256 blocks

2621440 inodes, 10477312 blocks

523865 blocks (5.00%) reserved for the superuser

First data block=0

Maximum filesystem blocks=2157969408

320 block groups

32768 blocks per group, 32768 fragments pergroup

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912, 819200,884736, 1605632, 2654208,

4096000, 7962624

Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accountinginformation: done

因爲前面設置過fstab文件,所以現在可以直接給掛載:

[root@www ~]# mount -a

將/dev/sdb設備設置爲故障並移出陣列:

[root@www ~]# mdadm /dev/md0 -f /dev/sdb

mdadm: set /dev/sdb faulty in /dev/md0

再來看下陣列的詳細信息(此時硬盤sde直接頂替上去了):

[root@www ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Fri May 8 09:20:35 2015

Raid Level : raid5

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 3

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Fri May 8 09:23:51 2015

State : active, degraded, recovering

Active Devices : 2

Working Devices : 3

Failed Devices : 1

Spare Devices : 1

Layout : left-symmetric

Chunk Size : 512K

Rebuild Status : 0% complete

Name : www.com:0 (local to hostwww.com)

UUID : 44b1a152:3f1809d3:1d234916:4ac70481

Events : 21

Number Major Minor RaidDevice State

3 8 64 0 spare rebuilding /dev/sde

1 8 32 1 active sync /dev/sdc

4 8 48 2 active sync /dev/sdd

0 8 16 - faulty /dev/sdb


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章