Linux RAID 存储技术
环境准备
vm虚拟机添加6块SATA硬盘,sdb sdc sdd sde sdf sdg
管理 RAID0
创建 RAID
#安装mdadm这个工具,它是用来管理 RAID 磁盘阵列的(就像专门用来组装和管理多个硬盘组合的工具)。-y表示自动确认安装,不用手动输入 yes。[root@server ~ 09:20:56]# yum install -y mdadm#用两块硬盘创建一个 RAID0 阵列:-C /dev/md0:创建一个名为/dev/md0的 RAID 设备--level 0:指定 RAID 级别为 0(把数据拆分到多块硬盘,追求速度)-n 2:使用 2 块硬盘/dev/sd{b,c}:具体用到的硬盘是sdb和sdc(相当于把这两块硬盘合并成一个 "超级硬盘")[root@server ~ 09:28:25]# mdadm -C /dev/md0 --level 0 -n 2 /dev/sd{b,c}[root@server ~ 09:33:46]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 52G 0 part ├─centos-root 253:0 0 50G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP]sdb 8:16 0 20G 0 disk └─md0 9:0 0 40G 0 raid0 sdc 8:32 0 20G 0 disk └─md0 9:0 0 40G 0 raid0 sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk ...... #查看刚才创建的md0这个 RAID 阵列的详细信息(比如状态、使用的硬盘、容量等)。[root@server ~ 09:34:01]# mdadm --detail /dev/md0#专门查看md0这个 RAID 设备的信息(确认它存在且容量正确)[root@server ~ 09:34:53]# lsblk /dev/md0NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTmd0 9:0 0 40G 0 raid0
格式化和挂载
[root@centos7 ~]# mkfs.xfs /dev/md0#-p级联创建[root@server ~ 09:37:52]# mkdir -p /data/raid0#/dev/md0 是你创建的 RAID0 阵列(由两块硬盘组合成的 "虚拟硬盘"),它是实际存储数据的地方。#/data/raid0 是一个普通的文件夹(叫 "挂载点"),相当于这个 RAID0 阵列的 "入口"。[root@server ~ 09:38:19]# mount /dev/md0 /data/raid0[root@server ~ 09:38:52]# df -h /data/raid0文件系统 容量 已用 可用 已用% 挂载点/dev/md0 40G 33M 40G 1% /data/raid0#查看挂载情况[root@server ~ 09:38:59]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 52G 0 part ├─centos-root 253:0 0 50G 0 lvm /└─centos-swap 253:1 0 2G 0 lvm [SWAP]sdb 8:16 0 20G 0 disk └─md0 9:0 0 40G 0 raid0 /data/raid0sdc 8:32 0 20G 0 disk └─md0 9:0 0 40G 0 raid0 /data/raid0#测试查看[root@server ~ 09:39:20]# cp /etc/ho* /data/raid0[root@server ~ 09:40:13]# ls /data/raid0/host.conf hostname hosts hosts.allow hosts.deny
删除 RAID
#取消挂载[root@server ~ 09:40:18]# umount /dev/md0#停止md0这个 RAID 阵列(相当于把 "超级硬盘" 拆开)[root@server ~ 09:40:56]# mdadm --stop /dev/md0mdadm: stopped /dev/md0#清除sdb和sdc上的 RAID 信息(相当于擦掉硬盘上 "属于 RAID" 的标记,让它们变回普通硬盘)[root@server ~ 09:41:10]# mdadm --zero-superblock /dev/sd{b,c}[root@server ~ 09:41:21]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 52G 0 part ├─centos-root 253:0 0 50G 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
管理 RAID1
创建 RAID
# 创建一个包含2个块设备的raid1设备/dev/md1[root@server ~ 10:03:29]# mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/sd{b,c}......sdb 8:16 0 20G 0 disk └─md1 9:1 0 20G 0 raid1 sdc 8:32 0 20G 0 disk └─md1 9:1 0 20G 0 raid1 ......#查看详细信息[root@server ~ 10:03:58]# mdadm --detail /dev/md1/dev/md1:Version : 1.2Creation Time : Mon Aug 4 10:03:55 2025Raid Level : raid1......Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb1 8 32 1 active sync /dev/sdc
格式化和挂载
[root@server ~ 10:11:13]# mkfs.xfs /dev/md1 -f[root@server ~ 10:11:40]# mkdir /data/raid1[root@server ~ 10:11:52]# mount /dev/md1 /data/raid1[root@server ~ 10:12:20]# df -h /data/raid1文件系统 容量 已用 可用 已用% 挂载点/dev/md1 20G 33M 20G 1% /data/raid1[root@server ~ 10:12:33]# cp /etc/ho* /data/raid1[root@server ~ 10:12:49]# ls /data/raid1/host.conf hostname hosts hosts.allow hosts.deny
增加热备盘
#给 RAID1 设备/dev/md1加一个 "备胎" 硬盘/dev/sdd[root@server ~ 10:13:06]# mdadm /dev/md1 --add /dev/sddmdadm: added /dev/sdd[root@server ~ 10:14:12]# mdadm --detail /dev/md1 |tail -5Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb1 8 32 1 active sync /dev/sdc2 8 48 - spare /dev/sdd# /dev/sdd的状态为spare(备用)
模拟故障测试热备盘
#手动让/dev/sdc这个硬盘 "故障" --fail[root@server ~ 10:14:20]# mdadm /dev/md1 --fail /dev/sdcmdadm: set /dev/sdc faulty in /dev/md1[root@server ~ 10:15:06]# mdadm --detail /dev/md1 |tail -5Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb2 8 48 1 spare rebuilding /dev/sdd1 8 32 - faulty /dev/sdc#正常访问[root@server ~ 10:15:11]# ls /data/raid1/host.conf hostname hosts hosts.allow hosts.deny[root@server ~ 10:15:27]# cat /data/raid1/hostname server.lyk.cloud
删除故障磁盘
#把已经故障的/dev/sdc从 RAID1 里移除 --remove[root@server ~ 10:15:32]# mdadm /dev/md1 --remove /dev/sdcmdadm: hot removed /dev/sdc from /dev/md1[root@server ~ 10:16:10]# mdadm --detail /dev/md1 |tail -5Events : 34Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb2 8 48 1 spare rebuilding /dev/sdd
删除 RAID
#先取消/dev/md1和/data/raid1的关联 [root@server ~ 10:16:19]# umount /dev/md1#停止/dev/md1这个 RAID1 设备的运行(相当于关闭 RAID 功能) [root@server ~ 10:17:28]# mdadm --stop /dev/md1 mdadm: stopped /dev/md1#清空/dev/sdb、/dev/sdc、/dev/sdd这三个硬盘里关于 RAID 的配置信息(相当于 "格式化"RAID 标识,以后这些硬盘可以重新用了) [root@server ~ 10:17:44]# mdadm --zero-superblock /dev/sd{b..d}
管理 RAID5
创建 RAID
# 创建一个包含4个块设备的raid5设备/dev/md2 [root@server ~ 10:28:59]# mdadm --create /dev/md5 --level 5 --raid-devices 4 /dev/sd{b..e} mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md5 started.
查看 RAID
[root@server ~ 10:35:35]# mdadm --detail /dev/md5 .......Rebuild Status : 5% complete#查看同步进度,没同步完设置故障就相当坏两个Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb1 8 32 1 active sync /dev/sdc2 8 48 2 active sync /dev/sdd4 8 64 3 spare rebuilding /dev/sde
格式化和挂载
[root@server ~ 10:46:18]# mkfs.xfs /dev/md5 -f [root@server ~ 10:46:21]# mkdir /data/raid5 [root@server ~ 10:46:43]# mount /dev/md5 /data/raid5 [root@server ~ 10:46:51]# df -h /data/raid5/ 文件系统 容量 已用 可用 已用% 挂载点 /dev/md5 60G 33M 60G 1% /data/raid5 #验证查看 [root@server ~ 10:47:01]# cp /etc/ho* /data/raid5 [root@server ~ 10:47:26]# ls /data/raid5/ host.conf hostname hosts hosts.allow hosts.deny
增加热备盘
[root@server ~ 10:47:33]# mdadm /dev/md5 --add /dev/sdf mdadm: added /dev/sdf [root@server ~ 10:48:44]# mdadm -D /dev/md5 |tail -7Number Major Minor RaidDevice State0 8 16 0 active sync /dev/sdb1 8 32 1 active sync /dev/sdc2 8 48 2 active sync /dev/sdd4 8 64 3 active sync /dev/sde5 8 80 - spare /dev/sdf
模拟故障
[root@server ~ 10:50:55]# mdadm /dev/md5 --fail /dev/sdb mdadm: set /dev/sdb faulty in /dev/md5[root@server ~ 10:51:04]# mdadm -D /dev/md5 |tail -7Number Major Minor RaidDevice State5 8 80 0 spare rebuilding /dev/sdf1 8 32 1 active sync /dev/sdc2 8 48 2 active sync /dev/sdd4 8 64 3 active sync /dev/sde0 8 16 - faulty /dev/sdb #验证查看依然正常 [root@server ~ 10:51:12]# ls /data/raid5/ host.conf hostname hosts hosts.allow hosts.deny [root@server ~ 10:52:08]# cat /data/raid5/hostname server.lyk.cloud
删除故障磁盘
[root@server ~ 10:52:12]# mdadm /dev/md5 --remove /dev/sdb mdadm: hot removed /dev/sdb from /dev/md5[root@server ~ 10:52:47]# mdadm --detail /dev/md5 |tail -7Events : 42Number Major Minor RaidDevice State5 8 80 0 active sync /dev/sdf1 8 32 1 active sync /dev/sdc2 8 48 2 active sync /dev/sdd4 8 64 3 active sync /dev/sde
扩容 RAID(RAID5可以)
对于raid5,只能扩容,不能减容。
注意:阵列只有在正常状态下,才能扩容,降级及重构时不允许扩容。
[root@server ~ 10:52:52]# mdadm /dev/md5 --add /dev/sdb /dev/sdg mdadm: added /dev/sdb mdadm: added /dev/sdg [root@server ~ 10:53:40]# mdadm --detail /dev/md5 |tail -8Number Major Minor RaidDevice State5 8 80 0 active sync /dev/sdf1 8 32 1 active sync /dev/sdc2 8 48 2 active sync /dev/sdd4 8 64 3 active sync /dev/sde6 8 16 - spare /dev/sdb7 8 96 - spare /dev/sdg# 设置成员数量为5,-G是grow(扩展) [root@server ~ 10:53:47]# mdadm -G /dev/md5 --raid-devices 5# 等待重组完成 [root@server ~ 10:55:02]# mdadm --detail /dev/md5 ......Reshape Status : 8% completeDelta Devices : 1, (4->5) ...... # 确认 raid 容量:增加了20G [root@server ~ 10:55:10]# lsblk /dev/md5 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT md5 9:5 0 80G 0 raid5 /data/raid5# 扩展文件系统 [root@server ~ 10:56:59]# xfs_growfs /data/raid5 meta-data=/dev/md5 isize=512 agcount=16, agsize=982144 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=0 spinodes=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 bsize=4096 blocks=7680, version=2= sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 15714304 to 20954112 [root@server ~ 10:57:21]# df -h /data/raid5/ 文件系统 容量 已用 可用 已用% 挂载点 /dev/md5 80G 34M 80G 1% /data/raid5
删除 RAID
[root@server ~ 10:57:29]# umount /dev/md5 [root@server ~ 10:58:04]# mdadm --stop /dev/md5 mdadm: stopped /dev/md5 [root@server ~ 10:59:29]# mdadm --zero-superblock /dev/sd{b..g}