磁碟管理:SoftRAID 與 LVM 綜合實做應用(上)

作者:徐秉義(Albert Hsu)

Linux 繼承大型主機系統優點之一即是強大的「磁碟管理」能力,而針對磁碟管理功能的細項來說,Linux 不僅有著相當優秀的檔案系統(常見的有 ext3 與 ReiserFS 檔案系統),並搭配多樣化、Enterprise 級的磁碟工具與管理能力,像是「軟體模擬磁碟陣列」(SoftRAID)與「邏輯磁碟管理」(LVM,Logical Volume Manager)等等。

只要是曾經從事 MIS 的工作人員或是 IT 產業相關的讀者朋友們對於 SoftRAID 想必不陌生,LVM 應該也都聽說過(或許有使用過),較可惜的是沒有更深入的去了解使用 SoftRAID 與 LVM 這兩者的好處分別在那裡?還有就是 SoftRAID 與 LVM 可否綜合應用的問題,所以本文的特色之一就是介紹 SoftRAID+LVM 的結合應用。

因為筆者手邊恰巧有著一台多磁碟的主機(共十顆),所以就成為本文撰寫的起源,倘若讀者手邊並沒有「多磁碟的主機」來測試本文中的指令也沒關係,稍待會在本文的中後段說明怎樣使用「虛擬」方式來產生練習用的磁碟,虛擬出來的磁碟雖然不是真正的磁碟,但至少還是可以打指令來實驗一下並過一過乾癮囉!

溫馨提示:因本文篇幅較長而分成上、下兩篇,大致上重點來說是將本文「上篇」以實戰 SoftRAID 為主;至於本文「下篇」則以 LVM 為主軸來介紹(搭配 SoftRAID 裝置)。

測試環境介紹

這台測試用的主機,同時擁有 RAID 介面卡(IBM ServeRAID)與 SCSI 介面卡(LSI Logic / Symbios Logic 53c875),其中 RAID 介面卡上有著三顆硬碟已經做好硬體式的 RAID 5 拿來當作系統磁碟,而 SCSI 介面卡上有著七顆硬碟(當作資料磁碟),主要就是用來測 SoftRAID 以及之後的 LVM,預計兩顆拿來測 RAID 0、兩顆拿來測 RAID 1、剩下的三顆拿來測 RAID 5。

因為這台主機 BIOS 磁碟順序將 SCSI 卡排在 RAID 卡前面,所以 /dev/sda~/dev/sdg 這七顆是資料磁碟(接在 SCSI 卡上)而 /dev/sdh 這一顆(接在 RAID 卡三顆做 RAID 5)的預計裝成系統磁碟。

 

 RAID 介面卡SCSI 介面卡
硬體RAID/軟體RAID使用
Hardware RAID
預計用來測試
Software RAID
磁碟數量(共十顆)連接三顆連接七顆
RAID 層級RAID 5 已設定好用來測試
兩顆做 RAID 0
兩顆做 RAID 1
三顆做 RAID 5
磁碟主要用途系統磁碟資料磁碟

至於這次所選用的 Linux Distribution,則是使用 RedHat Enterprise Linux ES 4 Update 4(簡稱 RHEL4),可測試「ext2online」指令來『線上增大 ext3 磁區』(搭配 LVM 來應用更佳);若要使用 SuSE Linux Enterprise Server 10(SLES10)來測試類似功能也可以,SLES 10 預設使用 ReiserFS 檔案系統,所以測試『線上增大 ReiserFS 磁區』則是使用「resize_reiserfs」指令(一樣也是可以搭配 LVM 來應用)。

 

Distribution主推的檔案系統Resize 磁區所使用的指令
RHEL4ext3/ext2ext2online(在線 Resizing 增大)
resize2fs(下線 Resizing 縮小)
SLES10ReiserFSresize_reiserfs(在線 Resizing 增大)
resize_reiserfs(下線 Resizing 縮小)

