类别:Ubantu / 日期:2026-08-26 / 浏览:128 / 评论:0

需求:

已有的Ubuntu 22.04系统上操作。一共4块硬盘,其中一块已安装ubutntu22.04,系统盘是sdc(LVM管理)不动,现成想将剩下的三块硬盘(sda、sdb和sdd)安装成RAID5,并挂载到/data目录。

PixPin_2026-08-26_20-29-08.jpg


下面是详细的操作步骤。

重要提示

操作前请务必确认三块硬盘上的数据已备份且不再需要。 以下操作会清除这三块硬盘上的所有数据。


第一步:确认硬盘信息

首先,找出哪三块硬盘是你要组建RAID的

lsblk

根据SIZE确认你要用的三块硬盘名称(如 /dev/sda/dev/sdb/dev/sdd)。请仔细核对,不要选错。


第二步:安装 mdadm

Ubuntu 22.04 默认已安装 mdadm,如果没有,执行:

sudo apt update
sudo apt install mdadm -y

PixPin_2026-08-26_20-33-36.jpg


第三步:创建 RAID 5 阵列

用以下命令创建RAID 5。请将 /dev/sda /dev/sdb /dev/sdd 替换为你实际的硬盘名称。

sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sda /dev/sdb /dev/sdd
  • /dev/md0:新创建的RAID设备名称。

  • --level=5:RAID级别为5。

  • --raid-devices=3:使用3块硬盘。

PixPin_2026-08-26_20-35-45.jpg


第四步:监控阵列同步

RAID 5创建后会自动开始后台同步(重建奇偶校验数据)。查看进度:

cat /proc/mdstat

输出中可以看到类似 [======>........] recovery = 35.2% 的进度条。同步完成后会显示 [UUU]

PixPin_2026-08-26_20-37-42.jpg

同步完成后再进行下一步操作。


第五步:格式化并挂载

  1. 格式化为 xfs文件系统:

sudo mkfs.xfs /dev/md0
#如果格式化为ext4系统,用以下命令
# sudo mkfs.ext4 /dev/md0

PixPin_2026-08-26_20-41-23.jpg

2.创建挂载点

sudo mkdir -p /data

3.临时挂载

sudo mount /dev/md0 /data

4.验证挂载

df -hT /data

PixPin_2026-08-26_20-44-38.jpg


第六步:配置开机自动挂载

为了重启后RAID能自动识别和挂载,需要两步配置。

  1. 保存RAID配置(系统启动时自动组装阵列):

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u

PixPin_2026-08-26_20-46-35.jpg

2.添加到 fstab 实现自动挂载

先获取 /dev/md0 的UUID:

sudo blkid /dev/md0

输出以下:(a964bf13-0419-4d4f-8b5a-be9b5373ce4a)

PixPin_2026-08-26_20-48-27.jpg

编辑 /etc/fstab

sudo vim /etc/fstab

在文件末尾添加一行(将 <your-uuid> 替换为实际UUID,<文件类型>:ext4或xfs):

#格式如下:
UUID=<your-uuid> /data <文件类型> defaults,nofail 0 0
#本次实际输入:
UUID=a964bf13-0419-4d4f-8b5a-be9b5373ce4a /data xfs defaults,nofail 0 0

PixPin_2026-08-26_20-55-10.jpg

nofail 选项可以防止阵列挂载失败时系统无法启动。

保存退出


第七步:验证重启

重启系统,确保一切正常:

sudo reboot

重启后检查:

# 查看RAID状态
sudo mdadm --detail /dev/md0

# 查看挂载情况
df -h /data

# 查看所有挂载
mount | grep /data

有个奇怪的地方,配置好后,硬盘顺序自动变为dba(系统盘),dbb、dbc和dbd为RAID5盘。但总的来说RAID配置是正确的,只是硬盘被操作系统自动重新命名了。这在多硬盘系统中很常见。

=======检查RAID硬盘情况和日志==========

一、快速状态检查

1. 查看RAID阵列整体状态

cat /proc/mdstat

2. 查看详细阵列信息

sudo mdadm --detail /dev/md0

重点关注:

  • State:应该是 cleanactive

  • Active Devices:应该是全部数量(如3)

  • Failed Devices:应该是0

  • Working Devices:应该是全部数量

二、检查每块硬盘的健康状态

1. 查看每块硬盘的RAID元数据

# 分别查看三块硬盘的RAID成员信息
sudo mdadm --examine /dev/sdb | grep -E "Device|State|UUID|Role"
sudo mdadm --examine /dev/sdc | grep -E "Device|State|UUID|Role"
sudo mdadm --examine /dev/sdd | grep -E "Device|State|UUID|Role"

