Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

在 Linux 上用 mdadm 建立磁碟陣列 (RAID)

Posted on 2022 年 1 月 11 日2022 年 9 月 19 日 By 日落 在〈在 Linux 上用 mdadm 建立磁碟陣列 (RAID)〉中有 1 則留言

手上已有一台現成的 NAS,不過自己從頭跑一次才會知道細節。

格式化磁碟

其實使用 mdadm 建立磁碟陣列之前,並不一定需要先建立磁碟分割區,也可以直接使用整顆硬碟直接做。二種作法僅有些微差異,詳細內容可以參考 kernal.org 的討論。

假設除了基本硬碟 sda 以外,其他還有 sdb1、sdc1、sdd1、sde1、sdf1、sdg1 共 6 個分割區要格式化為 ext4,一個方法是 mkfs.ext4 一個一個硬碟慢慢來,另一個是寫 script 自動處理。以下範例是除了 sda 以外的所有分割區都格式化為 ext4:

# 沒看懂前不要複製貼上,很危險
for DEV in $(ls sd*1 | grep -v sda); do
    yes y | sudo mkfs.ext4  $DEV
done

建立 RAID

東西準備好以後,就可以換 mdadm 上場了。

建立新的 RAID 用的是參數 --create,指令大致如下:

mdadm --create /dev/md/md0 \
      --level=6 \
      --raid-devices=6 \
      /dev/sd[bcdefg]1
  • /dev/md/md0:磁碟陣列建立以後欲使用的 device name。除了 md0 以外,也可以用 md_home 等較為易懂的方式命名。
  • --level:要使用什麼類型的磁碟陣列。RAID 1 (mirror) 就給 --level=1;RAID 6 就給 --level=6
  • --raid-devices:這個磁碟陣列總用要用幾個 device 來建立。由於建立 RAID 時,不一定一次就要給足硬碟,所以這個參數要給正確。
  • /dev/sdX:要用來建立 RAID 的硬碟、或磁碟分割。把 device ID 當作參數一個一個補齊 (範例是偷懶的寫法)

如果一切正常,就不會顯示錯誤訊息,且可以透過 /proc/mdstat 來檢視 RAID 建立的進度:

....
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/md-main started.

$ cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md127 : active raid6 sdg1[5] sdf1[4] sde1[3] sdd1[2] sdc1[1] sdb1[0]
      121024512 blocks super 1.2 level 6, 512k chunk, algorithm 2 [6/6] [UUUUUU]
      [=>...................]  resync =  5.2% (1573464/30256128) finish=88.5min speed=5397K/sec
      
unused devices: <none>

RAID 建立完成後,會在 /dev 變成一個 device,把 RAID 的資訊寫入 mdadm.conf 設定檔中:

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

在 mount 之前,記得先用 mkfs 格式化。

一切都順利的話,可以在 /dev/disk/by-uuid 看到新的 UUID,接著就可以使用一般的方式去 fstab 設定自動掛載的資料了。

參考資料:A guide to mdadm – Linux Raid Wiki

刪除 RAID

步驟為:停止 RAID => 刪除 RAID。

使用 --stop 來停止、umount RAID md0:

mdadm --stop /dev/md/md0

mdadm 會在硬碟中寫入 metadata 來識別資訊,可以使用 lsblk 看出來:

$ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
NAME          SIZE FSTYPE            TYPE MOUNTPOINT
loop0        60.7M squashfs          loop /snap/lxd/21843
....
sda         238.5G                   disk
├─sda1         60G btrfs             part /var/lib
└─sda2      178.5G btrfs             part
sdb          28.9G linux_raid_member disk
sdc          28.9G linux_raid_member disk
sdd          28.9G linux_raid_member disk
sde          28.9G linux_raid_member disk
sdf          28.9G linux_raid_member disk
sdg          28.9G linux_raid_member disk

接下來使用 --zero-superblock 來把 metadata 清乾淨:

mdadm --zero-superblock /dev/sd[bcdefg]1

最後再用 lsblk 確定一次,只要沒有出現 linux_raid_member 就可以放心將硬體資源挪作他用了。

參考資料:How to Remove mdadm RAID Devices – redhatlinux.guru

Tags:Linux

文章導覽

Previous Post: Linux 中用來接 UPS 的工具
Next Post: SSH 發送指令至遠端主機發生 terminal error

Comment (1) on “在 Linux 上用 mdadm 建立磁碟陣列 (RAID)”

  1. 日落表示:
    2022 年 1 月 11 日23:42

    寫了一個 script 去檢查 RAID 是否有異常,若有異常則透過 Mailgun 發送警告
    https://gist.github.com/johnroyer/94ee13a8e9718cad7c3b7fc8282accaf

    回覆

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.