1,136 瀏覽數

Software RAID

Software RAID
Step 0:簡介
Step 1:檢查你的系統是否有提供 mdadm(multiple devices admin) 工具
#rpm -aq | grep -i mdadm
Step 2:磁碟切割
#fdisk /dev/sda
Step 3: 建立 RAID
# mdadm –create /dev/md0 –level=raid5 –raid-devices=3 /dev/sd{a,b,c}1 –spare-devices=1 /dev/sdd1
Step 4: 查看RAID狀態
# mdadm –detail /dev/md0
Step 5: RAID的配置文件
#vi /etc/mdadm.conf
Step 6: 啟動停止RAID陣列
# mdadm –manage –stop /dev/md0
# mdadm –assemble –run /dev/md0

Step 7: RAID的管理
# mdadm /dev/md0 –add /dev/sdd1
# mdadm /dev/md0 –fail /dev/sdc1
# mdadm /dev/md0 –remove /dev/sdc1

Step 8: spare-group
Step 9: Multipath
#mdadm -C /dev/md0 –level=multipath –raid-devices=2 /dev/sda1 /dev/sdb1

Step 0:簡介

如果你沒有錢買硬體的 RAID, Linux 提供了Software RAID ,可以將系統上有多顆硬碟組合起來成為 Software RAID,除了可以保護資料的安全也可以提昇資料讀寫的速度.下面是常見RAID的種類.

LINEAR (JBOD:Just bunch of Disks) RAID
JBOD_linear
RAID-0 (Stripping)
RAID0_striped
RAID-1 (Mirror)
RAID1_mirrored
RAID-4(Stripping+Parity)
RAID4_striped
RAID-5 (Stripping+Parity)
RAID5_striped
RAID-6 (Stripping+2 parities)

Step 1:檢查你的系統是否有提供 mdadm(multiple devices admin) 工具

因為 raidtools 不方便讓使用者管理或維護,所以現在多數的 Linux 提供另一套 mdadm(multiple devices admin)提供使用者更強大的功能來管理維護 Software RAID.首先先檢查你的系統是否有提供 mdadm(multiple devices admin) 工具

[root@benjr ~]# rpm -aq | grep -i mdadm
mdadm-2.6.9-2.el5

如果你的系統中沒有安裝可以到 http://www.cse.unsw.edu.au/~neilb/source/mdadm來下載.

Step 2:磁碟切割

接下來我會示範由 4 顆硬碟( /dev/sda, /dev/sdb, /dev/sdc, /dev/sdd)組合成的 RAID5.所以在切割硬碟時有一件事情要注意的是 partition type 要設定成 fd(Linux raid autodetect)

[root@benjr ~]# fdisk /dev/sdaThe number of cylinders for this disk is set to 4467.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)Command (m for help): p
Disk /dev/sda: 36.7 GB, 36748945408 bytes
255 heads, 63 sectors/track, 4467 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/sda1             1      4467  35881177   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

/dev/sdb,/dev/sdc,/dev/sdd 也需要切割出相同的 partitions.

[root@benjr ~]# fdisk -lDisk /dev/sda: 36.7 GB, 36748945408 bytes
255 heads, 63 sectors/track, 4467 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot    Start       End    Blocks   Id  System
/dev/sda1             1      4467  35881177   fd  Linux raid autodetect
……..略………
/dev/sdb1             1     35046  35887103+  fd  Linux raid autodetect
……..略………
/dev/sdc1             1     35046  35887088   fd  Linux raid autodetect
……..略………
/dev/sdd1             1      4467  35881177   fd  Linux raid autodetect

Step 3: 建立 RAID

