存储基础概念

5025 字
25 分钟
存储基础概念

存储基础概念#

[TOC]


🧱 三种存储架构#

先搞清楚这三个东西在物理层面是怎么连接的

架构全称连接方式通俗理解
DASDirect Attached Storage直接插在服务器上就像你电脑上插个 U 盘或移动硬盘
NASNetwork Attached Storage通过网络 (以太网) 连接就像家里买了华为家庭存储,全家设备都能访问
SANStorage Area Network通过专用存储网络 (FC / iSCSI)就像服务器后面的专用高速存储通道

DAS — 直连存储#

💡 最原始的方案:硬盘直接接到服务器

  • 优点是简单、延迟低
  • 缺点是只能一台服务器用,别的服务器眼馋也访问不了
  • 常见接口:SATA、SAS、NVMe
Terminal window
# 在 Linux 下你看到的本地磁盘就是 DAS
[root@host ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part /
'这就是典型的 DAS —— 磁盘直接插在主板上'

NAS — 网络附加存储#

💡 把存储变成”共享文件夹”:通过网络提供文件级共享

  • 跑的是==文件共享协议==:NFS (Linux)、Samba/CIFS (Windows)、FTP
  • ==本质是在网络上传文件==,你看到的是文件夹和文件
  • 适合:部门共享文件、家庭媒体服务器
Terminal window
# 挂载 NFS 共享 —— 典型 NAS 使用场景
[root@host ~]# mount -t nfs 192.168.1.100:/data/share /mnt/nas
# 挂载完后就像本地目录一样用,但数据实际存在远端 NAS 设备上

SAN — 存储区域网络#

💡 把存储变成”远程硬盘”:服务器看到的是一个裸盘,需要自己格式化

  • 跑的是块级协议:iSCSIFC (Fibre Channel)
  • ==服务器拿到的是 block device==,不是文件,服务器自己决定用什么文件系统
  • 适合:数据库、虚拟化集群 (多个 ESXi 共享同一套存储)
Terminal window
# iSCSI 登录后,你会在服务器上看到一块新磁盘 (比如 /dev/sdb)
[root@host ~]# iscsiadm -m discovery -t st -p 192.168.1.100
192.168.1.100:3260,1 iqn.2025-01.com.example:target1
[root@host ~]# iscsiadm -m node --login
# 然后 lsblk 就能看到多了一块盘,后面格式化、挂载和本地盘一样操作

==📌 一句话区分==

  • DAS:盘插在我身上,只有我能用
  • NAS:文件在网络上,大家都来访问同一个文件夹
  • SAN:一块”远程空白硬盘”,我拿到后自己格式化、装文件系统

🧱 三种存储类型#

上面是从连接架构区分,现在从数据组织方式区分

类型访问方式核心特点典型场景
块存储裸盘 / Block Device需要格式化,速度快数据库、虚拟机磁盘
文件存储文件夹 + 文件即开即用,多用户共享NFS、Samba 共享
对象存储HTTP API (GET/PUT)扁平空间,无限扩展图片、视频、备份归档

块存储 (Block Storage)#

💡 最底层的存储形式:数据被切成一块一块 (block) 直接读写

  • 需要格式化成文件系统 (ext4、xfs、NTFS) 才能用
  • 延迟最低,速度最快
  • SAN 提供的通常就是块存储,DAS 也是
Terminal window
# 块存储的典型操作流
(1)拿到一块盘 /dev/sdb
(2)分区 fdisk /dev/sdb
(3)格式化 mkfs.xfs /dev/sdb1
(4)挂载 mount /dev/sdb1 /data
'你得自己走完这四步,块存储只负责给你"一块空白硬盘"'

文件存储 (File Storage)#

💡 最常见的存储形式你已经看到文件夹和文件了,直接读写

  • 文件系统由存储端管理,你只管往里存文件
  • ==不用操心格式化、分区==
  • NAS 提供的就是文件存储
Terminal window
# 文件存储用起来就简单多了
[root@host ~]# mount -t nfs 192.168.1.100:/vol/share /mnt
[root@host ~]# echo "hello" > /mnt/test.txt
'挂上去就能用,和本地文件夹一样'

对象存储 (Object Storage)#

💡 面向海量数据的存储:没有目录树,数据是扁平存放的

  • 每个文件是一个”对象”:包含 ==数据 + 元数据 + 唯一 ID==
  • 用 HTTP REST API 访问 (GET / PUT / DELETE)
  • 没有目录层级这回事,所有对象在同一个扁平空间里
  • 代表产品:AWS S3、MinIO、Ceph RGW
Warning
  • 这个不太懂, 先放在这
Terminal window
✅️ 对象存储不 mount,通过 API 操作
✅️ 对象存储不是给你"挂载"用的,而是通过 HTTP 上传下载
[root@host ~]# curl -X PUT -T photo.jpg \
http://s3.example.com/bucket/photo.jpg

📌 用盖房子类比#

  • 块存储 = 给你一块空地,你自己打地基、盖墙、装修 (格式化、分区、建文件系统)
  • 文件存储 = 给你一间精装房,拎包入住 (挂载即用)
  • 对象存储 = 给你一个无限大的仓库,东西塞进去拿个编号,用的时候凭编号取

⚙️ 重点服务详解#

之前学过的三个核心服务,这里做对比梳理

特性NFSSambaiSCSI
所属类型NAS (文件级)NAS (文件级)SAN (块级)
协议NFSv3 / NFSv4SMB / CIFSiSCSI (SCSI over TCP)
权限模型IP 或域名 + 导出策略用户名密码 / AD 域CHAP 认证 + IQN
服务端口2049 (nfsd)139 (NetBIOS), 445 (SMB)3260
拿到的对象文件夹文件夹裸盘 (/dev/sdX)
  • ==NFS== — Linux 世界的文件共享

  • ==Samba== — 打通 Linux 和 Windows 的文件共享

    • 💡 Samba 的价值在于跨平台:让 Linux 上的文件夹在 Windows 的”网络邻居”里出现
  • ==iSCSI== — 通过网络给服务器”插一块远程硬盘”

💡 iSCSI 的核心概念

🚢 ① Target (目标端) — 存储服务器,负责”提供磁盘” 📦 ② Initiator (发起端) — 客户端,主动去连接拿盘 ⚙️ ③ IQN (iSCSI Qualified Name) — 全局唯一标识名,相当于”磁盘的身份证” 🔹 ④ LUN (Logical Unit Number) — 逻辑单元号,一个 target 可以包含多个 LUN

⚠️ iSCSI 注意事项

  • iSCSI 走的是网络,网络断了磁盘就”掉”了
  • 生产环境建议专用存储网络或 VLAN,不要和业务流量混跑
  • 文件系统推荐用支持并发的 (如 VMware VMFS、GFS2、OCFS2),普通 ext4/xfs 在多机共享一块盘时会出问题
  • CHAP 认证只是基础安全,敏感数据建议再加一层 IPSec

📌 小结#

  • DAS / NAS / SAN 是==物理连接架构==的分类
  • 块存储 / 文件存储 / 对象存储 是==数据组织方式==的分类
  • NAS 通常 = 文件存储,SAN 通常 = 块存储,但不是绝对绑定
  • NFS 和 Samba 属于 NAS (文件级共享),iSCSI 属于 SAN (块级共享)
  • 块存储快但需自己管理,文件存储方便但性能上限低,对象存储海量但延迟高

项目拓展 —— 集群存储方案设计#

在这个拓展章节中,我们将探讨集群文件系统、分布式存储等方案,并最终聚焦于企业级首选——==Ceph==

  • 为一个 ==跨主机的共享存储系统==做准备

集群文件系统 (Clustered File System)#

🧱 通俗解释:多个服务器同时挂载同一个文件系统,任何一个节点写入的数据,其他节点立即可见

  • 传统单机文件系统(ext4/xfs):一块硬盘只能一台机器用
  • 集群文件系统:==多台机器同时读写同一个文件系统==,通过 ==锁机制== 防止数据冲突
  • 代表方案:GFS2(Red Hat)、OCFS2(Oracle)、Veritas CFS

💡 核心特征:强一致性、需要 STONITH 机制防脑裂、适合小规模高可用场景

分布式文件系统 (Distributed File System)#

🧱 通俗解释:把文件切成小块,分散存储在 N 台服务器上,对外表现为一个统一的目录树

  • 文件和目录的 ==元数据==(文件名、权限、位置)由专门的 ==元数据服务器(MDS)== 管理
  • 实际数据分散在多台数据服务器上并行读写
  • 代表方案:HDFS(Hadoop 生态)、CephFS(Ceph 的文件接口)
特性集群文件系统分布式文件系统
数据存储共享 SAN/NAS 存储数据分散在本地磁盘
扩展性受限于存储设备容量水平扩展,加节点即可
元数据管理共享锁管理独立 MDS 服务器
典型场景小规模高可用集群大规模数据存储与分析

分布式存储 (Distributed Storage)#

🧱 通俗解释:不仅仅是文件——把 ==块存储==、==文件存储==、==对象存储== 统一在一个分布式平台上

分布式存储是分布式文件系统的”进阶版”,它不仅提供文件接口,还能:

  • 模拟出一块虚拟硬盘(==块存储==),直接给操作系统用,格式化分区随心所欲
  • 提供 HTTP RESTful 接口(==对象存储==),适合存储图片、视频等非结构化数据
  • 挂载为 POSIX 文件系统(==文件存储==),像 NFS 一样方便

💡 Ceph 是目前唯一一个同时原生支持块、文件、对象三种存储接口的开源分布式存储系统

链路分布 (Data Striping)#

🧱 通俗解释:数据在存储集群中的”分片+打散”策略

一个大文件存入分布式存储后: ① 先被切分为多个固定大小的对象(object),比如每个 4MB ② 通过 ==CRUSH 算法== 计算每个对象应该存放在哪些 OSD 上 ③ 数据被均匀打散到所有磁盘上,避免热点

📌 一句话链路分布解决了”数据该放在哪里”的路由问题

冗余 (Redundancy)#

🧱 通俗解释:数据存了不止一份,坏几块盘丢不了数据

  • 多副本(Replicated):每份数据存 N 份(默认 3 副本),是最直观的冗余方式
  • 纠删码(Erasure Code):有点像 RAID5,把数据+校验码分散存储,比副本更省空间
  • Ceph 默认使用 ==3 副本== 策略,哪怕 2 个 OSD 同时损坏,数据依然安全

去中心化 (Decentralization)#

🧱 通俗解释:集群没有”老大”,每个节点都是平等的——挂了谁都不影响整体

  • 传统存储系统的元数据集中在某台服务器上 → ==单点故障==
  • Ceph 使用 ==CRUSH 算法== 替代中心化元数据查找:
    • 客户端自己就能算出数据存放在哪个 OSD
    • 不需要问任何中心节点

📌 CRUSH = Controlled Replication Under Scalable Hashing,是 Ceph 实现去中心化的核心

RAID 是什么#

💡 RAID (Redundant Array of Independent Disks):把多块物理硬盘组合成一个逻辑磁盘

  • 目的:提高读写速度 (条带化) 或 提高数据安全性 (镜像/校验)
  • 软件 RAID:用 mdadm 工具管理,由 CPU 计算校验,成本低、灵活
  • 硬件 RAID:用 Raid 卡处理,带独立缓存,性能好但绑定硬件
RAID 级别数据保护方式硬盘数量容量使用率可坏几块盘
RAID0不安全2(1块也行)10 ❌ 坏一块全丢
RAID1镜像2(偶数即可)1/21 ✅ 坏一块
RAID3校验至少3块(n-1)/n1 ✅ 坏一块
RAID5校验至少3块(n-1)/n1 ✅ 坏一块
RAID6校验至少4块(n-2)/n2 ✅ 坏两块
RAID10镜像 + 校验至少4块1/22 ✅ 每组坏一块
组内最多允许坏1块
组间最多允许坏2块
RAID50校验至少6块(2组×3)(n-2)/n(2组2 ✅ 每组坏一块
组内最多允许坏1块
组间最多允许坏2块
RAID60校验至少8块(2组×4)(n-4)/n(2组4 ✅ 每组坏两块
组内最多允许坏2块
组间最多允许坏4块

环境准备#

  • 操作系统:Ubuntu 24.04
  • 虚拟机软件:VMware Workstation / VirtualBox
  • 虚拟磁盘:添加 6 块虚拟硬盘,每块 5G
  • root 权限:所有操作需 root 或 sudo
Terminal window
1)确认磁盘已识别
root@ubuntu ~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 38G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 30G 0 lvm /
sr0 11:0 1 2.6G 0 rom
nvme0n1 259:0 0 5G 0 disk
nvme0n2 259:1 0 5G 0 disk
nvme0n3 259:2 0 5G 0 disk
nvme0n4 259:3 0 5G 0 disk
nvme0n5 259:4 0 5G 0 disk
nvme0n6 259:5 0 5G 0 disk
# sda 是系统盘,其余 6 块为空盘
2)安装 mdadm (Ubuntu 24.04 默认未预装)
root@ubuntu:~# apt update && apt install -y mdadm
'一路回车即可,无需额外配置'
root@ubuntu ~# dpkg -l | grep mdadm
amd64 mdadm amd64 4.3-1ubuntu2.1 [464 kB]

⚠️ 如果磁盘之前被创建过 RAID,需要先清除

Terminal window
root@ubuntu:~# mdadm --zero-superblock /dev/nvme0n{1,2,3,4,5,6}

RAID 0 — 条带化 (无冗余)#

💡 两块盘拼成一块,数据交替写入,读写速度接近翻倍,但坏一块全丢

Terminal window
root@ubuntu:~# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/nvme0n1 /dev/nvme0n2
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
--create /dev/md0 # 创建名为 md0 的 RAID 设备
--level=0 # 指定 RAID 0
--raid-devices=2 # 用 2 块活动盘

验证创建结果

Terminal window
1)查看阵列概况
root@ubuntu ~# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid0 nvme0n2[1] nvme0n1[0]
10475520 blocks super 1.2 512k chunks
2)查看详细状态
root@ubuntu ~# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 15 16:17:43 2026
Raid Level : raid0
Array Size : 10475520 (9.99 GiB 10.73 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Fri May 15 16:17:43 2026
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Layout : original
Chunk Size : 512K
Consistency Policy : none
Name : ubuntu:0 (local to host ubuntu)
UUID : 579174b2:1e1c0583:9a4578ac:72afd403
Events : 0
Number Major Minor RaidDevice State
0 259 0 0 active sync /dev/nvme0n1
1 259 1 1 active sync /dev/nvme0n2

格式化与挂载

Terminal window
root@ubuntu:~# mkfs.xfs /dev/md0
log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/md0 isize=512 agcount=16, agsize=163712 blks
...............
root@ubuntu:~# mount /dev/md0 /mnt
root@ubuntu ~# df -h | grep md0
/dev/md0 10G 228M 9.8G 3% /mnt
'格式化 + 挂载成功,10G 可用 (2×5G)'
root@ubuntu:~# echo "RAID0 test" > /mnt/test.txt
root@ubuntu:~# cat /mnt/test.txt
RAID0 test

停止 RAID 0 (为后续实验释放磁盘):

Terminal window
1)卸载文件系统
root@ubuntu ~# umount /mnt
2)停止阵列
root@ubuntu ~# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
3)释放磁盘 --> 清理元数据
root@ubuntu ~# mdadm --zero-superblock /dev/nvme0n1 /dev/nvme0n2

