Linux RAID 存储技术

各级RAID概念

RAID(独立磁盘冗余阵列)是一种将多个‌物理磁盘驱动器‌组合成一个或多个‌逻辑单元‌的技术;可以理解为将多块普通磁盘组合起来,在特定的逻辑下合作存储数据,以达到提升性能、增加容量、提高存储安全性等目的。

从实现角度看, RAID 主要分为:

  • 软 RAID:所有功能均有操作系统和 CPU 来完成,没有独立的 RAID 控制 / 处理芯片和 I/O 处理芯片,效率最低。
  • 硬 RAID :配备了专门的 RAID 控制 / 处理芯片和 I/O 处理芯片以及阵列缓冲,不占用 CPU 资源,成本很高。
  • 软硬混合 RAID:具备 RAID 控制 / 处理芯片,但缺乏 I/O 处理芯片,需要 CPU 和驱动程序来完成,性能和成本在软 RAID 和硬 RAID 之间。

不同的RAID级别代表了不同的磁盘组合方式和存储逻辑

RAID级别最小磁盘数数据拆分说明
RAID 02将数据分成两部分,分别存入两块磁盘;每块磁盘储存着完整数据的一部分
RAID 12将数据复制一次后,分别存入两块磁盘;每块磁盘储存着完整的数据
RAID 53将数据分为两部分和一份奇偶校验信息,分别存入三块磁盘;任一数据部分丢失时可根据奇偶校验信息还原为原始数据
RAID 64将数据分为两部分和两份奇偶校验信息,分别存入四块磁盘;任一数据部分丢失时可根据奇偶校验信息还原为原始数据
RAID 104将磁盘分为两两一组,每组获得一份完整数据;再对每组磁盘进行RAID 0相同储存方式;即先复制再拆分存储

RAID 技术中有一个概念叫冗余;其本质可以理解为备份,在RAID中表示通过创建数据的额外副本来提高系统的可靠性和容错能力;简单来说,当RAID中的磁盘发生故障时,系统可以利用冗余备份数据恢复原始信息,从而避免数据丢失。

冗余度是衡量数据备份程度的量化指标,表示数据被额外备份的比例;冗余度越高,意味着备份的副本越多,系统的容错能力越强,但存储空间的利用率也越低。
例如在RAID 1中,数据被复制了一份后分别存入不同的磁盘,相当于同一数据占用了两倍的空间,冗余度即为50%。

RAID级别冗余机制冗余度
RAID 00%
RAID 1镜像50%
RAID 5奇偶校验25%
RAID 6双重奇偶校验33.3%
RAID 10镜像50%

冗余度越高,可容忍的故障磁盘越多
但需要注意RAID不是备份,RAID的主要目的是‌提高可用性‌和‌性能‌,不能代替备份。

RHEL 提供多磁盘和设备管理 (mdadm) 程序实用程序来创建和管理软件RAID;mdadm (Multiple Devices Admin) 是 Linux 下‌创建、管理和监控软件 RAID‌ 的核心工具,用于实现RAID阵列。

语法:mdadm [模式] [参数] [磁盘列表]
mdadm命令的组成是选择一个模式加若干参数

mdadm拥有以下命令模式:

  • 创建模式:–create;用于初始化新 RAID 阵列;
  • 组装模式:–assemble;激活已存在的 RAID 阵列;
  • 管理模式:直接在mdadm后连接选项;用于调整 RAID 状态;
  • 监控模式:–monitor;用于监控 RAID 状态;
  • 增长模式:–grow;扩容或修改阵列属性;
  • 杂项模式:包含以下命令
    –detail:查看阵列详细信息;
    –examine:检查磁盘 RAID 元数据;
    –query:快速查看阵列基础信息;
    –zero-superblock:销毁阵列,清除磁盘 RAID 元数据;
mdadm选项作用
-l,–level设置 RAID 级别
-n,–raid-devices设定磁盘数量
-x,–spare-devices热备盘数量
-c,–chunk设置条带大小
–bitmap=internal启用内存位图
–scan自动扫描 /etc/mdadm.conf 或 /proc/partitions 配置
–add添加热备盘
–fail触发重建(需热备盘)
–remove安全卸载故障盘
–stopumount 文件系统,用于卸载前
[root@server ~]# mdadm --detail --scan >>/etc/mdadm.conf
# 扫描系统中所有活动的RAID阵列,将输出追加到/etc/mdadm.conf文件中;可以持久化保存当前RAID阵列的配置信息‌,确保系统重启后能自动识别并重组RAID阵列
[root@server ~]# madam --assemble --scan
# 自动扫描并组装所有RAID

RAID 0

RAID 0 的数据分布方式被称为条带化(Stripe);原因是RAID 0使数据被分割成条带,依次循环写入所有磁盘。

RAID 0的总容量是成员磁盘容量的总和,因为没有冗余数据;如果任何一块磁盘故障,整个阵列的数据将丢失,且无法恢复。

创建RAID 0至少需要两块磁盘:

[root@server ~]# mdadm --create /dev/md0 --level 0 --raid-devices 2 /dev/sd{b,c}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@server ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Nov 16 21:09:06 2025
        Raid Level : raid0
        Array Size : 41908224 (39.97 GiB 42.91 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Sun Nov 16 21:09:06 2025
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : server.gc.cloud:0  (local to host server.gc.cloud)
              UUID : 527aabcc:40c60758:7fc96289:d3ed627a
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

raid0阵列不能增加新成员盘,也不能强制使成员盘故障

接下来格式化raid0阵列,然后就可以进行存储数据了:

[root@server ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0               isize=512    agcount=16, agsize=654720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=10475520, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=5120, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@server ~]# mount /dev/md0 /data/raid0

卸载raid0阵列:

[root@server ~]# umount /dev/md0
[root@server ~]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
[root@server ~]# mdadm --zero-superblock /dev/sd{b,c}

RAID 1

RAID 1指数据被同时写入两块(或更多)磁盘,形成镜像

[root@server ~]# mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/sd{b,c}
mdadm: partition table exists on /dev/sdb
mdadm: partition table exists on /dev/sdb 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
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
# 警告信息代表 /dev/sdb 上存在分区表,创建 RAID 后原有分区表将失效;两个磁盘上的所有现有数据都将被清除
[root@server ~]# mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Mon Nov 17 17:18:56 2025
        Raid Level : raid1
        Array Size : 20954112 (19.98 GiB 21.46 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Nov 17 17:20:42 2025
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : server.gc.cloud:1  (local to host server.gc.cloud)
              UUID : 0cfed40e:fe8e204a:3ca4ec36:9da2a510
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

格式化与raid0相同,raid1不限于两块磁盘,可以随时添加热备盘;但添加的热备盘初始状态为备用,需要使用–grow扩容才能进入工作状态

[root@server ~]# mkfs.xfs /dev/md1
mkfs.xfs: /dev/md1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
# 表示已有xfs文件系统,可以使用-f选项强制执行
[root@server ~]# mount /dev/md1 /data/raid1
[root@server ~]# mdadm /dev/md1 --add /dev/sdd
mdadm: added /dev/sdd

raid1阵列可以容忍任一磁盘损坏,可以使用fail命令模拟故障:

[root@server ~]# mdadm /dev/md1 --fail /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md1
[root@server ~]# mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Mon Nov 17 17:18:56 2025
        Raid Level : raid1
        Array Size : 20954112 (19.98 GiB 21.46 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Nov 17 19:32:01 2025
             State : clean, degraded 
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 1
     Spare Devices : 0

Consistency Policy : resync

              Name : server.gc.cloud:1  (local to host server.gc.cloud)
              UUID : 0cfed40e:fe8e204a:3ca4ec36:9da2a510
            Events : 19

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       32        1      active sync   /dev/sdc
       2       8       48        1      spare rebuilding   /dev/sdd

       0       8       16        -      faulty   /dev/sdb

当raid1阵列中的任一磁盘发生损坏时,备用磁盘会立刻顶替损坏磁盘以保证阵列正常运转

RAID 5

数据被条带化分布在所有磁盘上,同时每个条带集计算出一个奇偶校验块奇偶校验块均匀地分布在不同磁盘上,而不是固定在一个盘,这是为了防止单一磁盘被反复擦写而降低使用寿命。

RAID 5阵列至少需要4块磁盘:

[root@server ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sdd               8:48   0   20G  0 disk 
sde               8:64   0   20G  0 disk 
sr0              11:0    1  4.4G  0 rom  
[root@server ~]# mdadm --create /dev/md5 --level 5 --raid-devices 4 /dev/sd{b,c,d,e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
[root@server ~]# mdadm --detail /dev/md5
/dev/md5:
           Version : 1.2
     Creation Time : Mon Nov 17 20:24:31 2025
        Raid Level : raid5
        Array Size : 62862336 (59.95 GiB 64.37 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Mon Nov 17 20:26:17 2025
             State : clean 
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : server.gc.cloud:5  (local to host server.gc.cloud)
              UUID : a16c1bbe:81157277:0b045a79:c40cb070
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
       4       8       64        3      active sync   /dev/sde

格式化并挂靠文件夹:

[root@server ~]# mkfs.xfs -f /dev/md5
meta-data=/dev/md5               isize=512    agcount=16, agsize=982144 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=15714304, imaxpct=25
         =                       sunit=128    swidth=384 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=7680, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@server ~]# mount /dev/md5 /data/raid5

raid5阵列只能扩容,不能减容;且阵列只有在正常状态下,才能扩容

[root@server ~]# mdadm /dev/md5 --add /dev/sdf
[root@server ~]# mdadm --grow /dev/md5 --raid-devices 5
# 扩展文件系统
[root@server ~]# xfs_growfs /data/raid5
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值