RAID 磁盘阵列

RAID 介绍

RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种数据存储技术,利用多个硬盘组合成一个逻辑存储单元,以提高数据冗余性性能两者兼顾

RAID 主要分为 硬件 RAID软件 RAID,不同级别的 RAID 提供不同的性能、容错能力和存储效率。


1. RAID 的分类

RAID 主要分为以下几种常见级别:

RAID 级别 特点 容错性 读写性能 磁盘利用率
RAID 0 数据条带化,无冗余 ❌ 无 🔼 读写加速 100%
RAID 1 镜像存储,数据完整性高 ✅ 允许 1 块磁盘故障 读性能高,写入受限 50%
RAID 5 条带化 + 奇偶校验 ✅ 允许 1 块磁盘故障 读高,写稍慢 (n-1)/n
RAID 6 双奇偶校验,增强可靠性 ✅ 允许 2 块磁盘故障 读高,写稍慢 (n-2)/n
RAID 10 RAID 1 + RAID 0(镜像 + 条带) ✅ 允许每组 1 块磁盘故障 读高,写高 50%

RAID 0(条带化,提升速度,无冗余)

  • 特点:数据分布在多个磁盘上,提高读写性能。
  • 优点:速度最快,磁盘利用率最高(100%)。
  • 缺点无冗余,任意一块磁盘损坏都会导致数据丢失。
  • 适用场景:对性能要求极高但不关心数据安全性的场景,如缓存盘、临时存储

RAID 1(镜像,数据安全高)

  • 特点:数据在两块磁盘上保持完全一致,一块损坏仍可使用。
  • 优点冗余度高,可靠性强,读性能提高。
  • 缺点:磁盘利用率只有 50%(存两份)。
  • 适用场景:系统盘、重要数据存储。

RAID 5(奇偶校验,提高安全性和性能)

  • 特点:采用 条带化 + 单一奇偶校验,数据分布在多个磁盘上。
  • 优点支持 1 块磁盘损坏,磁盘利用率较高((n-1)/n)。
  • 缺点:写入需要计算校验信息,写性能较 RAID 0 低。
  • 适用场景数据库、文件服务器

RAID 6(双重奇偶校验,提高可靠性)

  • 特点:类似 RAID 5,但有 双奇偶校验,提高容错能力。
  • 优点支持 2 块磁盘同时损坏,比 RAID 5 更可靠。
  • 缺点:写入性能比 RAID 5 低,磁盘利用率更低((n-2)/n)。
  • 适用场景:需要更高安全性的数据存储,如企业级存储系统。

RAID 10(RAID 1 + RAID 0,兼顾性能和安全)

  • 特点:RAID 1(镜像)+ RAID 0(条带),至少 4 块磁盘。
  • 优点读写性能高,安全性高,支持多个磁盘损坏(但必须分布在不同镜像组)。
  • 缺点:磁盘利用率 50%,成本较高。
  • 适用场景:数据库、虚拟机存储等需要高性能+高安全的场景。

2. 硬件 RAID vs. 软件 RAID

RAID 既可以通过 硬件 实现,也可以通过 软件 实现。

硬件 RAID

  • 通过 RAID 控制器(RAID 卡)管理磁盘,独立于操作系统运行。

  • 特点

    • RAID 操作由专用硬件完成,不占用 CPU 资源。
    • 具有 专用缓存,提高 RAID 5/6 写入性能。
    • 适用于 企业级存储,如服务器、NAS。
  • 缺点

    • 成本高,RAID 卡价格昂贵。
    • RAID 卡故障后,可能导致 RAID 不能恢复。

软件 RAID

  • 通过操作系统(Linux mdadm、Windows Storage Spaces)实现 RAID,不需要专用 RAID 硬件。

  • 特点

    • 成本低,仅依赖操作系统和 CPU 计算。
    • 灵活性高,可在不同硬件上迁移。
    • 适用于 个人用户、低成本存储方案
  • 缺点

    • 占用 CPU 资源,影响整体性能。
    • RAID 5/6 写入性能较差,因 CPU 需要计算校验信息。

硬件 RAID vs. 软件 RAID 对比

