Linux | mdadm 创建软 RAID

news2025/5/20 16:45:21

注:本文为 “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.coloradmin.cn/o/2380111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CodeEdit:macOS上一款可以让Xcode退休的IDE

CodeEdit 是一款轻量级、原生构建的代码编辑器,完全免费且开源。它使用纯 swift 实现,而且专为 macOS 设计,旨在为开发者提供更高效、更可靠的编程环境,同时释放 Mac 的全部潜力。 Stars 数21,719Forks 数1,081 主要特点 macOS 原…

LLaMA-Factory 微调 Qwen2-7B-Instruct

一、系统环境 使用的 autoDL 算力平台 1、下载基座模型 pip install -U huggingface_hub export HF_ENDPOINThttps://hf-mirror.com # (可选)配置 hf 国内镜像站huggingface-cli download --resume-download shenzhi-wang/Llama3-8B-Chinese-Chat -…

mac本地docker镜像上传指定虚拟机

在Mac本地将Docker镜像上传至指定虚拟机的完整步骤 1. 在Mac本地保存Docker镜像为文件 通过docker save命令将镜像打包为.tar文件,便于传输至虚拟机。 # 示例:保存名为"my_image"的镜像到当前目录 docker save -o my_image.tar my_image:ta…

从代码学习深度学习 - 风格迁移 PyTorch版

文章目录 前言方法 (Methodology)阅读内容和风格图像预处理和后处理抽取图像特征定义损失函数内容损失 (Content Loss)风格损失 (Style Loss)全变分损失 (Total Variation Loss)总损失函数初始化合成图像训练模型总结前言 大家好!欢迎来到我们的深度学习代码学习系列。今天,…

软件设计师考试《综合知识》设计模式之——工厂模式与抽象工厂模式考点分析

软件设计师考试《综合知识》工厂模式与抽象工厂模式考点分析 1. 分值占比与考察趋势(75分制) 年份题量分值占总分比例核心考点2023111.33%抽象工厂模式适用场景2022222.67%工厂方法 vs 抽象工厂区别2021111.33%工厂方法模式结构2020111.33%简单工厂模式…

轻量级离线版二维码工具的技术分析与开发指南

摘要 本文介绍一款基于本地化运行的轻量级二维码处理工具。该工具采用标准QR Code规范实现,具备完整的生成与识别功能。通过实测验证其核心功能表现及适用场景。 主要功能模块分析 编码生成模块:支持文本/URL等多种数据类型转换;提供尺寸调…

机器学习--特征工程具体案例