RAID 1 — 镜像#

💡 两块盘互为镜像,数据一模一样,坏一张另一张顶上

Terminal window
root@ubuntu ~# mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=1.2 /dev/nvme0n1 /dev/nvme0n2
mdadm: array /dev/md1 started.
'因为会跳选择 [y/N]?' --> 元数据版本是否使用现代格式
--metadata=1.2
# 指定版本 --> 自动回答 yes 并强制创建

⚠️ metadata 1.2 vs 0.90 v1.2 元数据写在磁盘开头 (4K 偏移),v0.90 写在磁盘末尾

Terminal window
1)查看阵列概况
root@ubuntu:~#
md1 : active raid1 nvme0n2[1] nvme0n1[0]
5237760 blocks super 1.2 [2/2] [UU] --> '[UU] 表示两块盘都正常在线'
[=========>...........] resync = 48.9% xxx speed=213616K/sec
# 概率观察到同步进度
2)格式化与挂载
root@ubuntu ~# mkfs -t ext4 -F /dev/md1
-F # 强制格式化,不询问
root@ubuntu ~# mkdir -p /mnt/raid1
root@ubuntu ~# mount /dev/md1 /mnt/raid1
root@ubuntu ~# df -h | grep md1
/dev/md1 4.9G 24K 4.6G 1% /mnt/raid1
'可用的空间只有一块盘的容量' --> 5G
root@ubuntu ~# echo "RAID1 mirror test" > /mnt/raid1/test.txt
3)停止 (保留磁盘给下一个实验)
root@ubuntu ~# umount /mnt/raid1
root@ubuntu ~# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@ubuntu ~# mdadm --zero-superblock /dev/nvme0n1 /dev/nvme0n2

