没有磁盘阵列卡,还想做 raid,本文记录 Ubuntu 软 raid 实现过程。
简介
mdadm 是一个用于管理和监控 Linux 系统中软件 RAID 数组的命令行工具。RAID(Redundant Array of Independent Disks)是一种数据存储虚拟化技术,通过将多个物理磁盘驱动器组合成一个逻辑单元来提高数据存储的可靠性、性能或容量。
mdadm 工具可以用于创建、组装、监控和管理 RAID 数组。以下是一些 mdadm 的主要功能:
创建 RAID 数组:mdadm 可以创建不同级别的 RAID 数组,如 RAID 0(条带化)、RAID 1(镜像)、RAID 5(分布式奇偶校验)等。
组装 RAID 数组:在系统启动时,mdadm 可以将已创建的 RAID 数组组装起来,使其可供系统使用。
监控 RAID 数组:mdadm 可以监控 RAID 数组的健康状况,包括检查磁盘是否出现故障、重建失败的磁盘等。
扩展 RAID 数组:mdadm 允许在 RAID 数组中添加或删除磁盘,以调整数组的容量和性能。
管理 Spare 磁盘:mdadm 可以配置 Spare(备用)磁盘,当 RAID 数组中的某个磁盘出现故障时,Spare 磁盘会自动接管其工作。
请注意,使用 mdadm 管理 RAID 数组时,需要谨慎操作,因为错误的命令可能会导致数据丢失。在执行任何操作之前,请确保已备份重要数据。
mdadm
安装
1 sudo apt install mdadm -y
常用命令
1 mdadm [mode ] <raiddevice> [options ] <component-devices>
其中,mode 指定了 mdadm 的操作模式,如创建、组装、监控等;raiddevice 是 RAID 数组的设备文件,通常是 /dev/mdX;options 是可选的参数,用于指定操作的具体细节;component-devices 是组成 RAID 数组的物理磁盘设备。
例如,要创建一个由两个磁盘(/dev/sdc 和 /dev/sdd)组成的 RAID 1 数组,可以使用以下命令:
1 mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdc /dev/sdd
要监控 RAID 数组的健康状况,可以使用以下命令:
raid 流程
这里以 Raid 1 两块磁盘为例
确认硬盘信息
执行以下命令查看磁盘标识符
1 sudo fdisk -l # 或使用 lsblk 查看块设备
1 2 sdg 8 :96 0 931 .5 G 0 disk /media/vvd/stable_disk_Asdh 8 :112 0 931 .5 G 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/m d0 # 使用 ext4 文件系统
1 2 3 4 5 6 7 8 9 10 11 12 13 mke2fs 1 .45 .5 (07 -Jan-2020 ) 丢弃设备块: 完成 创建含有 244157616 个块(每块 4 k)和 61046784 个inode的文件系统 文件系统UUID:4 eb15ef5-4170-4407 -87 cf-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
设置开机自动挂载
编辑 /etc/fstab 文件,添加:
1 /dev/m d0 /mnt/ raid1 ext4 defaults 0 0
立即挂载生效:
查询 md0 设备的UUID,命令如下:
运行结果:
1 /dev/md0: UUID ="1aaeec0c-d918-4e91-802e-f8f2e9645b56" TYPE ="ext4"
上面的结果中的UUID后面的字符串即为我们要获取的内容,然后通过 vim 打开配置文件:
具体配置如下,将下面这行添加到打开的文件末尾即可:
1 UUID =1 aaeec0c-d918-4 e91-802 e-f8f2e9645b56 /mnt/raid0 ext4 defaults 0 0
立即挂载生效:
故障处理与维护
磁盘故障模拟
1 2 3 sudo mdadm /dev/md0 --fail /dev/sdb # 标记磁盘为故障状态 sudo mdadm /dev/md0 --remove /dev/sdb # 移除故障盘 sudo mdadm /dev/md0 --add /dev/sdd # 添加新磁盘(需提前格式化)
监控 RAID 状态
1 watch -n 1 cat /proc/mdstat # 实时监控同步进度
删除软raid
首先,确认你要删除的 RAID 设备未被挂载。如果已经挂载,可以使用以下命令卸载它:
停用 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 设备将会被删除。请注意,在进行任何删除操作之前,请确保备份你的数据,并确保你了解自己所做的更改的后果。
注意事项
数据备份
操作前务必备份原硬盘数据 ,RAID 创建过程会清除磁盘内容
硬件兼容性
确保两块硬盘容量一致,否则 RAID 将按最小容量硬盘计算
性能优化
可通过调整 /proc/sys/dev/raid/speed_limit_min 控制同步速度
参考资料
文章链接:
https://www.zywvvd.com/notes/system/linux/ubuntu-soft-raid/ubuntu-soft-raid/