如何使用linux程式mdadm建立軟體RAID1軟陣列

Gabriel Cánepa發表於2015-02-15

磁碟冗餘陣列(RAID)是將多個物理磁碟結合成一個邏輯磁碟的技術,該技術可以提高磁碟容錯效能,提高磁碟的讀寫速度。根據資料儲存的排列(如:條帶儲存,映象儲存,奇偶或者他們的組合),定義了幾個不同級別的RAID(RAID-0,RAID-1,RAID-5 等等)。磁碟陣列可以使用軟體或者硬體方式實現。現代Linux作業系統中,基本的軟體RAID功能是預設安裝的。

本文中,我們將介紹軟體方式構建RAID-1陣列(映象陣列),RAID-1將相同的資料寫到不同的裝置中。雖然可以使用同一個磁碟的兩個分割槽實現RAID-1,但是如果磁碟壞了的話資料就都丟了,所以沒什麼意義。實際上,這也是為什麼大多數RAID級別都使用多個物理磁碟提供冗餘。當單盤失效後不影響整個陣列的執行,並且可以線上更換磁碟,最重要的是資料不會丟失。儘管如此,陣列不能取代外部儲存的定期備份。

由於RAID-1陣列的大小是陣列中最小磁碟的大小,一般來說應該使用兩個大小相同的磁碟來組建RAID-1。

安裝mdadm

我們將使用mdadm(簡稱多盤管理)工具建立、組裝、管理和監控軟體RAID-1。在諸如Fedora、CentOS、RHEL或者Arch Linux 的發行版中,mdadm是預設安裝的。在基於Debian的發行版中,可以使用aptitude 或者 apt-get 安裝mdadm。

Fedora, CentOS 或 RHEL

由於adadm是預裝的,所以我們只需要開啟RAID守護服務,並將其配置成開機啟動即可:

# systemctl start mdmonitor
# systemctl enable mdmonitor 

對於CentOS/RHEL 6系統,使用以下命令:

# service mdmonitor start
# chkconfig mdmonitor on 

Debian, Ubuntu 或 Linux Mint

在Debian或類Debian系統中,mdadm可以使用 aptitude 或者 apt-get 安裝:

# aptitude install mdadm 

Ubuntu系統中,會要求配置Postfix MTA 以傳送電子郵件通知。你可以跳過去。

Debian系統中,安裝程式會顯示以下解釋資訊,用來幫助我們去判斷是否將根目錄安裝到RAID陣列中。下面的所有操作都有賴於這一步,所以應該仔細閱讀他。

我們不在根目錄使用RAID-1,所以留空。

提示是否開機啟動陣列的時候,選擇“是”。注意,這裡需要往/etc/fstab 檔案中新增一個條目使得系統啟動的時候正確掛載陣列。

硬碟分割槽

現在開始準備建立陣列需要的硬碟。這裡插入兩個8GB的usb磁碟,使用dmesg命令裝置顯示裝置 /dev/sdb 和 /dev/sdc

# dmesg | less 

[ 60.014863] sd 3:0:0:0: [sdb] 15826944 512-byte logical blocks: (8.10 GB/7.54 GiB) [ 75.066466] sd 4:0:0:0: [sdc] 15826944 512-byte logical blocks: (8.10 GB/7.54 GiB)

我們使用fdisk為每個磁碟建立一個大小為8G的主分割槽。以下步驟是如何在/dev/sdb上建立分割槽,假設次磁碟從未被分割槽(如果有其他分割槽的話,可以刪掉):

# fdisk /dev/sdb 

按p鍵輸出現在的分割槽表:

(如果有分割槽的話,可以使用 d 選項刪除,w 選項應用更改)。

磁碟上沒有分割槽,所以我們使用命令 ['n'] 建立一個主分割槽['p'], 分配分割槽號為['1'] 並且指定大小。你可以按回車使用預設值,或者輸入一個你想設定的值。如下圖:

用同樣的方法為/dev/sdc 分割槽。

如果我們有兩個不同容量的硬碟,比如 750GB 和 1TB的話,我們需要在每個磁碟上分出一個750GB的主分割槽,大盤剩下的空間可以用作他用,不加入磁碟陣列。

建立 RAID-1 陣列

磁碟分割槽完成後,我們可以使用以下命令建立 RAID-1 陣列:

# mdadm -Cv /dev/md0 -l1 -n2 /dev/sdb1 /dev/sdc1 

說明:

  • -Cv: 建立一個陣列並列印出詳細資訊。
  • /dev/md0: 陣列名稱。
  • -l1 (l as in "level"): 指定陣列型別為 RAID-1 。
  • -n2: 指定我們將兩個分割槽加入到陣列中去,分別為/dev/sdb1 和 /dev/sdc1