溫馨提示:若欲取得 RHEL4 與 SLES10 相關軟體,兩者都需連至官方網站(RHEL 至 http://www.redhat.com/;SLES 至 http://www.novell.com/)註冊帳號並登入後,才可以下載相關軟體測試(RedHat 還需要取得 subscription)。

SoftRAID 實做

我們就從 RHEL4 安裝好後的環境開始說起,若是單顆硬碟(以下稱為系統磁碟)標準安裝的話,RHEL4 預設會切成「/boot」+「/」+「Swap」,如同下圖「fdisk -l /dev/sdh」、「df -h」所顯示的情形;此外 RHEL4 預設會用到 LVM 來管理磁碟,使用指令「pvscan」、「vgscan」與「lvscan」得到基礎訊息;至於 Swap 用到那個磁區,使用指令「grep swap /etc/fstab」查詢即可。

系統基本資訊圖檔

一般磁碟代號通常為 /dev/hda(IDE/ATA 介面)或 /dev/sda(SATA 或 SCSI 介面),上例將 RHEL 裝在 /dev/sdh 磁碟上,這 sdh 是 HardRAID 做 RAID 5 所生成的磁碟(三顆 18 GB 做 RAID 5 成為可用的 36 GB),事實上還有 sda、sdb、sdc … 到 sdg 這七顆尚未用到的硬碟(接在 SCSI 卡上);使用「lspci」指令可觀察介面卡資訊,第三行是 RAID 卡、最後兩行是 SCSI 卡的資訊。

lspci 介面卡圖檔

溫馨提示:筆者規劃的是將『系統』安裝在 HardRAID 上,將『資料』放在 SoftRAID 磁碟上。

磁碟切割以及更改 Partition ID

之前曾提到過,我們做 SoftRAID 的規劃如下:兩顆做 RAID 0、兩顆做 RAID 1 以及三顆做 RAID 5(共七顆),建議需先做磁碟切割的動作並且將 Partition ID 設定成 fd(Linux raid autodetect)以利後續作業,以下是切割 /dev/sda 成 /dev/sda1 單一個 Partition 並將 Partition ID 設定成 fd 的運作情形(使用指令 fdisk /dev/sda)。

fdisk 圖檔

上圖只是切割好,下圖續接到改 Partition ID 的部份,請記得最後使用「w」來存檔。

fdisk-fd 圖檔

使用 mdadm 設定 SoftRAID(實體硬碟)

當我們將七顆磁碟統統切割好、也改好 Partition ID 成 fd 後,接下來就是使用 mdadm 指令來設定 SoftRAID 了,按照我們的規劃如下表:

 

使用實體磁碟操作RAID LEVELRAID 裝置名稱
/dev/sda1
/dev/sdb1
RAID LEVEL 0/dev/md0
/dev/sdc1
/dev/sdd1
RAID LEVEL 1/dev/md1
/dev/sde1
/dev/sdf1
/dev/sdg1
RAID LEVEL 5/dev/md2

分別使用以下的指令,來建立 /dev/md0、/dev/md1 與 /dev/md2 這三個 SoftRAID 磁碟,RAID LEVEL 分別為 0、1 與 5

「mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sd[ab]1」

「mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sd[cd]1」

「mdadm --create /dev/md2 --level=5 --raid-devices=3 /dev/sd[efg]1」

溫馨提示:--raid-devices 參數是用來指明 RAID 成員磁碟數量,後端的 [] 則是應用 Shell 檔名擴展(Filename Expansion)功能,例如 /dev/sd[ab]1 會擴展成 /dev/sda1 /dev/sdb1

mdadm 圖檔

使用「cat /proc/mdstat」指令可以觀察 SoftRAID 運作情況,會發現做 RAID 1 與 RAID 5 的 /dev/md1 與 /dev/md2 正在 resync 與 recovery;md1 段落中的 [2/2] [UU]代表兩顆健康正常運作,至於 md2 段落中的 [3/2] [UU_] 代表三顆中兩顆正常使用中,有一顆正在 recovery。

/proc/mdstat 圖檔

使用下圖的 fdisk 指令可看出 SoftRAID 磁碟的大小,以每一顆成員磁碟(/dev/sda1~/dev/sdg1)皆為 36 GB 來說,磁碟空間應該會符合 RAID 0、1 及 5 的標準規格。

disksize 圖檔

溫馨提示:本文預設讀者對於 RAID LEVEL 0、1、5 有基礎的認識,若有不甚了解的地方請參考 NetAdmin 第七期之「ATA+Linux+Ethernet,打造 AoE SAN 實戰策略」一文,在此文後段關於『RAID』介紹。

將 SoftRAID 磁碟做格式化與掛載、卸載及掛載點相關的技術應用,相信讀者不陌生,在此僅提供以下快照作為參考

圖為將 /dev/md0 格式化成 ext3 檔案格式後,接著將 /dev/md0 掛載在 /mnt/md0 掛載點的情況

md0 圖檔

使用 loop 裝置當做磁碟用來練習磁碟管理

使用 losetup 建立虛擬磁碟(用來營造練習環境)

以下兩段是寫給沒有那七顆實體硬碟的讀者朋友,一個替代的練習方案。

使用「dd if=/dev/zero of=vda count=1 seek=1048576」建立一個名為 vda的檔案(大小可經由改變 seek 的數量 1048576 來決定)

使用「losetup /dev/loop0 vda」將 vda 與 loop0 連接起來

使用「losetup /dev/loop0」顯示 loop0 連接的檔案

使用「losetup -d /dev/loop0」可將 loop0 解除連接

當 /dev/loop0 連接上 vda 後,可將 /dev/loop0 當成磁區(像是 /dev/sda1)來使用,功能上與實際的磁區還是有許多差異,勉強拿來練習還可以。

losetup 圖檔

溫馨提示:loop 檔案預設有八個(loop0~loop7),要增加也可以,需改 kernel source 關於 max_loop 設定。

使用 mdadm 設定 SoftRAID
(寫給使用 loop device 練習用的讀者)

至於使用 loop device 來練習的讀者,也請備便好 vda~vdg,以及與 /dev/loop0~/dev/loop6 的串連後,使用以下指令做類似的動作(主要是 RAID 成員磁碟裝置的代號不同)

 

使用 loop device 模擬RAID LEVELRAID 裝置名稱
/dev/loop0
/dev/loop1
RAID LEVEL 0/dev/md0
/dev/loop2
/dev/loop3
RAID LEVEL 1/dev/md1
/dev/loop4
/dev/loop5
/dev/loop6
RAID LEVEL 5/dev/md2

備便好 loop0~loop6 的情況,每個 disk 大約 512 MB 左右

mdadm loop device ready 圖檔

mdadm 指令下達的方式很類似,主要是後面 RAID 成員磁碟裝置的部份改成 loop device

mdadm loop 圖檔

SoftRAID 運作情況同樣也是觀察 /proc/mdstat 的檔案內容

/proc/mdstatlo 圖檔

使用類似先前的 fdisk 指令,同樣可看出 SoftRAID 磁碟的大小,以每一顆成員磁碟(/dev/loop0~/dev/loop6)皆為 512 MB 來說,磁碟空間同樣會符合 RAID 0、1 及 5 的標準規格。

disksizelo 圖檔

SoftRAID 常見問題

關於 SoftRAID 的實戰流程大致上已經介紹完畢,至於使用 LVM 的部份就留給「下篇」來介紹,在「上篇」的最後針對一些關於 SoftRAID 常見的一些問題,整理如下:

舊版 raidtools VS 新版 mdadm

如果您過去曾經使用過 Linux SoftRAID 應該對於 /etc/raidtab 這個設定檔案不陌生,可是在我們設定期間並未提到,原因是新版本 mdadm 程式不使用 /etc/raidtab 當作 SoftRAID 的設定檔,取而代之的是使用 /etc/mdadm.conf 來當作設定檔。

至於我們設定期間並未提到 /etc/mdadm.conf 設定檔,主要是新版本的 SoftRAID 會將部份的資料寫到 RAID 的 Partition 去,所以即使重新開機,還是可以抓到先前 RAID 磁碟設定的資料,這也就是為什麼最好要將磁區的 Partition ID 設定成 fd(Linux raid autodetect)的主因(可使用指令 mdadm --query /dev/sda1 來查詢 /dev/sda1 關於 RAID 的設定資訊),至於如何設定 /etc/mdadm.conf 的方式,請使用指令「man mdadm.conf」參考設定檔說明文件以及指令「man mdadm」關於 EXAMPLES 那一段(請參考下圖的快照)。

mdadm 範本圖檔

SoftRAID 的停用與啟用

SoftRAID 既然可以啟用也就代表著可以停用,例如使用指令「mdadm --manage --stop /dev/md0」可用來停止 SoftRAID /dev/md0 的運作,也可以使用指令「mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1」將 /dev/md0 組合回來,藉由觀察 /proc/mdstat 的資料,就能夠知道 RAID 有無啟用以及運作情況。

mdadm 起停圖檔

SoftRAID 的故障與復原

在筆者使用期間,恰巧遇到 /dev/sdc1 壞掉,導致 /dev/md1(/dev/md1 做 RAID 1 其成員磁碟 /dev/sdc1 與 /dev/sdd1)只有 /dev/sdd1 在運作,藉由這個機會來實做 SoftRAID 的故障與還原。在換上另一顆硬碟並且切割好磁碟與設定好 Partition ID 成 fd(Linux raid autodetect)後,使用「mdadm --manage --add /dev/md1 /dev/sdc1」來做 recovery 的動作。

若是讀者想要模擬練習的話,可參考以下這幾個指令玩玩看(模擬 /dev/md2 內成員硬碟之一 /dev/sdf1 故障與復原)。

設定 /dev/sdf1 成故障磁碟的指令「mdadm --manage --fail /dev/md2 /dev/sdf1」

觀看 /proc/mdstat 檔案內容來了解 RAID 情況,其中 sdf1[3] 後面 F 代表故障,md2 的最後一行 [3/2]與[U_U]表示出有一顆磁碟壞掉了。

將 /dev/sdf1 設定成故障後,將之移出 /dev/md2 陣列的指令「mdadm --manage --remove /dev/md2 /dev/sdf1」

溫馨提示:在實際的情況下,通常磁碟故障後,不一定來得及移除,若磁碟直接無法存取了,SoftRAID 會自行將她設定成故障,等到更換磁碟後,在把她新增回去 RAID 即可。

使用指令「mdadm --manage --add /dev/md2 /dev/sdf1」將磁碟 /dev/sdf1 加回去 /dev/md2 磁碟陣列中

hotadd 圖檔

本文上篇之結語

在本文實戰介紹 SoftRAID 使用方式,甚至使用虛擬裝置來練習操作,應該會覺得 Linux 相當地神奇吧!其實更神奇地還在本文「下篇」LVM 基礎操作、LVM Snapshot 與 LVM Online Resizing 的部份。讀者只要靜下心來仔細想想其他平台(Windows Server、Mac Server 或其他 Unix Server)能否達成 Linux 在這個領域同樣的功能(或是能夠辦到卻需要負擔較高額的軟硬體費用)就會了解到 Linux 在磁碟管理與儲存設備這一塊領域的強大功能與其領先優勢。

Linux 還有一個相當可愛的好處,就是對於想要實做這部份技術的人員,只要挪出您寶貴的時間、花費心思心力去練習並實際操作,不見得須要購買高貴的硬體設備,也不見得須要先行購買磁碟管理軟體與作業系統軟體授權(甚或非法地私底下破解序號),就能夠以相當低廉的軟硬體建置費用,學習 Enterprise 等級的電腦技術與知識,可說是「便宜又大碗」。若談到後續商用的部份,不論您是要以 IT 人員的角度去幫公司企業節省經費,或是直接從事關於專業的 Linux/Unix 儲存技術行業,先前的 Linux 學習都能夠幫助您打下紮實的電腦能力。

 

Valid XHTML 1.0! Valid CSS! Get Firefox

Creative Commons License
This site is licensed under a Creative Commons Attribution 2.5 Taiwan License.