方案 性能 成本 适用场景
硬件 RAID 🚀 高 💰 高 企业级存储,数据中心
软件 RAID ⚡ 适中 ✅ 低 个人存储,服务器

3. RAID 选择指南

  • 高性能,但不关心数据安全性?👉 RAID 0
  • 数据安全性最重要,可接受磁盘利用率降低?👉 RAID 1
  • 需要性能+冗余,性价比高?👉 RAID 5
  • 极高的可靠性,支持 2 块磁盘故障?👉 RAID 6
  • 性能+安全性兼顾,预算充足?👉 RAID 10

4. Linux 创建软件 RAID(mdadm)

Linux 上,使用 mdadm 命令管理软件 RAID。例如,创建 RAID 1

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# root @ debian in ~ [20:21:45] 
$ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
└─sda1 ext4 1.0 f34f1c4a-fb45-4145-b526-1a9985598ea4 305.4G 17% /
sdb
sdc
sdd
sr0 iso9660 Joliet Extension CDROM 2023-04-19-20-36-49-00

# root @ debian in ~ [20:22:15]
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 400G 0 disk
└─sda1 8:1 0 400G 0 part /
sdb 8:16 0 100G 0 disk
sdc 8:32 0 100G 0 disk
sdd 8:48 0 100G 0 disk
sr0 11:0 1 445.7M 0 rom

# root @ debian in ~ [20:22:17]
$ fdisk -l
Disk /dev/sdd: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: BAF1E3D6-56AC-49CB-A007-04A885EC8176


Disk /dev/sdc: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6B28F12E-298C-444B-9280-B193950BC24F


Disk /dev/sda: 400 GiB, 429496729600 bytes, 838860800 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x61522629

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 838858751 838856704 400G 83 Linux


Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 9324FD1A-EAE8-7E49-B548-C613E8D4D282

# root @ debian in ~ [20:22:20]
$ mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdc /dev/sdd
mdadm: partition table exists on /dev/sdc
mdadm: partition table exists on /dev/sdc but will be lost or
meaningless after creating array
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: partition table exists on /dev/sdd
mdadm: partition table exists on /dev/sdd but will be lost or
meaningless after creating array
mdadm: size set to 104791040K
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

# root @ debian in ~ [20:22:30]
$ cat /proc/mdstat # 查看raid状态
Personalities : [raid1]
md0 : active raid1 sdd[1] sdc[0]
104791040 blocks super 1.2 [2/2] [UU]
[>....................] resync = 0.3% (377728/104791040) finish=46.0min speed=37772K/sec

unused devices: <none>

# root @ debian in ~ [20:22:40]
$ mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Mar 28 20:22:30 2025
Raid Level : raid1
Array Size : 104791040 (99.94 GiB 107.31 GB)
Used Dev Size : 104791040 (99.94 GiB 107.31 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent

Update Time : Fri Mar 28 20:22:30 2025
State : clean, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Consistency Policy : resync

Resync Status : 1% complete

Name : debian:0 (local to host debian)
UUID : 5a3e483d:dcc3f33d:3ffdbae7:7f4a41a7
Events : 0

Number Major Minor RaidDevice State
0 8 32 0 active sync /dev/sdc
1 8 48 1 active sync /dev/sdd

# root @ debian in ~ [20:23:01]
$ mkfs.ext4 /dev/md0
mke2fs 1.46.2 (28-Feb-2021)
Creating filesystem with 26197760 4k blocks and 6553600 inodes
Filesystem UUID: f3ee7c5d-c9a7-429a-91e8-58d6301ed7dc
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks):
done
Writing superblocks and filesystem accounting information: done

# root @ debian in ~ [20:23:17]
$ mkdir -p /mnt/raid1

# root @ debian in ~ [20:23:23]
$ mount /dev/md0 /mnt/raid1

# root @ debian in ~ [20:23:27]
$ df -h | grep md0
/dev/md0 98G 24K 93G 1% /mnt/raid1

# root @ debian in ~ [20:23:31]
$ mdadm --detail --scan >> /etc/mdadm/mdadm.conf

