Linux RAID設定(使用mdadm命令)教學

2020-07-16 10:04:49
圖形介面確實方便,不過 RAID 和 LVM 一樣,主要的應用還是在命令列當中,因為如果硬碟出現了資料損壞,總不能重新安裝吧!

本節,我們學習在命令列介面中如何分配和使用 RAID,這次我們仍然使用相同大小的分割區設定最為常見的 RAID 5。

建立分割區

建立三個 2GB 大小的分割區,構建 RAID 5。不過我們多建立了一個 2GB 大小的分割區,這個分割區用作備份分割區。

備份分割區的作用是什麼呢? RAID 最大的好處就是具有資料冗餘功能,當有一塊硬碟或分割區損壞時,資料不會丟失,只要插入新的硬碟或分割區,依賴其他分割區就會主動重建損壞的硬碟或分割區中的資料。不過這仍然需要關閉伺服器,手工插拔硬碟。

如果在組成 RAID 的時候就加入了備份硬碟或備份分割區,那麼當硬碟或分割區損壞時,RAID 會自動用備份硬碟或備份分割區代替損壞的硬碟或分割區,然後立即重建資料,而不需要人為手工參與。這樣就避免了伺服器停機和人為手工參與,非常方便,唯一的問題就是需要多餘的硬碟或分割區作為備份裝置。

也就是說,我們在這個實驗中需要 4 個 2GB 大小的分割區,其中 3 個組成 RAID 5,1 個作為備份分割區。建立分割區的過程這裡不再詳細解釋,建立完分割區之後,可以使用 fdisk -l 命令査看。命令如下:

[[email protected] ~]#fdisk -l
...省略部分輸出...
Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xba384969
Device Boot Start End Blocks ld System
/dev/sdb1 1 2610 20964793+ 5 Extended
/dev/sdb5 1 262 2104452 83 Linux
/dev/sdb6 263 524 2104483+ 83 Linux
/dev/sdb7 525 786 2104483+ 83 Linux
/dev/sdb8 787 1048 2104483+ 83 Linux

我們建立了 /dev/sdb5、/dev/sdb6、/dev/sdb7 和 /dev/sdb8 共 4 個 2GB 大小的分割區。

mdadm命令建立 RAID 5

建立 RAID 使用 mdadm 命令,命令格式如下:

[[email protected] ~]# mdadm [模式] [RAID裝置檔名] [選項]

模式:
  • Assemble:加入一個已經存在的陣列;
  • Build:建立一個沒有超級塊的陣列;
  • Create:建立一個陣列,每個裝置都具有超級塊;
  • Manage:管理陣列,如新增裝置和刪除損壞裝置;
  • Misc:允許單獨對陣列中的裝置進行操作,如停止陣列;
  • Follow or Monitor:監控RAID狀態; Grow:改變RAID的容量或陣列中的數目;

選項:
  • -s,-scan:掃描組態檔或/proc/mdstat檔案,發現丟失的資訊;
  • -D,-detail:檢視磁碟陣列詳細資訊;
  • -C,-create:建立新的磁碟陣列,也就是呼叫 Create模式;
  • -a,-auto=yes:採用標準格式建立磁陣列
  • -n,-raicklevices=數位:使用幾塊硬碟或分割區組成RAID
  • -l,-level=級別:建立RAID的級別,可以是0,1,5
  • -x,-spare-devices=數位:使用幾塊硬碟或分割區組成備份裝置
  • -a,-add 裝置檔名:在已經存在的RAID中加入裝置
  • -r,-remove 裝置檔名名:在已經存在的RAID中移除裝置
  • -f,-fail裝置檔名:把某個組成RAID的裝置設定為錯誤狀態
  • -S,-stop:停止RAID裝置
  • -A,-assemble:按照組態檔載入RAID

我們準備建立的是 RAID 5,所以使用以下命令建立:

[[email protected] ~]# mdadm -create -auto=yes /dev/md0-level=5
-raid-devices=3 -spare-devices=1 /dev/sdb5/dev/sdb6 /dev/sdb7 /dev/sdb8

其中,/dev/md0 是第一個 RAID 裝置的裝置檔名,如果還有 RAID 裝置,則可以使用 /dev/md[0~9] 來代表。我們建立了一個 RAID 5,使用了三個分割區,並建立了一個備份分割區。先檢視一下新建立的 /dev/md0,命令如下:

