Linux | mdadm 創建軟 RAID

注:本文為 “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 版本號

img

linux 內核信息

\# uname -a
\# uname -n
\# uname -r

img

步驟 1:先添加兩塊 20G 的硬盤

img

步驟 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) 查看是否成功

img

(3)mdadm -Ds

 mdadm -Ds >/etc/mdadm.conf  將輸出的信息導入到 /etc/mdadm.conf 中

img

(4)查看 raid 0 屬性:mdadm -D /dev/md0

img

表明 raid 0 已經創建好了

步驟 3:給 /dev/md0 分區:fdisk /dev/md0

img

步驟 4:格式化文件系統:mkfs -t xfs /dev/md0p1

img

步驟 5:創建掛載點 mkdir raid0

步驟 5: 把 /dev/md0p1 掛載到 /raid0 中:mount /dev/md0p1 /raid0/

步驟 6:df -h 查看

img

如圖顯示已經成功掛載

步驟 7:通過 UUID 的方式編輯 /etc/fstab 設置開機自動掛載

img

img

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81709.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81709.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81709.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity自定義shader打包SpriteAtlas圖集問題

Unity打包圖集還是有一些坑的,至于圖集SpriteAtlas是什么請參考我之前寫的文章:【Sprite Atlas】Unity新圖集系統SpriteAtlas超詳細使用教程_spriteatlas 使用-CSDN博客 問題: 今天碰到的問題是,shader繪制的時候,因…

如何用 OceanBase 的 LOAD DATA 旁路導入進行大表遷移

前言 在日常工作中,我們時常會遇到需要將某個大數據量的單表進行遷移的情況。在MySQL中,針對這樣的大表,我們通常會選擇先將原表導出為csv格式,然后利用LOAD DATA語法來導入csv文件,這種方法相較于mysqldump在效率上有…

VR 互動實訓的顯著優勢?

(一)沉浸式學習,提升培訓效果? 在 VR 互動實訓中,員工不再是被動的知識接受者,而是主動的參與者。以銷售培訓為例,員工戴上 VR 設備,就能置身于逼真的銷售場景中,與虛擬客戶進行面對…

OpenCV 第6課 圖像處理之幾何變換(重映射)

1. 概述 簡單來說,重映射就是把一副圖像內的像素點按照規則映射到到另外一幅圖像內的對應位置上去,形成一張新的圖像。 因為原圖像與目標圖像的像素坐標不是一一對應的。一般情況下,我們通過重映射來表達每個像素的位置(x,y),像這樣: g(x,y)=f(h(x,y)) 在這里g()是目標圖…

Java虛擬機 - 程序計數器和虛擬機棧

運行時數據結構 Java運行時數據區程序計數器為什么需要程序計數器執行流程虛擬機棧虛擬機棧作用虛擬機棧核心結構運行機制 Java運行時數據區 首先介紹Java運行時數據之前,我們要了解,對于計算機來說,內存是非常重要的資源,因為內…

MySQL數據庫——支持遠程IP訪問的設置方法總結

【系列專欄】:博主結合工作實踐輸出的,解決實際問題的專欄,朋友們看過來! 《項目案例分享》 《極客DIY開源分享》 《嵌入式通用開發實戰》 《C語言開發基礎總結》 《從0到1學習嵌入式Linux開發》 《QT開發實戰》 《Android開發實…

CSS- 4.6 radiu、shadow、animation動畫

本系列可作為前端學習系列的筆記,代碼的運行環境是在HBuilder中,小編會將代碼復制下來,大家復制下來就可以練習了,方便大家學習。 HTML系列文章 已經收錄在前端專欄,有需要的寶寶們可以點擊前端專欄查看! 點…

排序算法之基礎排序:冒泡,選擇,插入排序詳解

排序算法之基礎排序:冒泡、選擇、插入排序詳解 前言一、冒泡排序(Bubble Sort)1.1 算法原理1.2 代碼實現(Python)1.3 性能分析 二、選擇排序(Selection Sort)2.1 算法原理2.2 代碼實現&#xff…

第十節第一部分:常見的API:Math、System、Runtime

Math類介紹及常用方法(了解知道即可) System類介紹及常用方法(了解知道即可) Runtime類介紹及常用方法(了解知道即可) 代碼: 代碼一:Math類 package com.itheima.d14_math;public …