[root@benjr ~]# mdadm –create /dev/md0 –level=raid5 –raid-devices=3 /dev/sd{a,b,c}1 –spare-devices=1 /dev/sdd1
mdadm: /dev/sda appears to be part of a raid array:
level=5 devices=3 ctime=Tue Jun 27 16:07:53 2006
mdadm: /dev/sdb appears to be part of a raid array:
level=5 devices=3 ctime=Tue Jun 27 16:07:53 2006
mdadm: /dev/sdc appears to be part of a raid array:
level=5 devices=3 ctime=Tue Jun 27 16:07:53 2006
mdadm: /dev/sdd appears to be part of a raid array:
level=5 devices=3 ctime=Tue Jun 27 16:07:53 2006
Continue creating array? y
mdadm: array /dev/md0 started.
  • –create
    :參數為創建新陣列 RAID
  • /dev/md0
    :為陣列 RAID 的裝置名稱
  • –level
    :可以選擇 line,raid0,raid1,raid4,raid5 等多種不同的陣列模式
  • –raid-devices=3 /dev/sd{a,b,c}
    :為RAID中磁碟的數目
  • –spare-devices=1 /dev/sdd
    :為RAID中備援的磁碟,當 sda,sdb,sdc 中有硬碟損毀時才會取代毀壞的硬碟

RAID 5需要一點時間來建立,我們可以使用下面的指令來查看RAID是否已經建立完成.

Step 4: 查看RAID狀態

基本上我們可以查看 /proc/mdstat 來的得知所有 RAID 建立的狀態.

[root@benjr ~]# cat /proc/mdstat
Personalities : [raid5]
read_ahead 1024 sectors
Event: 11
md0 : active raid5 sdc[4] sdd[3] sdb[1] sda[0]
71775104 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[>....................]  recovery =  4.1% (1485416/35887552) finish=55.9min speed=10255K/sec
unused devices:

由上可以得知RAID還在建立當中.不過 mdadm還有相當齊全的一組工具,他也提供了管理的指令來查看目前所有 RAID 的狀態.

[root@benjr ~]# mdadm –detail /dev/md0
/dev/md0:
Version : 00.90.00
Creation Time : Tue Jun 27 16:08:58 2006
Raid Level : raid5
Array Size : 71775104 (68.45 GiB 73.50 GB)
Device Size : 35887552 (34.23 GiB 36.75 GB)
Raid Devices : 3
Total Devices : 5
Preferred Minor : 0
Persistence : Superblock is persistentUpdate Time : Tue Jun 27 16:08:59 2006
State : dirty, no-errors
Active Devices : 2
Working Devices : 4
Failed Devices : 1
Spare Devices : 2Layout : left-symmetric
Chunk Size : 64K
Rebuild Status : 18% complete

Number   Major   Minor   RaidDevice State
0             8        1                0           active sync    /dev/sda1
1             8       17               1           active sync   /dev/sdb1
2             0        0                2           faulty
3             8       49               3          spare           /dev/sdd1
4             8       33               4          spare           /dev/sdc1
UUID : 37230e69:51bcf476:9889f244:18b07644
Events : 0.1

這些資料會比單純 /proc/mdstat 還要詳盡許多,但是缺點是要指定裝置名稱 /dev/md0,我沒有超強的記憶能力所以時間久了可能也會忘記當初所建立的 RAID,只要我們下達下面的指令就可以看到我們所有 RAID 裝置以及一些基本資料.

[root@benjr ~]# mdadm –detail -scan
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=37230e69:51bcf476:9889f244:18b07644
devices=/dev/sda1,/dev/sdb1,/dev/sdd1,/dev/sdc1

當建立完成時裝置中會出現 /dev/md0的名稱可共使用.

[root@benjr ~]# fdisk -l
……..略………
Disk /dev/md0: 73.4 GB, 73497706496 bytes
255 heads, 63 sectors/track, 8935 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/md0 doesn’t contain a valid partion table

基本上這已經是一個可以使用的 RAID了.

[root@benjr ~]# mkfs.ext2 /dev/md0

就可以使用了

Step 5: RAID的配置文件

/etc/mdadm.conf 的文件主要提供我們方便管理 RAID,當然這個步驟不是必要的.不經過編輯配置也可以讓 RAID 動作.首先掃描系統中的全部陣列