RAID 5 + 热备盘⭐#

💡 共 ==4== 块盘 —> 3 块活动盘 + 1 块热备盘

  • 任意一块活动盘故障 → 热备自动顶上开始重建

  • 可用容量 = (3-1) × 5G = 10G

    • 在这3块活动盘中 —> 只有两块用来真正的存放数据
    • 一块校验, 一块热备
Terminal window
1)创建 RAID 5 + 热备
root@ubuntu ~# mdadm --create /dev/md5 --level=5 --raid-devices=3 --spare-devices=1 --metadata=1.2 \
/dev/nvme0n1 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4
--spare-devices=1 # 1 块作为热备 (nvme0n5)
2)查看阵列概况
root@ubuntu:~# cat /proc/mdstat
md5 : active raid5 nvme0n3[4] "nvme0n4[3](S)" nvme0n2[1] nvme0n1[0]
10475520 blocks super 1.2 level 5, 512k chunk, algorithm 2 "[3/3] [UUU]"
# nvme0n4[3](S) --> (S) 即 Spare 热备
# [3/3] [UUU] --> 3块活动盘 --> 都已同步 && 全部就绪
3)查看详细状态
root@ubuntu ~# mdadm --detail /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Fri May 15 16:45:06 2026
Raid Level : raid5
....................
Name : ubuntu:5 (local to host ubuntu)
UUID : 4343f479:179002a2:b2ba6cd2:009bebd7
Events : 18
Number Major Minor RaidDevice State
0 259 0 0 active sync /dev/nvme0n1
1 259 1 1 active sync /dev/nvme0n2
4 259 2 2 active sync /dev/nvme0n3
3 259 3 - spare /dev/nvme0n4
"3 块 active sync + 1 块 spare"
4)格式化并挂载
root@ubuntu ~# mkfs -t ext4 -F /dev/md5
root@ubuntu ~# mkdir -p /mnt/raid5
root@ubuntu ~# mount /dev/md5 /mnt/raid5
root@ubuntu ~# df -h | grep md5
/dev/md5 9.8G 24K 9.3G 1% /mnt/raid5
'共10G可用'
root@ubuntu ~# echo "RAID5 hot-spare test" > /mnt/raid5/test.txt

