如何使用linux程序mdadm創建軟體RAID1軟陣列
我們不在根目錄使用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
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive