本文最后更新于:2025年4月30日 中午

没有磁盘阵列卡,还想做 raid,本文记录 Ubuntu 软 raid 实现过程。

简介

mdadm 是一个用于管理和监控 Linux 系统中软件 RAID 数组的命令行工具。RAID(Redundant Array of Independent Disks)是一种数据存储虚拟化技术,通过将多个物理磁盘驱动器组合成一个逻辑单元来提高数据存储的可靠性、性能或容量。

mdadm 工具可以用于创建、组装、监控和管理 RAID 数组。以下是一些 mdadm 的主要功能:

  1. 创建 RAID 数组:mdadm 可以创建不同级别的 RAID 数组,如 RAID 0(条带化)、RAID 1(镜像)、RAID 5(分布式奇偶校验)等。
  2. 组装 RAID 数组:在系统启动时,mdadm 可以将已创建的 RAID 数组组装起来,使其可供系统使用。
  3. 监控 RAID 数组:mdadm 可以监控 RAID 数组的健康状况,包括检查磁盘是否出现故障、重建失败的磁盘等。
  4. 扩展 RAID 数组:mdadm 允许在 RAID 数组中添加或删除磁盘,以调整数组的容量和性能。
  5. 管理 Spare 磁盘:mdadm 可以配置 Spare(备用)磁盘,当 RAID 数组中的某个磁盘出现故障时,Spare 磁盘会自动接管其工作。

请注意,使用 mdadm 管理 RAID 数组时,需要谨慎操作,因为错误的命令可能会导致数据丢失。在执行任何操作之前,请确保已备份重要数据。

mdadm

安装

1
sudo apt install mdadm -y

常用命令

  • 使用 mdadm 的基本命令格式如下:
1
mdadm [mode] <raiddevice> [options] <component-devices>

其中,mode 指定了 mdadm 的操作模式,如创建、组装、监控等;raiddevice 是 RAID 数组的设备文件,通常是 /dev/mdXoptions 是可选的参数,用于指定操作的具体细节;component-devices 是组成 RAID 数组的物理磁盘设备。

例如,要创建一个由两个磁盘(/dev/sdc 和 /dev/sdd)组成的 RAID 1 数组,可以使用以下命令:

1
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdc /dev/sdd
  • 要监控 RAID 数组的健康状况,可以使用以下命令:
1
mdadm --detail /dev/md0

raid 流程

这里以 Raid 1 两块磁盘为例

确认硬盘信息

执行以下命令查看磁盘标识符

1
sudo fdisk -l  # 或使用 lsblk 查看块设备
1
2
sdg                     8:96   0 931.5G  0 disk /media/vvd/stable_disk_A
sdh 8:112 0 931.5G 0 disk /media/vvd/stable_disk_B

我要搞的就是这两块磁盘

初始化 RAID 设备

将两块硬盘组成 RAID1:

1
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdg /dev/sdh
  • /dev/md0:自定义 RAID 设备名称

  • --level=1:指定 RAID1 模式

    需要确保两块硬盘处于未挂载状态

1
2
3
4
5
6
7
8
9
10
11
12
13
mdadm: /dev/sdg appears to contain an ext2fs file system
size=976762584K mtime=Mon Apr 28 23:07:39 2025
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: /dev/sdh appears to contain an ext2fs file system
size=976762584K mtime=Mon Apr 28 23:09:04 2025
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

验证阵列状态

1
sudo mdadm --detail /dev/md0  # 检查 "State" 是否为 clean
  • 输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/dev/md0:
Version : 1.2
Creation Time : Mon Apr 28 23:29:56 2025
Raid Level : raid1
Array Size : 976630464 (931.39 GiB 1000.07 GB)
Used Dev Size : 976630464 (931.39 GiB 1000.07 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent

Intent Bitmap : Internal

Update Time : Mon Apr 28 23:31:13 2025
State : clean, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Consistency Policy : bitmap

Resync Status : 1% complete

Name : vvd-desktop:0 (local to host vvd-desktop)
UUID : 7b9fc2e7:31d837b7:ac8ecc82:15e17775
Events : 15

Number Major Minor RaidDevice State
0 8 96 0 active sync /dev/sdg
1 8 112 1 active sync /dev/sdh

格式化 RAID 设备

1
sudo mkfs.ext4 /dev/md0  # 使用 ext4 文件系统
  • 输出:
1
2
3
4
5
6
7
8
9
10
11
12
13
mke2fs 1.45.5 (07-Jan-2020)
丢弃设备块: 完成
创建含有 244157616 个块(每块 4k)和 61046784 个inode的文件系统
文件系统UUID:4eb15ef5-4170-4407-87cf-a1727c167410
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848

正在分配组表: 完成
正在写入inode表: 完成
创建日志(262144 个块) 完成
写入超级块和文件系统账户统计信息: 已完成

持久化配置

保存 RAID 配置
1
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
更新 initramfs
1
sudo update-initramfs -u
设置开机自动挂载
  • Plan A
1
sudo mkdir /mnt/raid1

编辑 /etc/fstab 文件,添加:

1
/dev/md0 /mnt/raid1 ext4 defaults 0 0

立即挂载生效:

1
sudo mount -a
  • Plan B

查询 md0 设备的UUID,命令如下:

1
sudo blkid /dev/md0

运行结果:

1
/dev/md0: UUID="1aaeec0c-d918-4e91-802e-f8f2e9645b56" TYPE="ext4"

上面的结果中的UUID后面的字符串即为我们要获取的内容,然后通过 vim 打开配置文件:

1
sudo vim /etc/fstab

具体配置如下,将下面这行添加到打开的文件末尾即可:

1
UUID=1aaeec0c-d918-4e91-802e-f8f2e9645b56 /mnt/raid0 ext4 defaults 0 0

立即挂载生效:

1
sudo mount -a

故障处理与维护

  1. 磁盘故障模拟

    1
    2
    3
    sudo mdadm /dev/md0 --fail /dev/sdb  # 标记磁盘为故障状态
    sudo mdadm /dev/md0 --remove /dev/sdb # 移除故障盘
    sudo mdadm /dev/md0 --add /dev/sdd # 添加新磁盘(需提前格式化)
  2. 监控 RAID 状态

    1
    watch -n 1 cat /proc/mdstat  # 实时监控同步进度

删除软raid

首先,确认你要删除的 RAID 设备未被挂载。如果已经挂载,可以使用以下命令卸载它:

1
sudo umount /dev/md0

停用 RAID 设备。使用以下命令停用 RAID 设备:

1
sudo mdadm --stop /dev/md0

如果你有多个 RAID 设备,需要针对每个设备执行此命令。

从配置文件中删除 RAID 配置。打开 /etc/mdadm/mdadm.conf 文件,并删除包含要删除的 RAID 设备的条目。

从 mdadm.conf 文件中更新 initramfs。使用以下命令更新 initramfs,以确保新的 RAID 配置生效:

1
sudo update-initramfs -u

最后,可以通过以下命令从系统中删除 RAID 元数据:

1
2
sudo mdadm --zero-superblock /dev/sdb
sudo mdadm --zero-superblock /dev/sdc

这里的 /dev/sdb 和 /dev/sdc 是 RAID 设备的磁盘路径。根据你的实际情况,可能有多个磁盘需要执行此命令。

完成上述步骤后,软 RAID 设备将会被删除。请注意,在进行任何删除操作之前,请确保备份你的数据,并确保你了解自己所做的更改的后果。

注意事项

  1. 数据备份
    操作前务必备份原硬盘数据‌,RAID 创建过程会清除磁盘内容
  2. 硬件兼容性
    确保两块硬盘容量一致,否则 RAID 将按最小容量硬盘计算
  3. 性能优化
    可通过调整 /proc/sys/dev/raid/speed_limit_min 控制同步速度

参考资料



文章链接:
https://www.zywvvd.com/notes/system/linux/ubuntu-soft-raid/ubuntu-soft-raid/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

Ubuntu 22.04 使用 mdadm 实现软 raid
https://www.zywvvd.com/notes/system/linux/ubuntu-soft-raid/ubuntu-soft-raid/
作者
Yiwei Zhang
发布于
2025年4月28日
许可协议