惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
S
SegmentFault 最新的问题
D
DataBreaches.Net
博客园_首页
罗磊的独立博客
B
Blog
T
Threat Research - Cisco Blogs
C
Cisco Blogs
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
G
GRAHAM CLULEY
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
SecWiki News
SecWiki News
T
Threatpost
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Schneier on Security
Schneier on Security
T
The Exploit Database - CXSecurity.com
Google Online Security Blog
Google Online Security Blog
T
Tor Project blog
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
H
Hacker News: Front Page
V
V2EX
Security Latest
Security Latest
Cloudbric
Cloudbric
Simon Willison's Weblog
Simon Willison's Weblog
Attack and Defense Labs
Attack and Defense Labs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
博客园 - 三生石上(FineUI控件)
NISL@THU
NISL@THU
S
Secure Thoughts
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
P
Palo Alto Networks Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
Google DeepMind News
Google DeepMind News
Webroot Blog
Webroot Blog

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录 2025 Python 版本性能测试 Flutter Hello World Flutter 安装环境配置 Ubuntu VMware 硬盘扩容后 SMBus Host controller not enabled 报错问题解决 Python NetworkX 教程 Docker GPU 报错 - Failed to initialize NVML Unknown Error 解决方案 Python matplotlib 图表绘制 cuda-toolkit 安装替代 Cuda 与 Cudnn Jinja2 Python 利用 docxtpl 和 Jinja2 生成基于模板的 Word 文档 Docker 实现 CPU 核心隔离 LoFTR 基于 Transformer 的特征提取匹配算法 OmniGlue 特征匹配 SuperGlue 使用图神经网络学习特征匹配 Ubuntu 下将 xlsx 文件按照 sheet 转换为 图片 Python 使用 SQLAlchemy Python FastAPI 教程 openwrt 软路由配置安装 Nav2 地图文件(PGM/YAML)规范标准 3D OBJ 模型转换为 glb 瓦片格式 Python 源码 Redis 数据库介绍 Ubuntu 22.04 内核自动升级导致 MongoDB 7.0.12 错误记录 ubuntu 20.04 安装 ROS Noetic ubuntu 18.04 安装 ROS Melodic VMware Workstation Pro 个人免费版下载、安装、使用指南 Hybrid A-star 路径规划 Reeds-Shepp 曲线 Dubins 曲线 Linux kvm 虚拟机网络不通的问题解决方法 Ubuntu 自动内存清理 BiliBili 缓存视频转 mp4 Python 求解线性规划 3D Gaussian Splatting 官方源码实践记录 ImageMagick 教程 Ubuntu 22.04 安装 Colmap 对数几率 odds Ubuntu nmcli 网络管理工具使用指南 SuperPoint 自监督深度学习特征点提取 SyncTV Music Tag Web 在线音乐信息整理工具 ncm 格式转 mp3 MusicBrainz 音乐元数据百科数据库 Ubuntu 网络流量监控工具 私人云音乐平台 Navidrome 入门 手眼标定 四元数(Quaternions) OHTTPS 实现免费自动 https 证书申请、更新、部署 ubuntu 22.04 安装 CloudCompare 单机 KVM 虚拟机冷迁移 小鱼 一键安装 ROS-humble Fluid -46- 基于 Simpletex API 构建公式识别页面 公式识别 API 简介 -- Simpletex 使用 Python web 部署库 waitress 3D Gaussian Splatting for Real-Time Radiance Field Rendering Ubuntu Swap 简介与空间扩展 Ubuntu 24.04 安装 forticlient Clash Verge 使用 MongoDB 7.0.17 集群 Docker 构建源码 Error code - 2013. Lost connection to MySQL server during query 问题解决 Python 日志记录库 loguru 使用指北 Python 实现 Web 日志查看服务 MySQL LOAD DATA LOCAL INFILE 极速数据加载 Image size exceeds limit of 89478485 pixels 解决方案 Docker 使用 NVIDIA GPU 驱动错误解决 阿里云 docker 镜像仓库 Ubuntu中没有wired connected的解决方案 MinIO 简介 subconverter 代理订阅格式转换 修复 node –openssl-legacy-provider is not allowed in NODE_OPTIONS 错误 Ubuntu 使用 Clash For Linux 客户端
Ubuntu 22.04 使用 mdadm 实现软 raid
Yiwei Zhang · 2025-04-28 · via 又见苍岚

没有磁盘阵列卡,还想做 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/