2010年2月2日

使用 mdadm 建立 Software RAID 1 於Linux 初始安裝

準備兩顆容量一樣的硬碟來建構 RAID 1 環境,以避免硬碟損壞造成的資料遺失。使用 VirtualBox 虛擬軟體來嘗試,搭配的 distribution 是 Fedara 12。
首先在 VirtualBox 建立 Fedora 的虛擬主機,並且掛載兩顆虛擬硬碟。

1.初始安裝硬碟切割
請選擇 "Review and modify partitioning layout" 進入自訂模式

將預設的切割全部清除,讓硬碟的 partition table清空

按下 "RAID" 鈕,選擇 "Create a software RAID partition"

建立 software RAID 磁區於第一顆硬碟 (/dev/sda),首先建立要供掛載 /boot 用的磁區,請記得勾選 "Force to be a primary partition" 選項。

重複上一個動作於第二顆硬碟(dev/sdb)建立同樣大小的 software RAID 磁區,接下來請再按一次 "RAID" 鈕,這次請選擇 "Create a RAID device(default=/dev/md0)"

選擇 /boot 為掛載點,檔案系統為 ext4 ,RAID 的等級是 RAID1,將剛剛建立的 software RAID 磁區 sda1 和 sdb1 都勾選以用來組成 md0 的 RAID 裝置。

接下來要建立的是 swap 的磁區,swap 不需要也不建議使用 RAID partition,以避免讀寫的問題。請直接按 "New" 鈕在兩顆硬碟上各建立 swap 的分割磁區,swap 的大小至少要等於記憶體的大小,建議值是兩倍記憶體的大小。所以在兩顆硬碟上各建立一個等同於記憶體大小的 swap 磁區,加起來剛好是2倍記憶體大小。

最後剩下的空間規劃為掛載 / 的磁區,重複上述建立 /boot 磁區的步驟操作

硬碟的分割到此就完成了:

繼續安裝的步驟完成安裝並重新啟動。

2.查看 RAID 運作狀況
Fedora 的 software RAID 是 mdadm 這個套件,進入系統後,可以用下列命令查看 RAID array 運作的狀況:

# cat  /proc/mdstat
Personalities  :  [raid1]
md1  :  active  raid1  sda3[0]  sdb3[1]
             7132416  blocks  [2/1]  [UU]

md0  :  active  raid1  sda1[0]  sdb1[1]
             204736  blocks  [2/1]  [UU]

unused  devices  : 

其中 [UU] 表示兩個 software RAID 磁區皆運作正常,如果只有一個,就會顯示 [U_] 或 [_U]。

2.安裝 GRUB 於兩顆硬碟
系統安裝時預設把 GRUB 安裝到第一顆硬碟(/dev/sda)的 MBR ,如果遇到了此硬碟毀損的狀況,系統將無法正常開機,必須以光碟開機進入 rescure mode 操作。為了避免此一情形,所以事先將 GRUB 也安裝到第二顆硬碟中:

# grub
grub> device  (hd1)  /dev/sdb
grub> root  (hd1,0)
grub> setup  (hd1)
grub> quit

3.測試單一硬碟開機
接著測試是否兩顆硬碟都可以單獨存在並開機,將機器關機,卸載第一顆硬碟,再將機器啟動,查看 RAID 的狀況,可以發現第一顆硬碟被從 RAID array 裡移除了。

# cat  /proc/mdstat
Personalities  :  [raid1]
md1  :  active  raid1  sdb3[1]
             7132416  blocks  [2/1]  [_U]

md0  :  active  raid1  sdb1[1]
             204736  blocks  [2/1]  [_U]

unused  devices  : 

將機器關機,重新掛載第一顆硬碟,然後卸載第二顆硬碟再將機器啟動,確認是否也可以正常啟動。

結束測試後, 再把系統回復原來的設置。將兩顆硬碟都掛載開機,開機後會發現 RAID 的狀況如下:

# cat  /proc/mdstat
Personalities  :  [raid1]
md1  :  active  raid1  sda3[0]
             7132416  blocks  [2/1]  [U_]

md0  :  active  raid1  sda1[0]
             204736  blocks  [2/1]  [U_]

unused  devices  : 

這是因為剛剛測試時,第二顆硬碟是被取下的,所以被從 RAID array 中移除了。只要運行下列的指令將它再次加入即可:

# mdadm  /dev/md1  --add  /dev/sdb3
# mdadm  /dev/md0  --add  /dev/sdb1

即時查看 RAID 的狀況,可以發現正在進行 recovery 的動作,完成後即可正常運作了

# watch  cat  /proc/mdstat
Every  2.0s:  cat  /proc/mdstat

Personalities  :  [raid1]
md1  :  active  raid1  sda[0]  sdb[1]
             7132416  blocks  [2/1]  [U_]
             [>.......................................]    recovery  =  3.1%  (228288/7132416)  finish=7.0min  speed=16306K/sec

md0  :  active  raid1  sda1[0]  sdb1[1]
             204736  blocks  [2/1]  [U_]
                  resync=DELAYED

unused  devices  : 


4.置換硬碟
假設第一顆硬碟毀損了 (下列 command 皆假設是第一顆毀損) ,在 VirtualBox 中建立一顆大小相同的空白硬碟,將第一顆硬碟替換掉,這時會使用第二顆硬碟來開機,進入系統後,先查看硬碟的掛載情形

# fdisk -l

空白的硬碟應是位於 /dev/sda,正常硬碟為 /dev/sdb,首先將第二顆硬碟的分割表複製到空白的第一顆,使用 --force 參數忽略警告訊息:

# sfdisk  -l   /dev/sdb  |  /dev/sda  --force

完成後以 fdisk -l 指令確認複製成功,接著安裝 GRUB 於新硬碟 :

# grub
grub> device  (hd0)  /dev/sda
grub> root  (hd0,0)
grub> setup  (hd0)
grub> quit


最後只需要把新硬碟的 software RAID 磁區重新加入 RAID array 即可:


# mdadm  /dev/md1  --add  /dev/sdb3
# mdadm  /dev/md0  --add  /dev/sdb1
# watch  cat  /proc/mdstat

recovery 完成後就可以正常使用了。

沒有留言:

張貼留言