注:本文为 “Linux mdadm RAID” 相关合辑。
略作重排,未整理去重。
如有内容异常,请看原文。
Linux 下用 mdadm 创建软 RAID 以及避坑
喵ฅ・ﻌ・ฅ Oct 31, 2023
前言
在 Linux 环境下,使用 mdadm 命令可以创建软件 RAID(多设备管理,Multiple Devices Admin)。
注意事项
在创建 RAID 之前,必须先清理硬盘上的分区表信息,无论是新硬盘还是旧硬盘。在 Linux 中挂载硬盘后,使用 wipefs 命令清理硬盘上的分区表信息。硬盘分区表有两种类型:MBR 和 GPT。
- MBR 分区表:
- 不支持 2TB 以上容量的硬盘。
- 可以直接以裸盘形式创建 RAID。
- 使用
fdisk命令处理分区。
- GPT 分区表:
- 支持 2TB 以上容量的硬盘。
- 必须先分区,然后以分区为单位创建 RAID。
- 使用
gdisk命令处理分区。
如果用于创建 RAID 的硬盘分区表信息不一致,虽然可以成功创建 RAID,但在系统重启后,RAID 阵列可能会丢失。因此,建议在使用硬盘之前,使用 wipefs 命令清空分区表信息。虽然也可以使用 fdisk 命令,但需要注意 fdisk 只能处理 MBR 分区表,而 gdisk 可以处理 GPT 分区表。
假设磁盘设备为 /dev/sdb,可以通过以下命令查看和清理分区表信息:
# 查看分区表信息
# wipefs /dev/sdb
# 删除分区表信息
# wipefs -a -f /dev/sdb
创建磁盘阵列
以下示例以 MBR 裸盘创建 RAID0 阵列为例。
第一步:查看分区表
确保硬盘的分区表信息已被 wipefs 清空。
# 查看分区表信息
# wipefs /dev/sdb
# 删除分区表信息
# wipefs -a -f /dev/sdb
如果使用 GPT 分区表,请使用 gdisk 命令进行分区,例如 /dev/sdb1 和 /dev/sdc1。在创建 RAID 时,应使用这些分区。
第二步:创建 RAID0
# 创建 RAID0
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc
/dev/md0:创建的磁盘阵列名称。如果有多个 RAID,可以按顺序命名为/dev/md1等。--level=0:指定 RAID 级别为 RAID0。其他级别包括 RAID1、RAID5、RAID10 等。--raid-devices=2:指定 RAID 阵列中的磁盘数量,此处为两块硬盘。
创建完成后,可以使用以下命令查看 RAID 信息:
# 查看 RAID 信息
mdadm --detail /dev/md0
第三步:创建文件系统(格式化)
创建 RAID 后,需要对其进行格式化。以下示例使用 ext4 文件系统:
# 格式化 RAID 设备
# mkfs.ext4 /dev/md0
注意:在 ext4 文件系统中,系统会预留 5% 的空间作为冗余。例如,对于 1TB 的存储空间,将保留约 50GB。
第四步:保存 RAID 信息
不同 Linux 发行版的 mdadm 配置文件路径可能不同。在 Debian 系统中,配置文件路径为 /etc/mdadm/mdadm.conf。可以使用以下命令将 RAID 信息保存到配置文件中:
# 保存 RAID 信息到配置文件
# mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
第五步:挂载 RAID
创建挂载点并挂载 RAID 设备:
创建挂载点
\# mkdir /mnt/raid0
挂载 RAID 设备
\# mount /dev/md0 /mnt/raid0
第六步:开机自动挂载
使用 blkid 命令查看 /dev/md0 的 UUID 编号,并将其添加到 /etc/fstab 文件中,以实现开机自动挂载。也可以使用以下命令自动完成添加:
自动添加到 /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 命令检查分区表类型:
# 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 ioctl 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
从输出结果可以看出,两个分区 /dev/sdb1 和 /dev/sdb2 均已被清除。
记一次采坑经历:mdadm 创建 RAID0,重启后自动消失
在一台 Linux 主机上,添加了两块 1TB 硬盘,计划将其组成 RAID0 用于下载 PT。由于主机未配备硬件 RAID 卡且主板不支持 RAID 功能,因此选择使用 mdadm 创建软件 RAID。创建过程如下:
mdadm -Cv /dev/md0 -a yes -n 2 -l 0 /dev/sdb /dev/sdc
随后,对 RAID 设备进行格式化:
mkfs.xfs -f /dev/md0
完成格式化后,将挂载信息写入 /etc/fstab 文件。
然而,在重启系统后,出现了问题。系统卡在启动进度条上,几分钟后自动进入救援模式(具体显示内容已遗忘)。
经过多次测试,确认问题的根本原因在于重启后 /dev/md0 设备直接消失。尽管查阅了大量资料,并尝试通过修改 /etc/mdadm/mdadm.conf 文件(例如增加 ARRAY /dev/md0 等配置项),但这些方法均未奏效。
最终,通过参考相关讨论,推测问题可能与 GPT 分区表有关。
- linux - CentOS 7 created mdadm array disappears after reboot - Unix & Linux Stack Exchange
https://unix.stackexchange.com/questions/156424/centos-7-created-mdadm-array-disappears-after-reboot
解决方案
方法一:将 GPT 转换为 MBR
最初尝试了一个简单的方法:使用 PE 环境将两块硬盘的分区表从 GPT 转换为 MBR,然后重新创建 RAID。重启后,RAID 设备未再消失。然而,这种方法并不完美,因为 MBR 分区表最大仅支持 2TB 的硬盘。
方法二:使用 GPT 分区表创建 RAID
最终,选择继续使用 GPT 分区表。但在创建 RAID 之前,使用 gdisk 命令在两块硬盘上各创建一个分区(分别为 /dev/sdb1 和 /dev/sdc1),然后使用这些分区创建 RAID:
mdadm -Cv /dev/md0 -a yes -n 2 -l 0 /dev/sdb1 /dev/sdc1
随后,对 RAID 设备进行格式化:
mkfs.xfs -f /dev/md0
重启后,/dev/md0 设备未再消失。最终,将挂载信息写入 /etc/fstab 文件,系统运行正常。
给后来者的提示
该问题的根本原因是用于创建 RAID 的硬盘未正确清除原始分区表信息,导致系统将硬盘首先识别为 GPT 磁盘,而非 MDADM 成员。
解决方法如下:
- 清除 GPT 分区表:清除硬盘头部和尾部的几个扇区,以移除 GPT 分区表信息。
- 转换为 MBR:可以先将硬盘分区表类型从 GPT 转换为 MBR(转换过程中会自动清除 GPT 分区表),然后再清除 MBR 分区表(位于第一个扇区)。
实际上,无需先分区再创建 RAID。只要明确问题所在,即可找到多种解决方案,选择适合自己的即可。
关于规范操作
在 Linux 环境下,通常建议在创建软件 RAID 时,首先对硬盘进行分区,并将分区类型设置为 FD(Linux RAID)。然后使用这些分区来创建 RAID。例如:
# 分区并设置分区类型为 FD
gdisk /dev/sdb
gdisk /dev/sdc
随后,使用这些分区创建 RAID:
mdadm -Cv /dev/md0 -a yes -n 2 -l 0 /dev/sdb1 /dev/sdc1
对于裸盘创建 RAID 的操作,虽然在某些情况下可行,但并非标准做法。一个合格的 RAID 程序在为裸盘创建 RAID 时,应清除硬盘头部和尾部的几个扇区,以避免被误识别。显然,mdadm 在某些情况下可能未能完全满足这一要求,或者某些 Linux 发行版中的 mdadm 版本较旧,导致问题出现。
Linux 中 RAID0 磁盘阵列的搭建
posted @ 2018-09-16 00:01 运维 cainiao
环境
Linux 版本号

Linux 内核信息
# uname -a
# uname -n
# uname -r

搭建步骤
步骤 1:添加两块 20G 的硬盘

步骤 2:创建 RAID0
(1)创建 RAID0
mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc
提示:如果系统未安装 mdadm,可以通过以下命令安装:
yum install mdadm -y
mdadm 是一个用于创建、管理、监控 RAID 设备的工具。有关 mdadm 命令的详细信息,可以参考相关文档或在线资源。
(2)查看 RAID 是否创建成功
mdadm -D /dev/md0

(3)保存 RAID 配置信息
mdadm -Ds > /etc/mdadm.conf

(4)查看 RAID0 属性
mdadm -D /dev/md0

确认 RAID0 已成功创建。
步骤 3:对 /dev/md0 进行分区
fdisk /dev/md0

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

步骤 5:创建挂载点
mkdir /raid0
步骤 6:挂载 RAID 设备
mount /dev/md0p1 /raid0
步骤 7:查看挂载情况
df -h

确认 RAID 设备已成功挂载。
步骤 8:设置开机自动挂载
编辑 /etc/fstab 文件,添加以下内容:
UUID=<UUID> /raid0 xfs defaults 0 0
可以通过以下命令获取 /dev/md0p1 的 UUID:
blkid /dev/md0p1
将输出的 UUID 替换到 /etc/fstab 文件中。


注意事项
- 在进行 RAID 操作时,请确保数据已备份,以免操作失误导致数据丢失。
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
445

被折叠的 条评论
为什么被折叠?