# root @ debian in ~ [20:23:53]
$ update-initramfs -u
update-initramfs: Generating /boot/initrd.img-5.10.0-20-amd64

# root @ debian in ~ [20:24:10]
$ vim /dev/md0 /mnt/raid1 ext4 defaults 0 0

# root @ debian in ~ [20:24:15] C:130
$ vim /etc/fstab

# root @ debian in ~ [20:24:30]
$ mount -a

# root @ debian in ~ [20:24:34]
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 400G 0 disk
└─sda1 8:1 0 400G 0 part /
sdb 8:16 0 100G 0 disk
sdc 8:32 0 100G 0 disk
└─md0 9:0 0 99.9G 0 raid1 /mnt/raid1
sdd 8:48 0 100G 0 disk
└─md0 9:0 0 99.9G 0 raid1 /mnt/raid1
sr0 11:0 1 445.7M 0 rom

注意

是的!如果你是通过 RAID 卡(硬件 RAID)来创建 RAID 阵列,系统就不会在 /proc/mdstat 里看到 RAID 信息。


为什么硬件 RAID 在 /proc/mdstat 里看不到?

/proc/mdstat 只会显示 软件 RAID(mdadm 组的阵列) 的状态,硬件 RAID 是由 RAID 控制器(RAID 卡)直接管理磁盘,并向操作系统暴露一个单独的虚拟磁盘,系统会把它当作一个普通的磁盘,而不是多个磁盘的 RAID 组合。

📌 简单理解:

  • 软件 RAID(mdadm) 👉 在 /proc/mdstat 可以看到 RAID 设备(如 /dev/md0)。
  • 硬件 RAID(RAID 卡) 👉 /proc/mdstat 看不到,系统里只会看到一个 RAID 卡创建的虚拟磁盘(如 /dev/sda)。

如何检查硬件 RAID 状态?

如果你是用 RAID 卡组的 RAID,可以使用 RAID 卡的管理工具 来查看 RAID 状态:

lsblk 查看 RAID 设备

1
lsblk

如果是硬件 RAID,可能会看到一个大容量的 RAID 设备(比如 /dev/sda),但看不到原始的物理磁盘(/dev/sdc/dev/sdd)。


lsscsi 查看 RAID 磁盘

如果系统里有 lsscsi,可以用它检查 RAID 设备:

1
lsscsi

可能会看到类似:

1
[0:0:0:0]    disk    DELL     PERC H730 Mini    4.27  /dev/sda

这里 /dev/sda 其实就是 RAID 设备,而不是普通的物理磁盘。


使用 RAID 卡厂商提供的管理工具

不同品牌的 RAID 卡有不同的管理工具,你可以尝试以下工具:

MegaRAID(LSI、DELL PERC)

1
sudo megacli -LDInfo -Lall -aAll

或者:

1
sudo storcli64 /c0 show

HP Smart Array

1
sudo hpssacli ctrl all show config

Dell iDRAC(PERC RAID 卡)

1
sudo omreport storage controller

结论

软件 RAID(mdadm) 👉 可以用 /proc/mdstat 查看。
硬件 RAID(RAID 卡) 👉 /proc/mdstat 看不到 RAID 详情,需要用 RAID 管理工具检查。

💡 你可以试试看 lsblklsscsi,看看 RAID 设备的情况,然后告诉我你的 RAID 卡是什么型号,我可以帮你找到对应的管理工具! 🚀

总结

  1. RAID 主要分为 RAID 0/1/5/6/10,不同级别提供不同的安全性、性能和磁盘利用率
  2. 硬件 RAID 依赖 RAID 卡,速度快但成本高,适合企业存储。
  3. 软件 RAID 依赖操作系统管理,成本低但占用 CPU 资源,适合个人和中小型存储。
  4. Linux 可以使用 mdadm 配置软件 RAID,支持 RAID 0/1/5/6/10。

如果你想在 Debian 11 上 实践 RAID 配置,可以告诉我你的磁盘情况,我可以提供具体的 mdadm 配置步骤!


RAID 磁盘阵列
https://luffy997.github.io/2025/03/28/RAID-磁盘阵列/
作者
Luffy997
发布于
2025年3月28日
许可协议