一、数据集介绍 sklearn库中的玩具数据集,葡萄酒数据集。在前两次发布的内容《机器学习基础中》有介绍。 1.1葡萄酒列标签名: wine.feature_names 结果: [alcohol, malic_acid, ash, alcalinity_of_ash, magnesium, total_phenols, flavanoi…

Unreal 从入门到精通之SceneCaptureComponent2D实现UI层3D物体360°预览

文章目录 前言SceneCaptureComponent2D实现步骤新建渲染目标新建材质UI控件激活3DPreview鼠标拖动旋转模型最后前言 我们在(电商展示/角色预览/装备查看)等应用场景中,经常会看到这种3D展示的页面。 即使用相机捕获一个3D的模型的视图,然后把这个视图显示在一个UI画布上,…

电机控制杂谈(25)——为什么对于一般PMSM系统而言相电流五、七次谐波电流会比较大?

1. 背景 最近都在写论文回复信。有个审稿人问了一个问题——为什么对于一般PMSM系统而言相电流五、七次谐波电流会比较大?同时,为什么相电流五、七次谐波电流会在dq基波旋转坐标系构成六次谐波电流? 回答这个问题挺简单的,但在网…

多模态大语言模型arxiv论文略读(七十八)

AID: Adapting Image2Video Diffusion Models for Instruction-guided Video Prediction ➡️ 论文标题:AID: Adapting Image2Video Diffusion Models for Instruction-guided Video Prediction ➡️ 论文作者:Zhen Xing, Qi Dai, Zejia Weng, Zuxuan W…

【C语言】易错题 经典题型

出错原因&#xff1a;之前运行起来的可执行程序没有关闭 关闭即可 平均数&#xff08;average&#xff09; 输入3个整数&#xff0c;输出它们的平均值&#xff0c;保留3位小数。 #include <stdio.h> int main() {int a, b, c;scanf("%d %d %d", &a, &…

说一说Node.js高性能开发中的I/O操作

众所周知&#xff0c;在软件开发的领域中&#xff0c;输入输出&#xff08;I/O&#xff09;操作是程序与外部世界交互的重要环节&#xff0c;比如从文件读取数据、向网络发送请求等。这段时间&#xff0c;也指导项目中一些项目的开发工作&#xff0c;发现在Node.js运用中&#…

应用层协议简介:以 HTTP 和 MQTT 为例

文章目录 应用层协议简介&#xff1a;什么是应用层协议&#xff1f;为什么需要应用层协议&#xff1f;什么是应用层协议&#xff1f;为什么需要应用层协议&#xff1f; HTTP 协议详解HTTP 协议特点HTTP 工作的基本原理HTTP 请求与响应示例为什么 Web 应用基于 HTTP 请求&#x…

LeetCode 39. 组合总和 LeetCode 40.组合总和II LeetCode 131.分割回文串

LeetCode 39. 组合总和 需要注意的是题目已经明确了数组内的元素不重复&#xff08;重复的话需要执行去重操作&#xff09;&#xff0c;且元素都为正整数&#xff08;如果存在0&#xff0c;则会出现死循环&#xff09;。 思路1&#xff1a;暴力解法 对最后结果进行去重 每一…

如何在 Windows 11 或 10 上安装 Fliqlo 时钟屏保

了解如何在 Windows 11 或 10 上安装 Fliqlo,为您的 PC 或笔记本电脑屏幕添加一个翻转时钟屏保以显示时间。 Fliqlo 是一款适用于 Windows 和 macOS 平台的免费时钟屏保。它也适用于移动设备,但仅限于 iPhone 和 iPad。Fliqlo 的主要功能是在用户不活动时在 PC 或笔记本电脑…

国芯思辰| 轮速传感器AH741对标TLE7471应用于汽车车轮速度感应

在汽车应用中&#xff0c;轮速传感器可用于车轮速度感应&#xff0c;为 ABS、ESC 等安全系统提供精确的轮速信息&#xff0c;帮助这些系统更好地发挥作用&#xff0c;在紧急制动或车辆出现不稳定状态时&#xff0c;及时调整车轮的制动力或动力分配。 国芯思辰两线制差分式轮速…

小程序弹出层/抽屉封装 (抖音小程序)

最近忙于开发抖音小程序&#xff0c;最想吐槽的就是&#xff0c;既没有适配的UI框架&#xff0c;百度上还找不到关于抖音小程序的案列&#xff0c;我真的很裂开啊&#xff0c;于是我通过大模型封装了一套代码 效果如下 介绍 可以看到 这个弹出层是支持关闭和标题显示的&#xf…

电子电路原理第十六章(负反馈)

1927年8月,年轻的工程师哈罗德布莱克(Harold Black)从纽约斯塔顿岛坐渡轮去上班。为了打发时间,他粗略写下了关于一个新想法的几个方程式。后来又经过反复修改, 布莱克提交了这个创意的专利申请。起初这个全新的创意被认为像“永动机”一样愚蠢可笑,专利申请也遭到拒绝。但…

命令拼接符

Linux多命令顺序执行符号需要记住5个 【&#xff5c;】【||】【 ;】 【&】 【&&】 &#xff0c;在命令执行里面&#xff0c;如果服务器疏忽大意没做限制&#xff0c;黑客通过高命令拼接符&#xff0c;可以输入很多非法的操作。 ailx10 网络安全优秀回答者 互联网…

【通用智能体】Lynx :一款基于终端的纯文本网页浏览器

Lynx &#xff1a;一款基于终端的纯文本网页浏览器 一、Lynx简介二、应用场景及案例场景 1&#xff1a;服务器端网页内容快速查看场景 2&#xff1a;网页内容快速提取场景 3&#xff1a;表单提交与自动化交互场景 4&#xff1a;网络诊断与调试场景 5&#xff1a;辅助工具适配 三…