一、RAID 簡介
RAID 是英文Redundant Array of Independent Disks 的縮寫,翻譯成中文意思是“獨立磁盤冗余陣列”,有時也簡稱磁盤陣列(Disk Array)。
簡單的說,RAID是一種把多塊獨立的硬盤(物理硬盤)按不同的方式組合起來形成一個硬盤組(邏輯硬盤),從而提供比單個硬盤更高的存儲性能和提供數據備份的技術。
組成磁盤陣列的不同方式稱為RAID級別(RAID Levels),常見的RAID Level 包括raid0, raid1, raid5, raid10。各level 對比如下:
RAID等級 | 最少硬盤 | 最大容錯 | 可用容量 | 讀取性能 | 寫入性能 | 安全性 | 目的 | 應用產業 |
0 | 2 | 0 | n | n | n | 一個硬盤異常,全部硬盤都會異常 | 追求最大容量、速度 | 3D產業實時渲染、視頻剪接高速緩存 |
1 | 2 | n-1 | 1 | n | 1 | 最高,一個正常即可 | 追求最大安全性 | 個人、企業備份 |
5 | 3 | 1 | n-1 | n-1 | n-1 | 高 | 追求最大容量、最小預算 | 個人、企業備份 |
10 | 4 | n/2 | n/2 | n | n/2 | 安全性高 | 綜合RAID 0/1優點,理論速度較快 | 大型數據庫、服務器 |
說明:n 代表硬盤總數
關于RAID的詳細介紹,請參考:http://zh.wikipedia.org/wiki/RAID
二、系統環境
實驗環境:Oracle VM VirtualBox
系統平臺:CentOS release 6.3 (Final)
mdadm 版本:mdadm - v3.2.6 - 25th October 2012
三、設置磁盤
在Oracle VM VirtualBox 里模擬物理增加磁盤,在這篇文章中,我們將創建RAID0, RAID1, RAID5分區,RAID0 需要兩塊硬盤,RAID1 需要兩塊硬盤,RAID5需要四塊硬盤,所以在這里添加了八塊物理硬盤,每塊5.00 GB.
在linux 系統里使用fdisk –l 命令查看。
四、安裝mdadm
mdadm 是multiple devices admin 的簡稱,它是Linux下的一款標準的軟件RAID 管理工具。
4.1 查看是否安裝了mdadm軟件
# rpm -qa|grep mdadm
4.2 如果未安裝,則使用yum 方式安裝。
準備工作完畢,下面可以著手創建raid 了。
五、創建RAID0
5.1 新建分區
創建RAID0 需要兩塊硬盤,所以我們拿/dev/sdb 和/dev/sdc 來實驗。
# fdisk /dev/sdb //對sdb 進行分區
輸入"m", 獲取幫助,輸入"p", 查看分區前磁盤狀態,其他Command action 具體含義請自行Google, Baidu。
輸入"n" 新建分區,這里我們將整個磁盤都劃分成一個分區,然后輸入"p" 查看分區情況。
5.2 修改分區類型
默認新建分區的類型是Linux,代號83,我們需要將其修改為raid 類型。輸入"t" ,然后輸入"L" 列出所有的文件格式,這里我們選擇"fd Linux raid auto", 輸入"fd",然后再輸入"p" 查看分區情況,這是分區格式已經變成了Linux raid autodetect.
5.3 保存分區
輸入"w" 保存分區。
使用同樣方法對/dev/sdc 進行分區操作。
5.4 同步分區情況
使用partPRobe 命令同步分區情況。
5.5 查看現在的狀態
# fdisk -l /dev/sdb /dev/sdc
5.6 開始創建RAID0
# mdadm -C /dev/md0 -ayes -l0 -n2 /dev/sd[b,c]1
說明:
-C --create 創建陣列;
-a --auto 同意創建設備,如不加此參數時必須先使用mknod 命令來創建一個RAID設備,不過推薦使用-a yes參數一次性創建;
-l --level 陣列模式,支持的陣列模式有 linear, raid0, raid1, raid4, raid5, raid6, raid10, multipath, faulty, container;
-n --raid-devices 陣列中活動磁盤的數目,該數目加上備用磁盤的數目應該等于陣列中總的磁盤數目;
/dev/md0 陣列的設備名稱;
/dev/sd{b,c}1 參與創建陣列的磁盤名稱;
5.7 查看raid0 狀態
# cat /proc/mdstat
# mdadm -D /dev/md0
說明:Raid Level : 陣列級別;
Array Size : 陣列容量大小;
Raid Devices : RAID成員的個數;
Total Devices : RAID中下屬成員的總計個數,因為還有冗余硬盤或分區,也就是spare,為了RAID的正常運珩,隨時可以推上去加入RAID的;
State : clean, degraded, recovering 狀態,包括三個狀態,clean 表示正常,degraded 表示有問題,recovering 表示正在恢復或構建;
Active Devices : 被激活的RAID成員個數;
Working Devices : 正常的工作的RAID成員個數;
Failed Devices : 出問題的RAID成員;
Spare Devices : 備用RAID成員個數,當一個RAID的成員出問題時,用其它硬盤或分區來頂替時,RAID要進行構建,在沒構建完成時,這個成員也會被認為是spare設備;
UUID : RAID的UUID值,在系統中是唯一的;
5.8 創建RAID 配置文件/etc/mdadm.conf
RAID 的配置文件為/etc/mdadm.conf,默認是不存在的,需要手工創建。
該配置文件的主要作用是系統啟動的時候能夠自動加載軟RAID,同時也方便日后管理。但不是必須的,推薦對該文件進行配置。
我們這里需要創建這個文件,測試中發現,如果沒有這個文件,則reboot 后,已經創建好的md0 會自動變成md127。
/etc/mdadm.conf 文件內容包括:
由DEVICE 選項指定用于軟RAID的所有設備,和ARRAY 選項所指定陣列的設備名、RAID級別、陣列中活動設備的數目以及設備的UUID號。
5.8.1 創建/etc/mdadm.conf
# echo DEVICE /dev/sd{b,c}1 >> /etc/mdadm.conf
# mdadm –Ds >> /etc/mdadm.conf
5.8.2 修改配置文件
當前生成的/etc/mdadm.conf 文件內容并不符合所規定的格式,所以也是不生效的,這時需要手工修改該文件內容為如下格式:
# cat /etc/mdadm.conf
DEVICE /dev/sdb1 /dev/sdc1
ARRAY /dev/md0 level=raid0 num-devices=2 UUID=5160ea40:cb2b44f1:c650d2ef:0db09fd0
5.9 格式化磁盤陣列
# mkfs.ext4 /dev/md0
5.10 建立掛載點并掛載
# mkdir /raid0
# mount /dev/md0 /raid0/
可以看到,/dev/md0 的可用大小為9.9G。
5.11 寫入/etc/fstab
為了下次開機還能正常使用我們的RAID設備,需要將掛載的信息寫入/etc/fstab 文件中。
然后reboot 測試開機是否自動掛載,raid0 創建完畢。
六、創建RAID1
和創建raid0 類似,我們拿/dev/sdd 和/dev/sde 這兩塊硬盤來做實驗。
6.1 新建分區并修改分區類型
使用同樣方法對/dev/sde 進行分區操作,分區結果如下:
6.2 開始創建RAID1
# mdadm -C /dev/md1 -ayes -l1 -n2 /dev/sd[d,e]1
6.3 查看raid1 狀態
# cat /proc/mdstat
# mdadm -D /dev/md1
說明:Used Dev Size : RAID單位成員容量大小,也就是構成RAID的成員硬盤或分區的容量的大小;
可以看到,raid1 正在創建,待創建完畢,狀態如下:
6.4 添加raid1 到RAID 配置文件/etc/mdadm.conf 并修改
# echo DEVICE /dev/sd{b,c}1 >> /etc/mdadm.conf
# mdadm –Ds >> /etc/mdadm.conf
6.5 格式化磁盤陣列
# mkfs.ext4 /dev/md1
6.6 建立掛載點并掛載
# mkdir /raid1
# mount /dev/md1 /raid1/
可以看到,/dev/md1 的可用大小為4.9G。
6.7 寫入/etc/fstab
然后reboot 測試開機是否自動掛載,raid1 創建完畢。
七、創建RAID5
RAID5 至少需要三塊硬盤,我們拿/dev/sdf, /dev/sdg, /dev/sdh, /dev/sdi 這四塊硬盤來做實驗,三塊做為活動盤,另一塊做為熱備盤。
7.1 新建分區并修改分區類型
分區結果如下:
7.2 開始創建RAID5
# mdadm -C /dev/md5 -ayes -l5 –n3 -x1 /dev/sd[f,g,h,i]1
說明:"-x1" 或"--spare-devices=1" 表示當前陣列中熱備盤只有一塊,若有多塊熱備盤,則將"--spare-devices" 的值設置為相應的數目。
7.3 查看raid5 狀態
# cat /proc/mdstat
# mdadm -D /dev/md5
說明:Rebuild Status : RAID 的構建進度;
4 8 113 2 spare rebuilding /dev/sdh1 注:未被激活,正在構建中的成員,正在傳輸數據;
3 8 129 - spare /dev/sdi1 熱備盤
raid5 正在創建,而且速度很慢,待創建完畢,狀態如下:
7.4 添加raid5 到RAID配置文件/etc/mdadm.conf 并修改
# echo DEVICE /dev/sd{f,g,h,i}1 >> /etc/mdadm.conf
# mdadm –Ds >> /etc/mdadm.conf
7.5 格式化磁盤陣列
# mkfs.ext4 /dev/md5
7.6 建立掛載點并掛載
# mkdir /raid5
# mount /dev/md5 /raid5/
raid5 的可用大小為9.9G,即(3-1)x 5G.
向 /raid5 里面寫入測試數據:
# touch test_raid5.failed # touch test_raid5.fail # ls
7.7 寫入 /etc/fstab
然后reboot 測試開機是否自動掛載,raid5 創建完畢。
八、RAID維護
RAID 做好之后,還需要進行日常的維護操作,比如其中一塊物理硬盤損壞,我們需要進行更換故障磁盤的操作,下面我們將模擬raid5 中磁盤損壞來講解軟RAID 的維護操作。
8.1 模擬磁盤損壞
在實際中,當軟RAID 檢測到某個磁盤有故障時,會自動標記該磁盤為故障磁盤,并停止對故障磁盤的讀寫操作。在這里我們將/dev/sdh1 模擬為出現故障的磁盤,命令如下:
# mdadm /dev/md5 -f /dev/sdh1
8.2 查看重建狀態
在上面創建RAID 5過程中,我們設置了一個熱備盤,所以當有標記為故障磁盤的時候,熱備盤會自動頂替故障磁盤工作,陣列也能夠在短時間內實現重建。通過查看"/proc/mdstat" 文件可以看到當前陣列的狀態,如下:
以上信息表明陣列正在重建,當一個設備出現故障或被標記故障時,相應設備的方括號后將被標以(F),如 "sdh1[4](F)"。
其中 "[3/2]" 的第一位數表示陣列所包含的設備數,第二位數表示活動的設備數,因為目前有一個故障設備,所以第二位數為2;
這時的陣列以降級模式運行,雖然該陣列仍然可用,但是不具有數據冗余;
而 "[UU_]" 表示當前陣列可以正常使用的設備是/dev/sdf1 和/dev/sdg1,如果是設備 “/dev/sdf1” 出現故障時,則將變成[_UU]。
8.3 查看之前寫入的測試數據是否還在
數據正常,未丟失。
8.4 重建完畢后查看陣列狀態
當前的RAID 設備又恢復了正常。
8.5 移除損壞的磁盤
移除剛才模擬出現故障的/dev/sdh1,操作如下:
8.6 再次查看md5的狀態
/dev/sdh1 已經移除了。
8.7 新加熱備磁盤
如果是實際生產中添加新的硬盤,同樣需要對新硬盤進行創建分區的操作,這里我們為了方便,將剛才模擬損壞的硬盤再次新加到raid5 中。
8.8 查看raid5 陣列狀態
/dev/sdh1 已經變成了熱備盤。
8.9 查看測試數據
數據正常,未丟失。故障切換測試完畢。
九、向RAID中增加存儲硬盤
如果現在已經做好的RAID 空間還是不夠用的話,那么我們可以向里面增加新的硬盤,來增加RAID 的空間。
9.1 在虛擬機中添加物理硬盤
上面我們已經在虛擬機中添加了八塊硬盤,這里需要模擬新增硬盤,所以首先將虛擬機關閉,然后在存儲里再次新增一塊5GB的硬盤。然后分區等等操作,這里不再贅述。
9.2 向RAID 中新加一塊硬盤
# mdadm /dev/md5 -a /dev/sdj1
查看此時的RAID 狀態
默認情況下,我們向RAID 中增加的磁盤,會被默認當作熱備盤,我們需要把熱備盤加入到RAID 的活動盤中。
9.3 熱備盤轉換成活動盤
# mdadm -G /dev/md5 -n4
查看此時RAID 狀態
/dev/sdj1 已經變成了活動盤,但是Array Size : 10465280 (9.98 GiB 10.72 GB) 并沒有變大,這是因為構建沒有完成,圖中也可以看出Status 為clean, reshaping。
等RAID 完成構建后,RAID的容量就會改變為(4-1)x 5GB,查看進度可以參考Reshape Status,也可以參考/proc/mdstat.
構建完畢后的RAID 狀態:
Array Size : 15697920 (14.97 GiB 16.07 GB),磁盤容量已經增加了。
9.4 擴容文件系統
RAID 構建完畢后,陣列容量增加,但是文件系統還沒有增加,這時我們還需要對文件系統進行擴容。
# df –TH
# resize2fs /dev/md5
# df –TH
文件系統已經擴容到15G,而且測試數據正常,未丟失,新增物理硬盤成功。
9.5 修改RAID 配置文件/etc/mdadm.conf
9.6 reboot 測試
重啟系統后,一切正常,Linux下配置軟RAID成功。
參考資料
CentOS 6.3下配置LVM(邏輯卷管理)
http://www.CUOXin.com/mchina/p/linux-centos-logical-volume-manager-lvm.html
David Camp
系統運維技術分享Ⅲ:416491168
我們永遠相信,分享是一種美德 |We Believe, Great People Share Knowledge...
新聞熱點
疑難解答