故障模拟与热备重建#

💡 模拟一块盘挂掉 → 观察热备自动接管 → 移除坏盘 → 添加新热备

Terminal window
1)模拟磁盘故障 — 标记 nvme0n1 为 faulty
root@ubuntu ~# mdadm /dev/md5 --fail /dev/nvme0n1
mdadm: set /dev/nvme0n1 faulty in /dev/md5
2)立即查看 — 热备自动启动,开始重建
root@ubuntu ~# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md5 : active raid5 nvme0n3[4] nvme0n4[3] nvme0n2[1] "nvme0n1[0](F)"
10475520 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
[===>.................] recovery = 16.2% (850332/5237760) finish=0.3min speed=212583K/sec
# nvme0n1[0](F) → (F) = Faulty 已标记故障
# nvme0n4 自动从 (S) 变成活动盘,接管重建
'热备自动顶上,无需人工干预!'
3)重建完成
root@ubuntu ~# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md5 : active raid5 nvme0n3[4] nvme0n4[3] nvme0n2[1] "nvme0n1[0](F)"-->故障
10475520 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
4)查看最新详情
root@ubuntu ~# mdadm --detail /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Fri May 15 16:45:06 2026
Raid Level : raid5
Number Major Minor RaidDevice State
3 259 3 0 active sync /dev/nvme0n4 <-- 原热备已接手
1 259 1 1 active sync /dev/nvme0n2
4 259 2 2 active sync /dev/nvme0n3
0 259 0 - faulty /dev/nvme0n1 <-- 标记故障
'热备消失 (Spare Devices: 0),因为它已经转正了'
5)移除故障盘
root@ubuntu ~# mdadm /dev/md5 --remove /dev/nvme0n1
mdadm: hot removed /dev/nvme0n1 from /dev/md5
6)添加新热备 — 模拟更换硬盘
root@ubuntu:~# mdadm --zero-superblock /dev/nvme0n5
'先清空新盘的元数据'
root@ubuntu ~# mdadm /dev/md5 --add /dev/nvme0n5
mdadm: added /dev/nvme0n5
==========================
root@ubuntu ~# mdadm --detail /dev/md5 | grep spare
5 259 4 - spare /dev/nvme0n5
# 新热备就位!

验证数据完整性

Terminal window
root@ubuntu ~# cat /mnt/raid5/test.txt
RAID5 hot-spare test
# 数据完好无损,故障期间完全不受影响!
"数据清理"
root@ubuntu ~# umount /dev/md5
root@ubuntu ~# mdadm --stop /dev/md5
root@ubuntu ~# mdadm --zero-superblock /dev/nvme0n{1,2,3,4,5,6}

RAID 6 — 双重校验#

  • 4 块盘组成 RAID 6,最多允许 2 块盘同时故障
    • 没有热备盘
  • 可用容量 = (4-2) × 5G = 10G
Terminal window
1)使用 4 块盘创建 RAID 6 (无热备)
root@ubuntu:~# mdadm --create /dev/md6 --level=6 --raid-devices=4 --metadata=1.2 \
/dev/nvme0n1 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4
mdadm: array /dev/md6 started.
2)等待同步
root@ubuntu ~# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md6 : active raid6 nvme0n4[3] nvme0n3[2] nvme0n2[1] nvme0n1[0]
10475520 blocks super 1.2 level 6, 512k chunk, algorithm 2 "[4/4] [UUUU]"
[=========>...........] resync = 49.7% (2603648/5237760) finish=0.2min speed=216970K/sec
3)同步完成
root@ubuntu:~# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md6 : active raid6 nvme0n4[3] nvme0n3[2] nvme0n2[1] nvme0n1[0]
10475520 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]