[[email protected] ~]# mdadm --detail /dev/md0
/dev/md0:
#裝置檔名
Version : 1.2
Creation Time : Tue Apr 23 23:13:48 2013
#建立時間
Raid Level : raid5
#RAID 級別
Array Size : 4206592 (4.01 GiB 4.31 GB) +RAID #總容量
Used Dev Size : 2103296 (2.01 GiB 2.15 GB)
#每個分割區的容量
Raid Devices : 3
#組成 RAID 的裝置數
Total Devices : 4
#總裝置數
Persistence : Superblock is persistent
Update Time : Tue Apr 23 23:14:52 2013 State : clean
Active Devices : 3
#啟用的裝置數
Working Devices : 4
#可用的裝置數
Failed Devices : 0
#錯誤的裝置數
Spare Devices : 1
#備份裝置數
Layout : left-symmetric
Chunk Size : 512K
Name : localhost.localdomain:0 (local to host localhost.localdomain) UOID : 15026b78:126a4930:89d8cf54:5bcb7e95 Events : 18
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
4 8 23 2 active sync /dev/sdb7
#三個啟用的分割區
3 8 24 - spare /dev/sdb8
#備份分割區


再檢視一下 /proc/mdstat 檔案,這個檔案中也儲存了 RAID 的相關資訊。命令如下:

[[email protected] ~]# cat /proc/mdstat
Personalities:[raid6] [raid5] [raid4]
md0:active raid5 sdb9[4](S) sdb5[0] sdb8[3] sdb6[1]
#RAID名 級別 組成RAID的分割區,[數位]是此分割區在RAID中的順序
#(S)代表備份分割區
4206592 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
#總block數 等級是5 區塊大小 陣列演算法 [組成裝置數/正常裝置數]
unused devices: <none>

格式化與掛載RAID

RAID 5 已經建立,但是要想正常使用,也需要格式化和掛載。格式化命令如下:

[[email protected] ~]# mkfs -t ext4 /dev/md0

掛載命令如下:

[[email protected] ~]# mkdir /raid
#建立掛載點
[[email protected] ~]# mount /dev/md0 /raid/
#掛載/dev/md0
[[email protected] ~]# mount
…省略部分輸出…
/dev/md0 on /raid type ext4(rw)
#檢視一下,已經正常掛載

生成mdadm組態檔

在 CentOS 6.x 中,mdadm 組態檔並不存在,需要手工建立。我們使用以下命令建立 /etc/mdadm.conf 組態檔:

[[email protected] ~]# echo Device /dev/sdb[5-8] >>/etc/mdadm.conf
#建立/etc/mdadm.conf設定立件,並把組成RAID的分割區的裝置檔名寫入
#注意:如果有多個RAID,則要把所有組成RAID的裝置都放入組態檔中;否則RAID裝置重新啟動後會丟失
#比如組成RAID 10,就既要把分割區的裝置檔名放入此檔案中,也翻組成RAID 0的RAID 1裝置檔名放入
[[email protected] ~]# mdadm -Ds >>/etc/mdadm.conf
#查詢和掃描RAID資訊,並追加進/etc/mdadm.conf檔案
[[email protected] ~]# cat /etc/mdadm.conf
Device /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8
ARRAY /dev/md0 metadata: 1.2 spares=1 name=l(xalhost.localdomain:0 UUID=dd821fe5:8597b126:460a3afd:857c7989
#檢視檔案內容

設定開機後自動掛載

自動掛載也要修改 /etc/fstab 組態檔,命令如下:

[[email protected] ~]# vi /etc/fstab
/dev/mdO /raid
ext4 defaults 12
#加入此行

如果要重新啟動,則一定要在這一步完成之後再進行,否則會報錯。

啟動或停止RAID

RAID 裝置生效後,不用手工啟動或停止。但是,如果需要解除安裝 RAID 裝置,就必須手工停止 RAID。這裡我們學習一下啟動和停止 RAID 的方法。先看看停止命令:

[[email protected] ~]# mdadm -S /dev/md0
#停止/dev/md0裝置

當然,如果要刪除 RAID,則要非常小心,要把所有和 RAID 相關的內容全部刪除,才能保證系統不報錯。需要進行的步驟如下:

[[email protected] ~]# umount /dev/md0
#解除安裝RAID
[[email protected] ~】# vi /etc/fstab
/dev/md0 /raid ext4 defaults 12
#刪除此行
[[email protected] ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
#停止RAID
[[email protected] ~]# vi /etc/mdadm.conf
ARRAY /dev/md0 metadata: 1.2 spares=1 name=localhost.localdomain:0 UUID=dd821fe5:8597b126:460a3afd:857c7989
#刪除或者註釋此行

如果僅僅是停止,而不是刪除,就沒有這麼麻煩了,只需先下載,再停止即可。那停止完成之後,怎麼再啟動呢?啟動 RAID 的命令如下:

[[email protected] ~]# mdadm -As /dev/md0
mdadm: /dev/md0 has been started with 3 drives and 1 spare.
#啟動/dev/md0
[[email protected] ~]# mount /dev/md0 /raid/
#啟動RAID後,記得掛載

模擬分割區出現故障

我們的 RAID 雖然設定完成了,但是它真的生效了嗎?我們模擬磁碟報錯,看看備份分割區是否會自動代替錯誤分割區。mdadm 命令有一個選項 -f,這個選項的作用就是把一塊硬碟或分割區變成錯誤狀態,用來模擬 RAID 報錯。命令如下:

[[email protected] ~]# mdadm /dev/mdO -f /dev/sdb7 mdadm: set /dev/sdb7 faulty in /dev/mdO、
#模擬/dev/sdb7分割區報錯
[[email protected] ~】# mdadm -D /dev/mdO /dev/mdO:
...省略部分輸出...
Active Devices : 2
Working Devices : 3
Failed Devices : 1
#1個裝置報錯了
Spare Devices : 1
...省略部分輸出...
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
3 8 24 2 spare rebuilding /dev/sdb8
#/dev/sdb8分割區正在準備修復
4 8 23 - faulty spare /dev/sdb7
#/dev/sdb7已經報錯了

要想看到上面的效果,査看時要快一點,否則修復就可能完成了。因為有備份分割區的存在,所以分割區損壞了,是不用管理員手工的。如果修復完成,再檢視,就會出現下面的情況:

[[email protected] ~]# mdadm /dev/mdO
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
3 8 24 2 active sync /dev/sdb8
4 8 23 - faulty spare /dev/sdb7

備份分割區/dev/sdb8已經被啟用,但是 /dev/sdb7分割區失效。

移除錯誤分割區

既然分割區已經報錯了,我們就把 /dev/sdb7 分割區從 RAID 中刪除。如果這是硬碟,就可以進行更換硬碟的處理了。

移除命令如下:

[[email protected] ~]# mdadm /dev/md0
-remove/dev/sdb7
mdadm: hot removed /dev/sdb7 from /dev/mdO

新增新的備份分割區

既然分割區已經報錯,那麼我們還需要加入一個新的備份分割區,以備下次硬碟或分割區出現問題。既然要加入新的備份分割區,當然還需要再劃分出一個 2GB 大小的分割區出來,命令如下:

[[email protected] ~]#fdisk -l
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 *512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes 1512 bytes
Disk identifier: 0x151a68a9
Device Boot Start End Blocks Id System
/dev/sdb1 1 2610 20964793+ 5 Extended
/dev/sdb5 1 262 2104452 83 Linux
/dev/sdb6 263 524 2104483+ 83 Linux
/dev/sdb7 525 786 2104483+ 83 Linux
/dev/sdb8 787 1048 2104483+ 83 Linux
/dev/sdb9 1049 1310 2104483+ 83 Linux

我們新建了 /dev/sdb9 分割區,然後把它加入 /dev/md0 作為備份分割區,命令如下:

[[email protected] ~]# mdadm /dev/md0 -add /dev/sdb9
mdadm: added /dev/sdb9
#把/dev/sdb9加入/dev/md0
[[email protected] ~]# mdadm -D /dev/md0
...省略部分輸出...
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
3 8 24 2 active sync /dev/sdb8
4 8 25 - spare /dev/sdb9
#檢視一下,/dev/sdb9已經變成了備份分割區