[root@benjr ~]# mdadm –detail -scan
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=37230e69:51bcf476:9889f244:18b07644
devices=/dev/sda,/dev/sdb,/dev/sdd,/dev/sdc
[root@benjr ~]# vi /etc/mdadm.conf
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=37230e69:51bcf476:9889f244:18b07644
devices=/dev/sda,/dev/sdb,/dev/sdd,/dev/sdc

其中的資料就如同 mdadm –detail -scan 一樣定義了RAID基本資料.如果你不想手動設定用下面的指令同樣也可以.

[root@benjr ~]# mdadm –detail -scan >> /etc/mdadm.conf

Step 6: 啟動停止RAID陣列

啟動和停止RAID陣列的命令非常簡單.
停止RAID陣列:

[root@benjr ~]# mdadm –manage –stop /dev/md0

啟動RAID陣列:

[root@benjr ~]# mdadm –assemble –run /dev/md0

或者

[root@benjr ~]# mdadm –assemble –scan /dev/md0
mdadm: /dev/md0 has been started with 3 drives and 1 spare.

不過這些都是必須先做一件事才能快速回復 RAID ,那就是有將 RAID 的資料填在 /etc/mdadm.conf 裡面.如果你沒有你必須自己指定如下面所示.

[root@benjr ~]# mdadm –assemble /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

Step 7: RAID的管理

如果發現有硬碟損毀時,可以用下面的方式取代正在運作的 RAID 的硬碟而不須停止 RAID的運作.首先先加入一顆硬碟 /dev/sdd1

[root@benjr ~]# mdadm /dev/md0 –add /dev/sdd1
mdadm:hot added /dev/sdc1

並將有問題的硬碟移除 /dev/sdc1

[root@benjr ~]# mdadm /dev/md0 –fail /dev/sdc1 
mdadm:set /dev/sdc1 faulty in /dev/md0
[root@benjr ~]# mdadm /dev/md0 –remove /dev/sdc1
mdadm:hot removed /dev/sdc1

此時 RAID 就會重新開始 rebuild.

Step 8: spare-group

Step 9: Multipath

除了 RAID 之外 mdadm 還提供了一下功能即是 multipath ,這裡的multipath是指當我的一條 I/O 路徑失效時, Linux 核心的 md 層會將 I/O 需求引導到另一條路徑去.所以即使硬體失效,多路徑儲存(multipath)也能繼續提供服務.
建立方法如下所示:

[root@benjr ~]#mdadm -C /dev/md0 –level=multipath –raid-devices=2 /dev/sda1 /dev/sdb1
Continue creating array? yes
mdadm: array /dev/md0 started.

當建立多路徑(multipath)裝置 /dev/md0 之後,所有存取 /dev/md0 的 I/O 都會導向到 /dev/sda1./dev/sdb1 視目前哪一條路徑在運行中,並且是可用的.我們可以藉由查詢/dev/md0 的細部設定,來確定它的確是多路徑裝置.

[root@benjr ~]#mdadm –detail /dev/md0 
Version : 00.90.00
Creation Time : Tue Mar  2 10:56:37 2006
Raid Level : multipath
Array Size : 3905408 (3.72 GiB 3.100 GB)
Raid Devices : 1
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Tue Mar  2 10:56:37 2004
State : dirty, no-errors
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 3
Number   Major   Minor   RaidDevice State
0       8       49        0      active sync   /dev/sda1
1       8       17        1      spare   /dev/sdb1
UUID : 4b564608:fa01c716:550bd8ff:735d92dc
Events : 0.1

當 /dev/sda1 無法存取時,Linux 核心的 md 層會將 I/O 需求引導到另一條路徑去.所以即使硬體失效,多路徑儲存(multipath)也能繼續提供服務.

其他參考網站
http://www.linuxdevcenter.com/pub/a/linux/2002/12/05/RAID.html?page=1

網友的想法

  1. 自動參照通知: Linux – File | Benjr.tw

發表迴響