Linux | mdadm 创建软 RAID

注:本文为 “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 分区表有关。

解决方案

方法一:将 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 成员。

解决方法如下:

  1. 清除 GPT 分区表:清除硬盘头部和尾部的几个扇区,以移除 GPT 分区表信息。
  2. 转换为 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 版本号

Linux 内核信息

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

Linux 内核信息

搭建步骤

步骤 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

查看 RAID 是否创建成功

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

保存 RAID 配置信息

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

查看 RAID0 属性

确认 RAID0 已成功创建。

步骤 3:对 /dev/md0 进行分区

fdisk /dev/md0

对 RAID 设备进行分区

步骤 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 文件中。

编辑 fstab 文件

设置开机自动挂载

注意事项

  • 在进行 RAID 操作时,请确保数据已备份,以免操作失误导致数据丢失。

via:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值