配置持久化#

⚠️ 重启后 RAID 设备名称可能变化,必须将阵列信息写入配置文件

Terminal window
1)生成配置
root@ubuntu ~# mdadm --detail --scan
ARRAY /dev/md6 metadata=1.2 UUID=04852c0f:c021750a:ed6a8074:a96c200d
2)写入配置文件 (Ubuntu 路径为 /etc/mdadm/mdadm.conf)
root@ubuntu ~# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
root@ubuntu ~# tail -1 /etc/mdadm/mdadm.conf
ARRAY /dev/md6 metadata=1.2 UUID=04852c0f:c021750a:ed6a8074:a96c200d

⚠️ Rocky Linux / RHEL 的配置文件是 /etc/mdadm.conf,Ubuntu 是 /etc/mdadm/mdadm.conf,注意区分

重新扫描激活 (对已停止的阵列):

Terminal window
root@ubuntu:~# mdadm --stop /dev/md6
mdadm: stopped /dev/md6
'停止后查看不到相关配置'
root@ubuntu ~# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices: "<none>"
root@ubuntu ~# mdadm --assemble --scan
mdadm: /dev/md6 has been started with 4 drives.
"根据配置文件自动扫描并启动所有阵列"
# 再次查看
root@ubuntu ~# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md6 : active raid6 nvme0n1[0] nvme0n4[3] nvme0n3[2] nvme0n2[1]
10475520 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]

📋 日常监控命令速查#

任务命令
查看所有阵列概况cat /proc/mdstat
监控重建进度 (实时刷新)watch -n 1 cat /proc/mdstat
查看阵列详细信息mdadm --detail /dev/mdX
检查磁盘超级块信息mdadm --examine /dev/sdX
标记磁盘故障mdadm /dev/mdX --fail /dev/sdY
移除故障磁盘mdadm /dev/mdX --remove /dev/sdY
添加磁盘 (热备/替换)mdadm /dev/mdX --add /dev/sdY
停止阵列mdadm --stop /dev/mdX
清除磁盘 RAID 元数据mdadm --zero-superblock /dev/sdX
扫描并重新组装mdadm --assemble --scan
生成配置文件mdadm --detail --scan
设置邮件通知/etc/mdadm/mdadm.conf 中添加 MAILADDR root

📌 小结#

  • RAID 0:条带,快但无冗余,坏一块全丢
  • RAID 1:镜像,最安全但容量利用率只有 50%
  • RAID 5:分布式校验,容量 = (N-1),实验最常用
  • RAID 6:双重校验,容量 = (N-2),允许坏两块
  • 热备盘 (Hot Spare):平时闲置,故障时自动顶替,无需人工干预
  • 核心流程create--fail 模拟故障 → 热备自动重建 → --remove 移除坏盘 → --add 加入新热备
  • Ubuntu 24.04 配置路径:/etc/mdadm/mdadm.conf (非 /etc/mdadm.conf)
  • 软件 RAID (mdadm) 适合学习和非 IO 密集型场景,掌握后可平滑迁移至 CentOS Stream / RHEL / Rocky Linux

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

存储基础概念
https://www.kpyun.fun/posts/services/storage/storage03/
作者
久棹
发布于
2026-03-23
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
久棹
只要胆子大,天天寒暑假!
公告
欢迎来到久棹的技术小站!本站专注 Linux 运维学习笔记分享,如有问题欢迎交流探讨 🎉
分类
标签
站点统计
文章
98
分类
11
标签
203
总字数
244,453
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录