智能體間協作的“巴別塔困境“如何破解?解讀Agent通信4大協議:MCP/ACP/A2A/ANP

AI 智能體的興起觸發了AI應用協作的新領域。這些智能體不再局限于被動的聊天機器人或獨立的系統,它們現在被設計用于推理、計劃和協作ーー跨任務、跨域甚至跨組織。但隨著這一愿景成為現實,一個挑戰很快浮出水面: 智能體如何以一種安全、可伸…

項目進度延誤,如何按時交付?

項目進度延誤可以通過加強計劃管理、優化資源分配、強化團隊溝通、設置關鍵里程碑和風險管理機制等方式來實現按時交付。加強計劃管理、優化資源分配、強化團隊溝通、設置關鍵里程碑、風險管理機制。其中,加強計劃管理尤為關鍵,因為明確而詳細的計劃能提…

詳解ip地址、子網掩碼、網關、廣播地址

1. IP 地址 定義:IP 地址是網絡設備在網絡中的唯一標識,用于標識設備的網絡位置,類似于現實中的門牌號。它分為 IPv4(如 192.168.1.5)和 IPv6(如 240e:305:3685:8100:a00:27ff:fefb:56b8)。 示…

為 Windows 和 Ubuntu 中設定代理服務器的詳細方法

有時下載大模型總是下載不出來,要配置代理才行 一、Windows代理設置 ① 系統全局代理設置 打開【設置】→【網絡和Internet】→【代理】。 在【手動設置代理】下,打開開關,輸入: 地址:10.10.10.215 端口:…

鴻蒙OSUniApp 實現的表單驗證與提交功能#三方框架 #Uniapp

UniApp 實現的表單驗證與提交功能 前言 在移動端應用開發中,表單是用戶與應用交互的重要媒介。一個好的表單不僅布局合理、使用方便,還應該具備完善的驗證與提交功能,以確保用戶輸入的數據準確無誤。本文將分享如何在 UniApp 中實現表單驗證…

前端的面試筆記——HTMLJavaScript篇(二)前端頁面性能檢測

前端頁面性能檢測和判定是優化用戶體驗的核心環節,需要結合實驗室數據(Lab Data)、現場數據(Field Data)和行業標準綜合評估。以下是主流方法、工具及判定標準的詳細解析: 一、性能檢測的核心維度與指標 …

再來1章linux系列-19 防火墻 iptables 雙網卡主機的內核 firewall-cmd firewalld的高級規則

學習目標: 實驗實驗需求實驗配置內容和分析 (每一個設備的每一步操作)實驗結果驗證其他 學習內容: 實驗實驗需求實驗配置內容和分析 (每一個設備的每一步操作)實驗結果驗證其他 1.實驗 2.實驗需求 圖…

LLM-Based Agent綜述及其框架學習(五)

文章目錄 摘要Abstract1. 引言2. 文本輸出3. 工具的使用3.1 理解工具3.2 學會使用工具3.3 制作自給自足的工具3.4 工具可以擴展LLM-Based Agent的行動空間3.5 總結 4. 具身動作5. 學習智能體框架5.1 CrewAI學習進度5.2 LangGraph學習進度5.3 MCP學習進度 參考總結 摘要 本文圍繞…

游戲引擎學習第298天:改進排序鍵 - 第1部分

關于向玩家展示多個房間層所需的兩種 Z 值 我們在前一天基本完成了為渲染系統引入分層 Z 值的工作,但還沒有完全完成所有細節。我們開始引入圖形渲染中的分層概念,即在 Z 軸方向上擁有多個獨立圖層,每個圖層內部再使用一個單獨的 Z 值來實現…

一些C++入門基礎

關鍵字 圖引自 C 關鍵詞 - cppreference.com 命名空間 命名空間解決了C沒辦法解決的各類命名沖突問題 C的標準命名空間:std 命名空間中可以定義變量、函數、類型: namespace CS {//變量char cs408[] "DS,OS,JW,JZ";int cs 408;//函數vo…

學習筆記:黑馬程序員JavaWeb開發教程(2025.4.6)

12.4 登錄校驗-JWT令牌-介紹 JWT(JSON Web Token) 簡潔是指JWT是一個簡單字符串,自包含指的是JWT令牌,看似是一個隨機字符串,但是可以根據需要,自定義存儲內容 Header是JSON數據格式,原始JSO…