注:本文為 “Linux mdadm RAID” 相關文章合輯。
略作重排,未整理去重。
如有內容異常,請看原文。
Linux 下用 mdadm 創建軟 RAID 以及避坑
喵??ﻌ?? Oct 31, 2023
前言
linux 下組軟 raid 用 mdadm 命令,multiple devices admin,多設備管理。
大坑
先把大坑寫前面。
用來創建 raid 的硬盤,不管是新盤還是舊盤,在 linux 中掛載以后,請先用 wipefs
命令清理硬盤上的分區表信息。
硬盤分區有兩種,mbr 和 gpt,mbr 可以直接裸盤不分區就創建 raid,gpt 必須要有分區才能創建 raid。
如果組 raid 的幾塊硬盤分區表信息不統一,雖然能成功創建 raid,但是系統一重啟就會掉 raid,也就是 raid 消失了。
沒錯,系統一重啟 raid 就沒了。如果你已經在這個 raid 上導入數據,這個坑肯定能驚出你一頭汗。
所以拿到硬盤以后,最好是用 wipefs
直接清空分區表。
也有人說用 fdisk
,但實際 fdisk 只能處理 mbr 分區表,需要用升級版 gdisk
才能處理 gpt 分區表。
假定磁盤是 /dev/sdb
查看分區表
\# wipefs /dev/sdb
刪除分區表所有信息
\# wipefs -a -f /dev/sdb
分區注意事項
創建 raid 之前,要簡單了解一下 mbr 和 gpt 分區,避免后續再踩雷。
mbr:
- 不支持 2TB 以上容量的硬盤
- 可以不分區,以裸盤為單位創建 raid
- 用
fdisk
處理分區
gpt: - 支持 2TB 以上容量的硬盤
- 必須先分區,以分區為單位創建 raid
- 用
gdisk
處理分區
創建磁盤陣列
我沒有那么大容量的硬盤,而且系統也是 legacy bios 引導,所以這里選擇 mbr 裸盤創建陣列。
第一步:查看分區表
先確認前面已經用 wipefs
清空了舊硬盤上的分區表信息。
查看分區表
\# wipefs /dev/sdb
刪除分區表
\# wipefs -a -f /dev/sdb
注意:如果是 gpt 分區,注意要用 gdisk
先分區,/dev/sdb1 和 /dev/sdc1,下面創建 raid 的時候也是用 /dev/sdb1 和 /dev/sdc1。
第二步:創建 raid0
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb/dev/sdc
- /dev/md0 : 指創建的磁盤陣列的名稱,如果有多個 raid,可以按順序往下編,比如 /dev/md1
- level=0 :指 raid0,還有 1、5、10 等等,對應 raid1、raid5、raid10
- raid-devices=2 :指陣列的磁盤數量,2 塊盤就是 2
創建完成后,可以用下面的命令查看 raid 信息。
mdadm --detail /dev/md0
第三步:創建文件系統(格式化)
raid 創建成功以后,需要格式化
\# mkfs.ext4 /dev/md0
注意 ext4 文件格式下,系統會預留 5% 的冗余空間,簡單換算就是 1TB 就會保留 50GB 空間。
第四步:保存 raid 信息
注意不同 linux 版本 mdadm 的配置文件路徑可能不同,debian 是 /etc/mdadm/mdadm.conf
。
\# mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
第五步:掛載 raid
創建掛載點
\# mkdir /mnt/raid0
掛載
\# mount /dev/md0 /mnt/raid0
第六步:開機自動掛載
用 blkid
查看 /dev/md0 的 uuid 編號,然后添加到 /etc/fstab
中即可。
或者用命令自動添加
echo `blkid /dev/md0 | awk '{print $2}' | sed's/\"//g'` /media/raid0 ext4 defaults 0 0 /etc/fstab
如何在 Linux 中清除 / 刪除磁盤或者分區中的所有分區表
要清除分區表,可以使用 wipefs 命令。們需要了解的有關分區、分區類型、分區方案的所有信息。
這里有一個磁盤 /dev/sdb, 在這個磁盤中,創建了兩個主分區:
\# fdisk -l /dev/sdb
Disk /dev/sdb: 17.2 GB, 17179869184 bytes, 33554432 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes/512 bytes
I/O size (minimum/optimal): 512 bytes/512 bytes
Disk label type: dos
Disk identifier: 0x1410600c
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 10487807 3145728 83 Linux
現在想從這個磁盤清除分區表
為此,可以使用以下命令
檢查分區表
\# wipefs /dev/sdb
offset type
---------------------------------------------
0x1fe dos [partition table]
這里有一個 dos 分區表
清除分區表
使用以下命令可以擦除 “dos” 分區表
\# wipefs -a -t dos -f /dev/sdb
/dev/sdb: 2 bytes were erased at offset 0x000001fe (dos): 55 aa
/dev/sdb: calling ioclt to re-read partition table: Success
如果有一個 GPT 分區表然后清除相同的
\# wipefs -a -t gpt -f /dev/sdb
清除所有分區表
\# wipefs -a -f /dev/sdb
們還可以使用偏移值刪除分區表,如上所示
\# wipefs -o 0x1fe /dev/sdb
上述命令返回成功后,使用 fdisk 查看分區表
\# fdisk -l /dev/sdb
Disk /dev/sdb: 17.2 GB, 17179869184 bytes, 33554432 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes/512 bytes
I/O size (minimum/optimal): 512 bytes/512 bytes
可以看到,兩個分區都已被清除 / 刪除。
記一次采坑經歷, mdadm 創建 raid0,重啟后自動消失
家里的一臺 Linux 主機,加了兩塊 1T 硬盤,最近打算組成 raid 用來下 PT,由于沒有陣列卡主板也不支持 raid,于是就用 mdadm 軟 raid,創建過程:
mdadm -Cv /dev/md0 -a yes -n 2 -l 0 /dev/sdb/dev/sdc
mkfs.xfs -f /dev/md0
一切正常,最后把掛載信息寫入 /etc/fstab
結果重啟就問題了,卡在進度條,幾分鐘后自動進入了救援模式(顯示的什么內容忘記了)
經過多次測試,確定是重啟之后,/dev/md0 設備就直接消失了。。。消失了。。。消失了。。。
查了很久的資料,嘗試過修改 /etc/mdadm/mdadm.conf 文件,在里面增加 ARRAY /dev/md0… 的方法,但是并沒有效果
直到看到了這個,這個問題應該是和 GPT 分區表有關:
https://unix.stackexchange.com/questions/156424/centos-7-created-mdadm-array-disappears-after-reboot
于是先嘗試了一個簡單的方法,進 PE 把兩塊硬盤從 GPT 轉成 MBR,然后重新創建 raid,重啟后就沒有消失了,但是這個簡單的方法并不完美,因為 MBR 最大只支持 2TB 的硬盤
最后還是使用 GPT,但是在創建 raid 之前要使用 gdisk 命令在兩塊硬盤上各創建一個分區,/dev/sdb1 和 /dev/sdc1,然后再使用分區創建 raid:
mdadm -Cv /dev/md0 -a yes -n 2 -l 0 /dev/sdb1 /dev/sdc1
mkfs.xfs -f /dev/md0
這次重啟之后 /dev/md0 沒有消失,最后將掛載信息寫入 /etc/fstab,一切正常
給后來者的提示:
這個問題主要原因是用于組陣列的硬盤沒有正確清除原始的信息,導致磁盤被首先認作 GPT 磁盤而非 MDADM 成員。
解決方法也很簡單,就是清除掉 GPT 分區表,即清除掉頭部的數個扇區和尾部的數個扇區,就行了。
也可以先轉換成 MBR (轉換過程中會自動清除 GPT 分區表),然后再清除 MBR 分區表(第一個扇區)即可。
沒有必要先分區再組陣列。
只要知道了問題所在就簡單了,就可以得出很有多種解決方法,選擇適合自己的就好,很少玩物理機,沒想到 UEFI+GPT 會遇到這個問題
mdadm -Cv /dev/md0 -a yes -n 2 -l 0 /dev/sdb/dev/sdc
mkfs.xfs -f /dev/md0
那個,第一次知道還有樓主這種騷操作
按照通常 LINUX 軟 RAID 的規范,首先你要創建分區,然后這個分區的 type 代碼為 FD,就是 LINUX RAID
然后用這兩個 FD 類型的分區去建立軟 RAID
問題不大其實。陣列卡做陣列就相當于全盤做。
裸盤做 raid======== 騷操作?
一個合格的 raid 程序,給裸盤建 raid 時,就必須!!!清除頭尾 n 個扇區,以免被誤認。
然后在裸盤頭尾寫上自己家的數據。
很顯然這個 mdadm 程序不合格,或者 centos 中的 mdadm 版本太老。
linux 中 Raid0 磁盤陣列的搭建
環境:
linux 版本號
linux 內核信息:
\# uname -a
\# uname -n
\# uname -r
步驟 1:先添加兩塊 20G 的硬盤
步驟 2:(1)mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdb/dev/sdc
溫馨提示:如果系統沒有 mdadm 命令,可以 yum 安裝,yum install mdadm -y
注:mdadm 是一個用于創建、管理、監控 RAID 設備的工具,有關 mdadm 命令可以自行百度
(2) 查看是否成功
(3)mdadm -Ds
mdadm -Ds >/etc/mdadm.conf 將輸出的信息導入到 /etc/mdadm.conf 中
(4)查看 raid 0 屬性:mdadm -D /dev/md0
表明 raid 0 已經創建好了
步驟 3:給 /dev/md0 分區:fdisk /dev/md0
步驟 4:格式化文件系統:mkfs -t xfs /dev/md0p1
步驟 5:創建掛載點 mkdir raid0
步驟 5: 把 /dev/md0p1 掛載到 /raid0 中:mount /dev/md0p1 /raid0/
步驟 6:df -h 查看
如圖顯示已經成功掛載
步驟 7:通過 UUID 的方式編輯 /etc/fstab 設置開機自動掛載
posted @ 2018-09-16 00:01 運維 cainiao
via:
-
Linux 下用 mdadm 創建軟 RAID 以及避坑 // 喵??ﻌ?? Oct 31, 2023
https://ruohai.wang/202310/mdadm-create-soft-raid-guide/ -
創建 RAID 陣列(Linux)
https://help.aliyun.com/zh/ecs/use-cases/create-a-raid-array-for-a-linux-instance -
如何在 Linux 中清除 / 刪除磁盤或者分區中的所有分區表
https://www.onitroad.com/jc/linux/faq/how-to-delete-all-the-partition-table-from-a-disk-in-linux.html -
記一次采坑經歷, mdadm 創建 raid0,重啟后自動消失_數據地帶 2021-06-19 02:19:59 idczone
https://www.idczone.net/news/5766.html/ -
linux 中 Raid0 磁盤陣列的搭建
https://www.cnblogs.com/liuhui-xzz/p/9653123.html