歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux軟RAID概述

RAID 概述

RAID即廉價冗余磁盤陣列(RedundantArray of Inexpensive Disk)的簡稱,通過該技術可以將多個磁盤組成一個陣列整體,而應用時可以作為單個磁盤使用。RAID 磁盤陣列根據其使用的技術不同,可用於提高數據讀寫效率、提高數據冗余(備份),當陣列中的一個磁盤發生故障時,可以通過校驗數據從其他磁盤中進行恢復,大大增強了應用系統數據的讀寫性能及可靠性。

較常見的 RAID技術包括如下幾個級別:

RAID 0:最基本的一種陣列方式,通過簡單的將多個磁盤(最少2 塊)組成到一起,作為一個大磁盤使用。存取數據時,通過將數據分段同時寫入到不同的磁盤中,大大提高了效率。但是這種方式沒有數據冗余,其中任何一個磁盤壞了以後,都可能導致數據丟失。

RAID 1:即磁盤鏡像技術,需要最少2 塊磁盤(磁盤利用率:1/n)。這種方式將數據同時寫入到陣列中的多塊磁盤中,不同磁盤中的數據互為鏡像。因此,其中任何一個磁盤壞了以後,數據不會丟失。

RAID 5:通過引入數據校驗技術來保證數據的安全,需要最少 3 塊磁盤(磁盤利用率: n-1)。

這種方式並不使用固定的某塊磁盤存放校驗數據,而是分段存儲在各個磁盤中。因此,其中任何一個磁盤壞了以後,也可以根據其他磁盤中的校驗數據進行恢復。

由於 RAID5 陣列技術既通過數據冗余增強了可靠性,又通過多塊磁盤同時寫入數據提高了效率,一直以來受到廣泛的應用。

未使用硬件磁盤卡方式實現的 RAID 技術,通常稱為軟 RAID 技術。本文將在 RHEL5 系統中,使用不同磁盤中的多個分區,配置實現 RAID 5磁盤陣列。

9.2  構建使用軟 RAID磁盤陣列

在 RHEL5 系統中,配置軟 RAID 陣列可以通過安裝 mdadm 軟件包實現。該軟件包一般為系統默認安裝,若檢查沒有安裝的話,從 RHEL5 系統光盤中查找安裝即可。

[root@localhost ~]# mount /dev/cdrom/media/cdrom/

mount: block device /dev/cdrom iswrite-protected, mounting read-only

[root@localhost ~]# rpm -ivh /media/cdrom/Server/mdadm-2.5.4-3.el5.i386.rpm

Preparing...       ########################################### [100%]

1:mdadm      ########################################### [100%]

[root@localhost ~]# rpm -qi mdadm | grep"Summary"

Summary    : mdadm 控制 Linux md 設備 (軟件 RAID 陣列)

下面將以 RAID5磁盤陣列為例,講解軟磁盤陣列的配置使用方法。

准備用於 RAID陣列的分區

用於組成 RAID陣列的各個分區應該位於不同的磁盤設備中,否則實用價值不大。各分區的容量最好也相同,必要時可以將整個硬盤劃分為一個分區。

為 Linux服務器添加 4塊 SCSI 硬盤,並使用 fdisk 工具各劃分出一塊 2GB 的分區,依次為:

/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1。分區前請注意確保沒有別的程序正在使用對應的磁盤。下一小節中將以這 4 個分區為例(RAID 5需要至少 3 塊磁盤或分區)講解 RAID5 磁盤陣列的創建方法。

對於上述分區還應該將其類型 ID更改為“fd”,對應為“Linux raid autodetect”,表示支持用於 RAID磁盤陣列。

[root@localhost ~]# fdisk /dev/sdb

……

Command (m for help): n

Command action

e   extended

p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-522, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK(1-522, default 522): +2048M

Command (m for help): t

Selected partition 1

Hex code (type L to list codes): fd

Changed system type of partition 1 to fd(Linux raid autodetect)

Command (m for help): p

……

Device Boot     Start      End     Blocks    Id   System

/dev/sdb1            1        250    2008093+  fd  Linux raid autodetect

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[root@localhost ~]#

創建好三個分區以後,執行“partprobe”重新探測分區表(或重啟系統),驗證分區類型和容量等信息。

[root@localhost ~]# partprobe

[root@localhost ~]# fdisk -l /dev/sd[b-e] |grep "^/dev/sd"

/dev/sdb1       1      250     2008093+  fd Linux raid autodetect

/dev/sdc1       1      250      2008093+  fd Linux raid autodetect

/dev/sdd1       1      250     2008093+  fd Linux raid autodetect

/dev/sde1      1       250    2008093+  fd  Linux raid autodetect

創建 RAID設備

使用 mdadm 工具可以組合多個 RAID 分區作為一個磁盤陣列,陣列設備文件名習慣上使用“/dev/md0”、“/dev/md1”等。

[root@localhost ~]# mdadm -Cv /dev/md0 -ayes -n4 -l5 /dev/sd[b-e]1

mdadm: layout defaults to left-symmetric

mdadm: chunk size defaults to 64K

mdadm: /dev/sdb1 appears to be part of araid array:

level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009

mdadm: /dev/sdc1 appears to be part of araid array:

level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009

mdadm: /dev/sdd1 appears to be part of araid array:

level=raid5 devices=4 ctime=Sat Jul 2508:44:50 2009

mdadm: /dev/sde1 appears to be part of araid array:

level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009

mdadm: size set to 2008000K

Continue creating array? y

mdadm: array /dev/md0 started.

[root@localhost ~]#

在上述命令操作中,“/dev/md0”為新建的 RAID陣列設備文件名,“/dev/sd[bcd]1”表示此陣列將使用/dev/sdb1、/dev/sdc1、/dev/sdd1 這三個分區。其他各部分選項、參數的含義如下:

-C,等同於 --create:創建一個新的陣列設備

-v,等同於--verbose:執行過程中輸出細節信息

-a,等同於 --auto=:指定參數為 yes 時,表示若對應的設備文件不存在則自動創建

-n,等同於--raid-devices=:用於組成陣列的分區設備個數,“-n3”表示為 3 個

-l,等同於 --level=:使用的 RAID級別,“-l5”表示為 RAID 5

關於 mdadm 命令更多選項的使用,請參考“man mdadm”幫助信息。

創建好 md0陣列設備後,將自動被激活,執行“cat /proc/mdstat”可以觀察陣列設備的運行狀態。

[root@localhost ~]# ls -l /dev/md0

brw------- 1 root root 9, 0 07-25 09:03/dev/md0

[root@localhost ~]# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sde1[3] sdd1[2] sdc1[1]sdb1[0]

6024000 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

其中,“[4/4]”部分中的第一個“4”表示成員設備個數,後邊的“4”表示當前的活動設備個數,“UUUU”對應為成員設備的狀態。例如,若出現“[4/3][UUU_]”的信息時,則表示第 4 個成員設備(/dev/sde1)出現故障了。

在 RAID設備中建立文件系統

創建好磁盤陣列設備文件“/dev/md0”以後,就可以在該設備中建立文件系統了。在 RHEL5系統中,可以使用 mkfs 命令格式化該設備,將其作為 ext3文件系統來使用。

[root@localhost ~]# mkfs -t ext3 /dev/md0

mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

753664 inodes, 1506000 blocks

75300 blocks (5.00%) reserved for the superuser

First data block=0

Maximum filesystem blocks=1543503872

46 block groups

32768 blocks per group, 32768 fragments pergroup

16384 inodes per group

Superblock backups stored on blocks:

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

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystemaccounting information: done

This filesystem will be automaticallychecked every 33 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

掛載並使用文件系統

創建掛載點目錄“/mdata”,並將上一小節中建立好的文件系統掛載到該目錄,即可正常使用。  

[root@localhost ~]# mkdir /mdata

[root@localhost ~]# mount /dev/md0 /mdata

[root@localhost ~]# df -T | grep"md0"    //驗證掛載的“/mdata”文件系統

/dev/md0      ext3    5929360    142976   5485184  3% /mdata

除去一個成員設備作為校驗盤以後,磁盤陣列的有效存儲空間為 3個成員設備的容量之和(大約為 2GB×3=6GB)。

如果希望在每次開機後自動掛載該陣列設備,可以在“/etc/fstab”文件中添加相應設置。

[root@localhost ~]# vi /etc/fstab

/dev/md0      /mdata        ext3  defaults   0  0  

陣列的管理及設備恢復

 

基本管理操作

1.掃描或查看磁盤陣列信息

使用 mdadm 命令時,“-D”選項相當於“--detail”,表示顯示掃描結果的詳細內容;“-s”選項相當於“--scan”,用於掃描陣列設備。

未指定陣列設備文件時,可以顯示出當前系統中的陣列配置信息、RAID設備列表。

[root@localhost ~]# mdadm -vDs

ARRAY /dev/md0 level=raid5 num-devices=4

UUID=35bcffa1:cdc5ba41:0c5b5702:e32a3259

devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

當指定陣列設備作為參數時,可以輸出指定陣列設備的詳細參數,包括活動設備個數、失效設備個數、更新時間、列表成員設備位置等。