以上命令和下面的等價:

 # mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 

如果你想在在磁碟失效時新增另外一個磁碟到陣列中,可以指定 '--spare-devices=1 /dev/sdd1' 到以上命令。

輸入 “y” 繼續建立陣列,回車:

可以使用以下命令檢視進度:

 # cat /proc/mdstat 

另外一個獲取陣列資訊的方法是:

# mdadm --query /dev/md0
# mdadm --detail /dev/md0 (或 mdadm -D /dev/md0) 

'mdadm -D'命令提供的資訊中,最重要就是陣列狀態類。啟用狀態說明陣列正在進行讀寫操作。其他幾個狀態分別為:完成(讀寫完成)、降級(有一塊磁碟失效或丟失)或者恢復中(一張新盤已插入,系統正在寫入資料)。這幾個狀態涵蓋了大多數情況。

格式化或載入磁碟陣列

下一步就是格式化陣列了,本例中使用ext4格式:

 # mkfs.ext4 /dev/md0 

現在可以載入陣列並驗證其正常載入:

# mount /dev/md0 /mnt
# mount 

監控磁碟陣列

mdadm工具內建有磁碟陣列監控功能。當mdadm作為守護程式執行的時候(就像我們上文那樣),會週期性的檢測陣列執行狀態,將檢測到的資訊透過電子郵件或者系統日誌報告上來。當然,也可以配置其在發生致命性錯誤的時候呼叫緊急命令。

mdadm預設會記錄所有已知分割槽和陣列的事件,並將他們記錄到 /var/log/syslog中。或者你可以在配置檔案中(debian系統:/etc/mdadm/mdadm.conf ,紅帽子系統:/etc/mdadm.conf )用以下格式指定監控裝置或者陣列。如果mdadm.conf檔案不存在,你可以建立一個。

DEVICE /dev/sd[bcde]1 /dev/sd[ab]1

ARRAY /dev/md0 devices=/dev/sdb1,/dev/sdc1
ARRAY /dev/md1 devices=/dev/sdd1,/dev/sde1
.....

# optional email address to notify events
MAILADDR your@email.com

編輯完畢mdadm配置檔案後,重啟mdadm服務:

Debian系統,Ubuntu或者Linux Mint:

# service mdadm restart

Fedora, CentOS 或 RHEL 7:

# systemctl restart mdmonitor

CentOS或者RHEL 6:

# service mdmonitor restart 

自動載入陣列

現在我們在/etc/fstab中加入條目使得系統啟動的時候將陣列掛載到/mnt目錄下:

# echo "/dev/md0 /mnt ext4 defaults 0 2" << /etc/fstab 

為了驗證掛載指令碼工作正常,我們首先解除安裝陣列,重啟mdadm,然後重新載入。可以看到/dev/md0已經安裝我們新增到/etc/fstab中的條目載入了:

# umount /mnt
# service mdadm restart (on Debian, Ubuntu or Linux Mint)
or systemctl restart mdmonitor (on Fedora, CentOS/RHEL7)
or service mdmonitor restart (on CentOS/RHEL6)
# mount -a 

現在我們的陣列已經可以訪問了,複製檔案/etc/passwd到/mnt中測試一下:

Debian系統中,需要在/etc/default/mdadm 設定 AUTOSTART 變數為 true 才能使mdadm守護程式在開機時自動載入陣列:

AUTOSTART=true

模擬磁碟丟失故障

我們將使用以下命令解除安裝磁碟來模擬磁碟故障。注意,在實際應用中,磁碟如果已經是故障狀態了,不需要解除安裝。

首先,解除安裝陣列:

# umount /mnt 

現在注意每次執行命令後 'mdadm -D /dev/md0' 的輸出。

# mdadm /dev/md0 --fail /dev/sdb1 # 標記 /dev/sdb1 為失效
# mdadm --remove /dev/md0 /dev/sdb1 # 從陣列中移走 /dev/sdb1 

然後,如果你有個備用盤的話,重新新增一下:

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

資料會被自動新增到備用盤 /dev/sdb1 上:

注意以上所述步驟只適合支援磁碟熱拔插的系統,在不支援熱拔插的系統中,還是得停止陣列並關機後更換備用盤:

# mdadm --stop /dev/md0
# shutdown -h now 

最後將新驅動器重新新增到陣列中:

# mdadm /dev/md0 --add /dev/sdb1
# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 

希望本文對你有所幫助。


via: http://xmodulo.com/2014/09/create-software-raid1-array-mdadm-linux.html

作者:Gabriel Cánepa 譯者:shipsw 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

相關文章