关键信息解读:

  • Role:应该是 012(对应阵列中的位置)

  • State:应该是 activesync

  • Device:显示硬盘设备名

三、查看RAID相关日志

1. 查看内核消息(实时)

# 实时查看内核消息(RAID事件会记录在这里)
sudo dmesg -T -w | grep -i raid

  • -T:显示可读时间戳

  • -w:实时监控(按Ctrl+C退出)

  • grep -i raid:只显示RAID相关消息

2. 查看系统日志中的RAID事件

# 查看systemd日志中的RAID相关记录
sudo journalctl -u mdadm -n 50

# 查看所有包含"raid"或"md0"的日志
sudo journalctl | grep -E "raid|md0" | tail -50

# 查看今天的RAID相关日志
sudo journalctl --since today | grep -i raid

持续监控脚本

如果想持续监控RAID状态,可以创建一个简单的脚本:

# 创建监控脚本
cat > ~/check_raid.sh << 'EOF'
#!/bin/bash
echo "=== RAID Status ==="
cat /proc/mdstat
echo ""
echo "=== RAID Detail ==="
sudo mdadm --detail /dev/md0 | grep -E "State|Active|Failed|Working|Spare"
echo ""
echo "=== Disk Health ==="
for disk in sdb sdc sdd; do
   echo "/dev/$disk:"
   sudo smartctl -H /dev/$disk | grep "SMART overall-health"
done
EOF

chmod +x ~/check_raid.sh

# 执行
./check_raid.sh


=======制造问题=========


出现错误:手工拔下一块硬盘dbd,之前保存在/data里面的数据已消失

PixPin_2026-08-26_21-29-28.jpg

PixPin_2026-08-26_21-31-31.jpg

原因:

md0 显示为 inactive(非活动状态),这意味着RAID阵列没有正常启动,而且无法挂载。

不过数据还在硬盘上,只是阵列处于非活动状态。我们需要手动重新激活它。

md0 : inactive sdb[0](S) sdc[1](S)
      20953088 blocks super 1.2
  • inactive:阵列处于非活动状态(没有正常组装)

  • (S):表示这两块硬盘被标记为 Spare(备用盘),而不是阵列成员

  • RAID元数据还在,但阵列没有正确激活

立即修复步骤

第一步:停止当前错误的阵列

sudo mdadm --stop /dev/md0

第二步:重新强制组装阵列(只使用两块硬盘)

sudo mdadm --assemble --force --run /dev/md0 /dev/sdb /dev/sdc

参数说明:

  • --force:强制组装(即使认为可能不完整)

  • --run:立即启动阵列(即使降级也启动)

第三步:检查是否成功

cat /proc/mdstat

PixPin_2026-08-26_21-59-08.jpg

第四步:检查文件系统

# 先检查超级块是否正常
sudo mdadm --detail /dev/md0

# 检查文件系统
sudo fsck -n /dev/md0

第五步:尝试挂载

# 先只读挂载测试
sudo mount -o ro /dev/md0 /data

# 如果成功,查看数据
ls -la /data

# 如果数据完整,重新挂载为读写
sudo mount -o remount,rw /dev/md0 /data

PixPin_2026-08-26_22-01-29.jpg



======新加入硬盘,恢复回raid5========


现在找了一块新的10硬盘,接入系统,需要恢复回raid5,数据不变。如下图

PixPin_2026-08-26_22-09-27.jpg

现在情况很清晰:

  • sdbsdc 已经组成了 降级模式 的RAID 5阵列(显示为 md0,已挂载到 /data

  • sdd新插入的空白硬盘,还没有加入阵列

  • 阵列目前工作正常,数据完整

现在需要做的就是把新硬盘 sdd 添加到现有的RAID 5阵列中,让它自动同步恢复。

操作步骤

第一步:确认当前阵列状态


sudo mdadm --detail /dev/md0



State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

这确认了阵列处于降级状态,等待第三块硬盘加入。


第二步:将新硬盘添加到阵列

sudo mdadm --add /dev/md0 /dev/sdd

PixPin_2026-08-26_22-15-15.jpg

第三步:监控同步进度

cat /proc/mdstat

PixPin_2026-08-26_22-17-47.jpg

同步完成

第四步:验证阵列完整状态

sudo mdadm --detail /dev/md0

PixPin_2026-08-26_22-19-32.jpg

第五步:验证数据完整性

# 查看数据是否正常
ls -la /data

# 查看挂载情况
df -h /data

# 查看是否有错误日志
sudo dmesg -T | grep -i raid | tail -2


打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章