[root@localhost ~]# mdadm -vDs /dev/md0

/dev/md0:

Version : 00.90.03

Creation Time : Sat Jul 25 11:23:07 2009

 Raid Level : raid5

 Array Size : 6024000 (5.74 GiB 6.17 GB)

Device Size : 2008000 (1961.27 MiB 2056.19 MB)

Raid Devices : 4

Total Devices : 4

Preferred Minor : 0

Persistence : Superblock is persistent

Update Time : Sat Jul 25 11:26:01 2009

  State : clean

Active Devices : 4

Working Devices : 4

Failed Devices : 0

Spare Devices : 0

 Layout : left-symmetric

 Chunk Size : 64K

   UUID : 35bcffa1:cdc5ba41:0c5b5702:e32a3259

 Events : 0.6

Number   Major   Minor  RaidDevice State

0       8      17        0      active sync   /dev/sdb1

1       8       33       1      active sync   /dev/sdc1

2       8       49       2      active sync   /dev/sdd1

3       8       18       3      active sync   /dev/sde1

2.創建配置文件 mdadm.conf

mdamd 的配置文件為“/etc/mdadm.conf”,該文件只是用來方便用戶管理和使用,缺少此文件並不會影響磁盤陣列的功能。在配置文件中可以保存多個磁盤陣列的配置信息。配置文件中的基本信息可以通過前面講過的“mdadm -vDs”命令獲得。

[root@localhost ~]# vi /etc/mdadm.conf

DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1/dev/sde1

ARRAY /dev/md0 level=raid5 num-devices=4

UUID=35bcffa1:cdc5ba41:0c5b5702:e32a3259  

devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

CREATE owner=root group=root mode=0640

在上述文件中,“ARRAY”、“UUID”“devices”部分是位於同一行中的內容,最後一行中的“CREATE”用於設置自動創建陣列設備文件的屬主、屬組及默認權限。關於mdadm.conf配置文件中更多配置項的使用,可以參考“man mdadm.conf”幫助信息。

3.啟動/停止RAID陣列

在確保沒有相關程序讀寫磁盤陣列設備的情況下,可以停止陣列設備。只需使用 mdadm命令結合“-S”選項(等同於“--stop”選項)即可。執行該操作將會禁用對應的陣列設備,釋放相關資源。

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

mdadm: stopped /dev/md0

結合“-A”選項(等同於“--assemble”選項)可以重新組合對應的磁盤陣列設備。

[root@localhost ~]# mdadm -A /dev/md0

mdadm: /dev/md0 has been started with 4drives.

[root@localhost ~]# mount /dev/md0 /mdata/

設備恢復操作

1.模擬陣列設備故障

對於運行中的磁盤陣列,可以結合 mdadm 命令的“-f”選項(等同於“”選項)用於模擬成員設備故障,例如可將陣列中的“/dev/sdb1”標記為故障設備。

[root@localhost ~]# mdadm /dev/md0 -f/dev/sde1

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

當陣列中的某個成員設備出現故障時,陣列會將其標記為失活狀態。此時通過“cat /proc/mdstat”可以觀察到丟失出現故障的設備(/dev/sde1)。

[root@localhost ~]# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sde1[3](F) sdd1[2]sdc1[1] sdb1[0]

6024000 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]

2.更換故障設備,並恢復數據

對於出現故障的設備,可以結合“-r”選項將其移除,然後換上正常的設備,結合“-a”選項重新添加到陣列中即可。

[root@localhost ~]# mdadm /dev/md0 -r/dev/sde1

mdadm: hot removed /dev/sde1     //移除故障設備

[root@localhost ~]# mdadm /dev/md0 -a/dev/sde1

mdadm: re-added /dev/sde1      //重新加入正常設備

RAID5 磁盤陣列能夠在較短時間內進行重構和數據恢復,當需要恢復的數據較多時,可以在此期間觀察到陣列狀態的恢復進度。

[root@localhost ~]# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sde1[3] sdd1[2] sdc1[1]sdb1[0]

6024000 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]

[===>.................] recovery =  16.3% (328192/2008000)finish=2.6min

speed=10586K/sec

unused devices: <none>

待數據恢復完成以後,再次查看陣列狀態即顯示為正常了。

[root@localhost ~]# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sde1[3] sdd1[2] sdc1[1]sdb1[0]

6024000 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

unused devices: <none>  

本文出自 “吖吖個呸” 博客,請務必保留此出處http://gm100861.blog.51cto.com/1930562/794271

Copyright © Linux教程網 All Rights Reserved