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
RAID-0 (Stripping)
RAID-1 (Mirror)
RAID-4(Stripping+Parity)
RAID-5 (Stripping+Parity)
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
One thought on “Linux – Software RAID”