CentOS7 下 RAID 阵列管理与 LVM 逻辑卷调优实战
1.RAID 存储
1.1RAID 概念
RAID,即廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks)。
大容量磁盘价格高昂,RAID的核心思路是将多块容量小、成本低的磁盘组合成大容量、高性能和可靠性的大容量磁盘。
随着磁盘成本大幅下降,“廉价”概念失去意义,RAID咨询委员会(RAID Advisory Board, RAB)将“廉价(Inexpensive)”替换为“独立(Independent)”,RAID自此定义为独立磁盘冗余阵列(Redundant Array of Independent Disks)。
1.2RAID 实现方式
从技术实现维度,RAID主要分为三类,核心差异在于是否依赖专用硬件芯片:
-
软 RAID:无独立的RAID控制/处理芯片和I/O处理芯片,所有RAID功能由操作系统和CPU完成,实现成本低但效率最差。
-
硬 RAID:配备专用RAID控制/处理芯片、I/O处理芯片及阵列缓冲,不占用主机CPU资源,性能优异但硬件成本高。
-
软硬混合 RAID:具备RAID控制/处理芯片,但无独立I/O处理芯片,需CPU和驱动程序辅助完成功能,性能与成本介于软RAID和硬RAID之间。
操作系统识别到的设备是raid卡提供的设备,而不是直接管理底层硬盘。
1.3RAID 级别
RAID通过数据条带、镜像、数据校验三类核心技术实现高性能、高可靠性、容错能力和扩展性。不同技术的组合策略形成不同RAID级别,以适配不同数据应用场景。
D. A. Patterson等的论文最初定义了RAID1~RAID5,1988年后扩展出RAID0和RAID6;后续厂商推出的RAID7、RAID10/01、RAID50等无统一标准,业界公认的核心级别为RAID0~RAID5,实际应用中以RAID0、RAID1、RAID4、RAID5、RAID6、RAID10为主。
各RAID级别无高低之分,需结合业务对可用性、性能、成本的需求选择适配的级别和实现方式。

1.4RAID 实践
实验环境需在虚拟机中添加6块20G硬盘,设备名分别为sdb、sdc、sdd、sde、sdf、sdg,用于后续各类RAID阵列的创建与测试。
Linux系统中通过mdadm工具实现软RAID的创建、配置、监控与维护,以下为核心RAID级别的实操流程。
1.4.1管理 RAID 0
1 .创建 RAID 0
# 安装mdadm工具(CentOS系统) [root@centos7 ~ 10:08:40]# yum install -y mdadm # 创建RAID 0阵列:设备名/dev/md0,级别0,成员盘2块(sdb、sdc) [root@centos7 ~ 10:08:52]# mdadm --create --level=0 --raid-device=2 /dev/md0 /dev/sdb /dev/sdc mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [root@centos7 ~ 10:13:15]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 200G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 199G 0 part ├─centos-root 253:0 0 50G 0 lvm / ├─centos-swap 253:1 0 2G 0 lvm [SWAP] └─centos-home 253:2 0 147G 0 lvm /home 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 sdf 8:80 0 20G 0 disk sdg 8:96 0 20G 0 disk sr0 11:0 1 4.4G 0 rom
注释:--level指定RAID级别,--raid-devices指定成员盘数量,/dev/sd{b,c}为sdb和sdc的简写。
2 .查看 RAID 0 状态
# 查看RAID概要信息(内核态RAID状态) [root@centos7 ~ 10:13:29]# cat /proc/mdstat Personalities : [raid0] md0 : active raid0 sdc[1] sdb[0] 41908224 blocks super 1.2 512k chunks unused devices: <none> # 查看RAID设备详细信息 [root@centos7 ~ 10:25:48]# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Thu Apr 9 10:13:15 2026 Raid Level : raid0 Array Size : 41908224 (39.97 GiB 42.91 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Thu Apr 9 10:13:15 2026 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 512K Consistency Policy : none Name : centos7.wangjie.cloud:0 (local to host centos7.wangjie.cloud) UUID : 7c93829e:6b3712fe:3d4c9c79:9193ee9a Events : 0 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc
注释:核心关注Raid Level(级别)、State(状态,clean为正常)、Chunk Size(条带块大小)、成员盘状态。
# 查看RAID设备与物理盘的映射关系 [root@centos7 ~ 10:27:17]# lsblk /dev/md0 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT md0 9:0 0 40G 0 raid0 [root@centos7 ~ 10:27:30]# lsblk /dev/sdb /dev/sdc NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 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
3 .格式化与挂载 RAID 0
# 格式化RAID设备为XFS文件系统 [root@centos7 ~ 10:27:44]# 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@centos7 ~ 10:29:06]# mkdir -p /raid/raid0 # 挂载RAID设备到挂载点 [root@centos7 ~ 10:29:24]# mount /dev/md0 /raid/raid0 # 验证挂载结果 [root@centos7 ~ 10:29:42]# df -h /raid/raid0 Filesystem Size Used Avail Use% Mounted on /dev/md0 40G 33M 40G 1% /raid/raid0 # 测试数据写入 [root@centos7 ~ 10:29:53]# cp /etc/ho* /raid/raid0 [root@centos7 ~ 10:30:15]# ls /raid/raid0/ host.conf hostname hosts hosts.allow hosts.deny
4. 删除 RAID 0
# 卸载挂载点 [root@centos7 ~ 10:30:22]# umount /dev/md0 # 停止RAID阵列(销毁阵列) [root@centos7 ~ 10:32:37]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0 # 清除物理盘上的RAID超级块(恢复为普通磁盘) [root@centos7 ~ 10:32:51]# mdadm --zero-superblock /dev/sdb /dev/sdc
5 .补充说明
-
RAID 0不支持新增成员盘扩展容量:
[root@centos7 ~]# mdadm --add /dev/md0 /dev/sdd mdadm add new device failed for /dev/sdd as 2: Invalid argument
-
RAID 0不支持标记单盘故障(无冗余,单盘故障即阵列失效):
[root@centos7 ~]# mdadm --fail /dev/md0 /dev/sdc mdadm Cannot remove /dev/sdc from /dev/md0, array will be failed.
1.4.2 管理 RAID 1
1 .创建 RAID 1
# 创建RAID 1阵列:设备名/dev/md1,级别1,成员盘2块(sdb、sdc) [root@centos7 ~ 10:33:55]# mdadm --create /dev/md1 --leve 1 --raid-device 2 /dev/sdb /dev/sdc 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? yes mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started.
注释:RAID 1元数据默认存储在磁盘开头,若用于/boot分区需指定--metadata=0.90兼容老旧引导程序。
2 .查看 RAID 1 状态
[root@centos7 ~ 11:04:35]# mdadm --detail /dev/md1 /dev/md1: Version : 1.2 Creation Time : Thu Apr 9 11:04:35 2026 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 : Thu Apr 9 11:05:01 2026 State : clean, resyncing Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Consistency Policy : resync Resync Status : 25% complete Name : centos7.wangjie.cloud:1 (local to host centos7.wangjie.cloud) UUID : 9106c3ab:fbc719f2:7039321d:765b612d Events : 4 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc
注释:resyncing表示镜像数据正在同步,需等待同步完成(100%)后再进行格式化操作。
# 查看RAID与物理盘映射 [root@centos7 ~ 11:05:01]# lsblk /dev/md1 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT md1 9:1 0 20G 0 raid1 [root@centos7 ~ 11:05:16]# lsblk /dev/sdb /dev/sdc NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 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
3 .格式化与挂载 RAID 1
# 等待同步完成后,格式化RAID设备 [root@centos7 ~ 11:06:33]# mkfs.xfs -f /dev/md1 meta-data=/dev/md1 isize=512 agcount=4, agsize=1309632 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=5238528, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 # 创建挂载点 [root@centos7 ~ 11:05:52]# mkdir /raid/raid1 # 挂载设备 [root@centos7 ~ 11:06:17]# mount /dev/md1 /raid/raid1 # 验证挂载 [root@centos7 ~ 11:09:23]# df -h /raid/raid1 Filesystem Size Used Avail Use% Mounted on /dev/md1 20G 33M 20G 1% /raid/raid1 # 测试数据写入 [root@centos7 ~ 11:09:37]# cp /etc/ho* /raid/raid1 [root@centos7 ~ 11:09:58]# ls /raid/raid1 host.conf hostname hosts hosts.allow hosts.deny
4 .增加热备盘
# 为RAID 1添加热备盘sdd [root@centos7 ~ 11:10:05]# mdadm --add /dev/md1 /dev/sdd mdadm: added /dev/sdd # 查看热备盘状态(spare为备用) [root@centos7 ~ 11:10:48]# mdadm --detail /dev/md1 |tail -5 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 2 8 48 - spare /dev/sdd
5. 模拟磁盘故障
# 手动标记sdc为故障盘 [root@centos7 ~ 11:11:09]# mdadm --fail /dev/md1 /dev/sdc mdadm: set /dev/sdc faulty in /dev/md1 # 查看故障后状态(sdd自动顶替并同步) [root@centos7 ~ 11:11:45]# mdadm --detail /dev/md1 | tail -5 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 2 8 48 1 spare rebuilding /dev/sdd 1 8 32 - faulty /dev/sdc # 验证数据可正常访问 [root@centos7 ~ 11:12:03]# ls /raid/raid1/ host.conf hostname hosts hosts.allow hosts.deny [root@centos7 ~ 11:12:13]# cat /raid/raid1/hostname centos7.wangjie.cloud
6 .删除故障磁盘
# 移除故障盘sdc [root@centos7 ~ 11:12:28]# mdadm --remove /dev/md1 /dev/sdc mdadm: hot removed /dev/sdc from /dev/md1 # 验证移除结果 [root@centos7 ~ 11:14:05]# mdadm --detail /dev/md1 | tail -5 Events : 46 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 2 8 48 1 active sync /dev/sdd
7 .再次模拟故障
[root@centos7 ~ 11:14:05]# mdadm --fail /dev/md1 /dev/sdd [root@centos7 ~ 11:14:05]# mdadm -D /dev/md1|tail -5 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb - 0 0 1 removed 2 8 48 - faulty /dev/sdd [root@centos7 ~ 11:14:05]# ls /raid/raid1 host.conf hostname hosts hosts.allow hosts.deny [root@centos7 ~ 11:14:05]# echo hello raid1 > /raid/raid1/test.txt [root@centos7 ~ 11:14:05]# umount /raid/raid1 [root@centos7 ~ 11:14:05]# mount /dev/md1 /raid/raid1 [root@centos7 ~ 11:14:05]# ls /raid/raid1 host.conf hostname hosts hosts.allow hosts.deny test.txt
总结:raid1阵列中任一成员故障,不影响数据的完整性。
8.删除 RAID 1
# 卸载挂载点 [root@centos7 ~ 11:14:26]# umount /dev/md1 # 停止RAID阵列 [root@centos7 ~ 11:14:40]# mdadm --stop /dev/md1 mdadm: stopped /dev/md1 # 清除物理盘超级块 [root@centos7 ~ 11:14:52]# mdadm --zero-superblock /dev/sdb /dev/sdd
使用dd工具填充更彻底。
[root@centos7 ~ 11:14:52]# dd if=/dev/zero of=/dev/sdb bs=1M count=1024
作用:使用0填充/dev/sdb硬盘。
-
if:Input File,/dev/zero 全为0
-
of:Output File
-
bs:Block Size,每次添加多大数据流
-
count:一共填充多少个Block
9 .补充说明
RAID 1核心价值是数据冗余,而非扩容:即使新增磁盘,阵列总容量仍等于单盘容量(镜像机制),无法通过加盘提升可用空间。
1.4.3管理 RAID 5
1. 创建 RAID 5
# 创建RAID 5阵列:设备名/dev/md5,级别5,成员盘4块(sdb、sdc、sdd、sde)
[root@centos7 ~ 11:34:46]# mdadm --create /dev/md5 --leve 5 --raid-device 4 /dev/sd{b..e}
mdadm: /dev/sdc appears to be part of a raid array:
level=raid1 devices=2 ctime=Thu Apr 9 11:04:35 2026
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
注释:RAID 5最少需3块盘,此处用4块盘(1块用于分布式校验)。
2 .查看 RAID 5 状态
[root@centos7 ~ 11:35:36]# mdadm --detail /dev/md5 /dev/md5: Version : 1.2 Creation Time : Thu Apr 9 11:35:35 2026 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 : Thu Apr 9 11:35:49 2026 State : clean, degraded, recovering Active Devices : 3 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Consistency Policy : resync Rebuild Status : 15% complete Name : centos7.wangjie.cloud:5 (local to host centos7.wangjie.cloud) UUID : e2e82cd2:a232a083:d4fc883b:49ae4c09 Events : 3 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 spare rebuilding /dev/sde
注释:recovering表示阵列正在构建/同步,需等待同步完成后再格式化。
# 查看RAID与物理盘映射
[root@centos7 ~ 11:35:52]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5 9:5 0 60G 0 raid5
[root@centos7 ~ 11:36:46]# lsblk /dev/sd{b..e}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
sdc 8:32 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
sdd 8:48 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
sde 8:64 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
3 .格式化与挂载 RAID 5
# 等待阵列同步完成后,格式化设备 [root@centos7 ~ 11:37:24]# 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@centos7 ~ 11:38:17]# mkdir /raid/raid5 # 挂载设备 [root@centos7 ~ 11:38:41]# mount /dev/md5 /raid/raid5 # 验证挂载 [root@centos7 ~ 11:38:57]# df -h /raid/raid5/ Filesystem Size Used Avail Use% Mounted on /dev/md5 60G 33M 60G 1% /raid/raid5 [root@centos7 ~ 11:39:11]# cp /etc/ho*/raid/raid5 cp: missing destination file operand after ‘/etc/ho*/raid/raid5’ Try 'cp --help' for more information. # 测试数据写入 [root@centos7 ~ 11:39:35]# cp /etc/ho* /raid/raid5 [root@centos7 ~ 11:39:45]# ls /raid/raid5 host.conf hostname hosts hosts.allow hosts.deny
4 .增加热备盘
# 为RAID 5添加热备盘sdf [root@centos7 ~ 11:39:52]# mdadm --add /dev/md5 /dev/sdf mdadm: added /dev/sdf # 查看热备盘状态 [root@centos7 ~ 11:40:12]# mdadm --detail /dev/md5 | tail -7 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 5 8 80 - spare /dev/sdf
5 .模拟磁盘故障
# 标记sdb为故障盘 [root@centos7 ~ 11:40:31]# mdadm --fail /dev/md5 /dev/sdb mdadm: set /dev/sdb faulty in /dev/md5 # 查看故障后状态(sdf自动顶替并同步) [root@centos7 ~ 11:41:01]# mdadm --detail /dev/md5 | tail -7 Number Major Minor RaidDevice State 5 8 80 0 spare rebuilding /dev/sdf 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 4 8 64 3 active sync /dev/sde 0 8 16 - faulty /dev/sdb # 验证数据可正常访问 [root@centos7 ~ 11:41:20]# ls /raid/raid5/ host.conf hostname hosts hosts.allow hosts.deny [root@centos7 ~ 11:41:50]# cat /raid/raid5/hostname centos7.wangjie.cloud
6 .删除故障磁盘
# 移除故障盘sdb [root@centos7 ~ 11:42:05]# mdadm --remove /dev/md5 /dev/sdb mdadm: hot removed /dev/sdb from /dev/md5 # 验证移除结果 [root@centos7 ~ 11:42:49]# mdadm --detail /dev/md5 | tail -5 Number Major Minor RaidDevice State 5 8 80 0 active sync /dev/sdf 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 4 8 64 3 active sync /dev/sde
7 .扩容 RAID 5
注释:RAID 5仅支持扩容(增加成员盘),不支持减容;扩容仅在阵列“clean”正常状态下可执行,降级/重构时禁止。
# 新增2块盘(sdb、sdg)到RAID 5 [root@centos7 ~ 11:42:58]# mdadm --add /dev/md5 /dev/sdb /dev/sdg mdadm: added /dev/sdb mdadm: added /dev/sdg # 查看新增盘状态(spare为备用) [root@centos7 ~ 11:43:44]# mdadm --detail /dev/md5 | tail -8 Number Major Minor RaidDevice State 5 8 80 0 active sync /dev/sdf 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 4 8 64 3 active sync /dev/sde 6 8 16 - spare /dev/sdb 7 8 96 - spare /dev/sdg # 扩展阵列成员数为5(--grow为扩容参数) [root@centos7 ~ 11:44:01]# mdadm --grow /dev/md5 --raid-device 5 # 等待阵列重构完成(查看进度) [root@centos7 ~ 11:46:34]# mdadm --detail /dev/md5 |tail -7 5 8 80 0 active sync /dev/sdf 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 4 8 64 3 active sync /dev/sde 7 8 96 4 active sync /dev/sdg 6 8 16 - spare /dev/sdb # 验证RAID容量(从60G扩容至80G) [root@centos7 ~ 11:47:07]# lsblk /dev/md5 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT md5 9:5 0 80G 0 raid5 /raid/raid5 # 扩展文件系统(XFS文件系统用xfs_growfs) [root@centos7 ~ 11:47:07]# xfs_growfs /raid/raid5 [root@centos7 ~ 11:47:07]# df -h /raid/raid5/ Filesystem Size Used Avail Use% Mounted on /dev/md5 80G 604M 80G 1% /raid/raid5
8 .再次模拟磁盘故障
# 移除故障盘sdb [root@centos7 ~ 13:34:27]# mdadm --remove /dev/md5 /dev/sdb mdadm: hot removed /dev/sdb from /dev/md5 [root@centos7 ~ 13:45:01]# mdadm --fail /dev/md5 /dev/sdg mdadm: set /dev/sdg faulty in /dev/md5 [root@centos7 ~ 13:45:20]# mdadm -D /dev/md1|tail -5 mdadm: cannot open /dev/md1: No such file or directory [root@centos7 ~ 13:45:52]# mdadm -D /dev/md5|tail -5 2 8 48 2 active sync /dev/sdd 4 8 64 3 active sync /dev/sde - 0 0 4 removed 7 8 96 - faulty /dev/sdg [root@centos7 ~ 13:48:46]# ls /raid/raid5 host.conf hostname hosts hosts.allow hosts.deny [root@centos7 ~ 13:49:36]# echo hello raid5 > /raid/raid5/test.txt [root@centos7 ~ 13:49:51]# umount /raid/raid5 [root@centos7 ~ 13:49:57]# mount /dev/md5 /raid/raid5 [root@centos7 ~ 13:50:10]# ls /raid/raid5 host.conf hostname hosts hosts.allow hosts.deny test.txt
9. 删除 RAID 5
# 卸载挂载点
[root@centos7 ~ 13:50:18]# umount /dev/md5
# 停止RAID阵列
[root@centos7 ~ 13:50:44]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
# 清除物理盘超级块
[root@centos7 ~ 13:50:56]# mdadm --zero-superblock /dev/sd{b..g}
# 也可以使用dd彻底擦除:
[root@centos7 ~ 13:51:33]# for device in /dev/sd{b..g}
> do
> dd if=/dev/zero of=$device bs=1M count=1024
> done
补充:raid阵列可以进一步使用分区技术分割成多个分区,然后再格式化使用。特别是raid5这种大容量的盘。
2.LVM 存储
实验环境需在虚拟机中添加3块20G的硬盘,设备名分别为sdb、sdc、sdd,可通过以下命令查看硬盘信息:
[root@centos7 ~]# lsblk /dev/sd{b..d}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
2.1逻辑卷基本管理
1. 传统硬盘分区管理的缺点
传统硬盘分区方案在灵活性和可靠性上存在明显不足,主要体现在:
-
分区空间需占用物理连续的磁盘区域,扩容操作难度大(尤其是扩容分区后方无空闲空间时);
-
基于分区创建的文件系统无法跨多个硬盘,受单块硬盘容量限制;
-
硬盘物理损坏时,分区内的所有数据会直接丢失,无冗余保护机制。
2 .逻辑卷管理的优势
LVM 作为一种灵活的存储管理方案,弥补了传统分区的不足,核心优势包括:
-
灵活的空间调整:支持逻辑卷空间的在线扩展和缩减,无需重新规划磁盘布局;
-
跨盘存储能力:逻辑卷可整合多块硬盘的空间,轻松创建超大容量文件系统;
-
数据冗余保护:支持创建镜像卷(RAID 逻辑卷),单块硬盘损坏时数据不丢失;
-
快照功能:可创建逻辑卷快照,保留某一时刻的数据集,类似虚拟机快照,便于数据恢复。
3. LVM 核心概念
LVM 将多个磁盘/分区整合为统一的存储池,再按需划分逻辑卷使用,核心概念如下:
-
物理卷(PV, Physical Volume):LVM 的基础存储单元,由磁盘、磁盘分区或 RAID 等块设备创建,包含 LVM 专属的管理参数;
-
卷组(VG, Volume Group):由一个或多个物理卷组成的逻辑存储池,可理解为“虚拟硬盘”;
-
逻辑卷(LV, Logical Volume):从卷组中划分出的逻辑空间,可理解为“虚拟分区”,可在其上创建文件系统并挂载使用。
简单总结:卷组整合多个物理卷形成存储池,逻辑卷从卷组中划分并提供给用户使用。

4 .LVM 基本管理流程
LVM 的核心操作遵循“创建物理卷 → 创建卷组 → 创建逻辑卷”的流程,具体如下:

5 .创建物理卷(PV)
物理卷是 LVM 的基础,需先将块设备初始化为 PV 才能纳入 LVM 管理:
# 1. 创建单个物理卷
[root@centos7 ~ 14:21:46]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
# 2. 批量创建多个物理卷(sdc、sdd)
[root@centos7 ~ 14:22:04]# pvcreate /dev/sd{c..d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
# 3. 查看所有 PV 列表(简洁版)
[root@centos7 ~ 14:22:15]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.00g 4.00m
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc lvm2 --- 20.00g 20.00g
/dev/sdd lvm2 --- 20.00g 20.00g
6 .创建卷组(VG)
# 1. 创建包含单个 PV 的卷组(卷组名:webapp,关联 PV:/dev/sdb)
[root@centos7 ~ 14:22:18]# vgcreate webapp /dev/sdb
Volume group "webapp" successfully created
# 2. 创建包含多个 PV 的卷组(卷组名:dbapp,关联 PV:/dev/sdc、/dev/sdd)
[root@centos7 ~ 14:23:10]# vgcreate dbapp /dev/sd{c,d}
Volume group "dbapp" successfully created
# 3. 查看 PV 归属(验证 PV 已加入对应 VG)
[root@centos7 ~ 14:23:54]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.00g 4.00m
/dev/sdb webapp lvm2 a-- <20.00g <20.00g
/dev/sdc dbapp lvm2 a-- <20.00g <20.00g
/dev/sdd dbapp lvm2 a-- <20.00g <20.00g
# 4. 查看所有 VG 列表(简洁版)
[root@centos7 ~ 14:23:58]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- <199.00g 4.00m
dbapp 2 0 0 wz--n- 39.99g 39.99g
webapp 1 0 0 wz--n- <20.00g <20.00g
7 .创建逻辑卷(LV)
# 1. 创建单 PV 逻辑卷(卷组:webapp,LV名:webapp01,大小:5G)
[root@centos7 ~ 14:24:03]# lvcreate -n webapp01 -L 5G webapp
Logical volume "webapp01" created.
# 2. 创建跨 PV 逻辑卷(卷组:dbapp,LV名:data01,大小:25G,跨sdc、sdd)
[root@centos7 ~ 14:37:47]# lvcreate -n data01 -L 25G dbapp
Logical volume "data01" created.
# 3. 查看所有 LV 列表(简洁版)
[root@centos7 ~ 14:38:01]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home centos -wi-ao---- 146.99g
root centos -wi-ao---- 50.00g
swap centos -wi-ao---- 2.00g
data01 dbapp -wi-a----- 25.00g
webapp01 webapp -wi-a----- 5.00g
# 验证 PV 空间使用(sdc 已用完,sdd 用了5G)
[root@centos7 ~ 14:38:05]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.00g 4.00m
/dev/sdb webapp lvm2 a-- <20.00g <15.00g
/dev/sdc dbapp lvm2 a-- <20.00g 0
/dev/sdd dbapp lvm2 a-- <20.00g 14.99g
# 验证 LV 跨盘(data01 同时占用 sdc、sdd)
[root@centos7 ~ 14:38:31]# lsblk /dev/sd{b..d}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─webapp-webapp01 253:3 0 5G 0 lvm
sdc 8:32 0 20G 0 disk
└─dbapp-data01 253:4 0 25G 0 lvm
sdd 8:48 0 20G 0 disk
└─dbapp-data01 253:4 0 25G 0 lvm
8 .在逻辑卷上创建文件系统
逻辑卷创建后需格式化文件系统并挂载,才能供业务使用:
# 1. 格式化 XFS 文件系统(CentOS7 推荐) [root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01 # 2. 临时挂载逻辑卷(重启失效) [root@centos7 ~ 14:42:45]# mkdir -p /usr/share/nginx/html [root@centos7 ~ 14:43:08]# mount /dev/webapp/webapp01 /usr/share/nginx/html # 3. 持久化挂载(修改 /etc/fstab,重启生效) # 需在 /etc/fstab 中添加如下行: # /dev/webapp/webapp01 /usr/share/nginx/html xfs defaults 0 0 [root@centos7 ~ 14:40:08]# vim /etc/fstab [root@centos7 ~ 14:43:14]# df -h /usr/share/nginx/html/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/webapp-webapp01 5.0G 33M 5.0G 1% /usr/share/nginx/htm
9 .LVM 清理
如需清理 LVM 配置,需按“卸载文件系统 → 删除 LV → 删除 VG → 删除 PV”的顺序操作:
# 1. 卸载已挂载的逻辑卷
[root@centos7 ~ 14:55:55]# umount /dev/webapp/webapp01
# 2. 删除逻辑卷(需确认,输入y)
[root@centos7 ~ 14:56:17]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01
Do you really want to remove active logical volume webapp/webapp01? [y/n]: y
Logical volume "webapp01" successfully removed
Do you really want to remove active logical volume dbapp/data01? [y/n]: y
Logical volume "data01" successfully removed
# 3. 删除卷组
[root@centos7 ~ 14:56:49]# vgremove webapp dbapp
Volume group "webapp" successfully removed
Volume group "dbapp" successfully removed
# 4. 删除物理卷(清除 LVM 元数据)
[root@centos7 ~ 14:57:05]# pvremove /dev/sd{b..d}
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
Labels on physical volume "/dev/sdd" successfully wiped.
2.2卷组的扩展与缩减
卷组的容量可通过添加/移除 PV 灵活调整,满足业务存储需求变化。
1 .环境准备
先创建基础卷组和逻辑卷,用于后续扩展/缩减测试:
[root@centos7 ~ 15:08:43]# vgcreate webapp /dev/sdb
Physical volume "/dev/sdb" successfully created.
Volume group "webapp" successfully created
[root@centos7 ~ 15:09:45]# lvcreate -n webapp01 -L 10G webapp
WARNING: xfs signature detected on /dev/webapp/webapp01 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/webapp/webapp01.
Logical volume "webapp01" created.
[root@centos7 ~ 15:10:10]# vgextend webapp /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
Volume group "webapp" successfully extended
[root@centos7 ~ 15:10:28]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.00g 4.00m
/dev/sdb webapp lvm2 a-- <20.00g <10.00g
/dev/sdc webapp lvm2 a-- <20.00g <20.00g
/dev/sdd webapp lvm2 a-- <20.00g <20.00g
[root@centos7 ~ 15:10:43]# vgreduce webapp /dev/sdb
Physical volume "/dev/sdb" still in use
[root@centos7 ~ 15:11:38]# pvmove /dev/sdb /dev/sdd
/dev/sdb: Moved: 6.48%
/dev/sdb: Moved: 100.00%
^[[A^[[A^[[A^H^H^H[root@centos7 ~ 15:12:30]#
[root@centos7 ~ 15:12:30]#
[root@centos7 ~ 15:12:30]#
[root@centos7 ~ 15:12:30]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.00g 4.00m
/dev/sdb webapp lvm2 a-- <20.00g <20.00g
/dev/sdc webapp lvm2 a-- <20.00g <20.00g
/dev/sdd webapp lvm2 a-- <20.00g <10.00g
[root@centos7 ~ 15:12:36]# vgreduce webapp /dev/sdb
Removed "/dev/sdb" from volume group "webapp"
[root@centos7 ~ 15:12:41]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <199.00g 4.00m
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc webapp lvm2 a-- <20.00g <20.00g
/dev/sdd webapp lvm2 a-- <20.00g <10.00g
2.3逻辑卷的扩展与缩减
逻辑卷的容量可直接调整,需结合卷组空闲空间操作。
1 .扩展逻辑卷(LV)
卷组有空闲空间时,可直接扩展 LV 容量:
# 给 webapp01 增加 2G 空间(总容量变为 12G) [root@centos7 ~ 15:12:45]# lvextend -L +2G /dev/webapp/webapp01 Size of logical volume webapp/webapp01 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents). Logical volume webapp/webapp01 successfully resized. # 给 webapp01 的空间设置为15G [root@centos7 ~ 15:14:00]# lvextend -L 15G /dev/webapp/webapp01 Size of logical volume webapp/webapp01 changed from 12.00 GiB (3072 extents) to 15.00 GiB (3840 extents). Logical volume webapp/webapp01 successfully resized. [root@centos7 ~ 15:14:18]# lvs /dev/webapp/webapp01 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-a----- 15.00g
2 .缩减逻辑卷(LV)
逻辑卷空间充足时,可缩减容量(注意:缩减有数据丢失风险,需谨慎):
# 给 webapp01 减少 2G 空间(总容量变回 10G) [root@centos7 ~ 15:14:32]# lvreduce -L -2G /dev/webapp/webapp01 WARNING: Reducing active logical volume to 13.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce webapp/webapp01? [y/n]: y Size of logical volume webapp/webapp01 changed from 15.00 GiB (3840 extents) to 13.00 GiB (3328 extents). Logical volume webapp/webapp01 successfully resized. # 验证 LV 大小 [root@centos7 ~ 15:15:35]# lvs /dev/webapp/webapp01 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-a----- 13.00g
2.4文件系统的扩展与缩减
LV 容量调整后,需同步调整文件系统大小,否则无法使用新增空间(或缩减后空间异常)。
2.4.1扩展 XFS 文件系统
XFS 是 CentOS7 默认文件系统,仅支持扩展,不支持缩减,步骤如下:
1.环境准备
# 1. 格式化 LV 为 XFS [root@centos7 ~ 15:20:28]# mkfs.xfs /dev/webapp/webapp01 meta-data=/dev/webapp/webapp01 isize=512 agcount=4, agsize=851968 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=3407872, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 # 2. 创建挂载点并挂载 [root@centos7 ~ 15:45:19]# mkdir /usr/share/nginx/html mkdir: cannot create directory ‘/usr/share/nginx/html’: File exists [root@centos7 ~ 15:46:06]# mount /dev/webapp/webapp01 /usr/share/nginx/html # 3. 写入测试数据 [root@centos7 ~ 15:46:32]# cp /etc/host* /usr/share/nginx/html [root@centos7 ~ 15:46:56]# ls /usr/share/nginx/html host.conf hostname hosts hosts.allow hosts.deny
2.扩展操作
# 第一步:扩展 LV 到 15G [root@centos7 ~ 15:47:09]# lvextend -L 15G /dev/webapp/webapp01 Size of logical volume webapp/webapp01 changed from 13.00 GiB (3328 extents) to 15.00 GiB (3840 extents). Logical volume webapp/webapp01 successfully resized. [root@centos7 ~ 15:47:44]# lvs /dev/webapp/webapp01 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao---- 15.00g # 第二步:扩展 XFS 文件系统(指定挂载点) [root@centos7 ~ 15:47:57]# xfs_growfs /usr/share/nginx/html meta-data=/dev/mapper/webapp-webapp01 isize=512 agcount=4, agsize=851968 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=3407872, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 3407872 to 3932160 # 验证文件系统大小(已扩展到15G,数据未丢失) [root@centos7 ~ 15:48:20]# df -h /usr/share/nginx/html Filesystem Size Used Avail Use% Mounted on /dev/mapper/webapp-webapp01 15G 33M 15G 1% /usr/share/nginx/html [root@centos7 ~ 15:48:41]# ls /usr/share/nginx/html host.conf hostname hosts hosts.allow hosts.deny # 快捷方式:LV + 文件系统一键扩展(-r 参数自动调用 xfs_growfs) [root@centos7 ~ 15:49:30]# lvextend -rL 20G /dev/webapp/webapp01 Size of logical volume webapp/webapp01 changed from 15.00 GiB (3840 extents) to 20.00 GiB (5120 extents). Logical volume webapp/webapp01 successfully resized. meta-data=/dev/mapper/webapp-webapp01 isize=512 agcount=5, agsize=851968 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=3932160, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 3932160 to 5242880 # 验证最终大小(20G) [root@centos7 ~ 15:49:46]# lvs /dev/webapp/webapp01 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao---- 20.00g [root@centos7 ~ 15:49:56]# df -h /usr/share/nginx/html Filesystem Size Used Avail Use% Mounted on /dev/mapper/webapp-webapp01 20G 33M 20G 1% /usr/share/nginx/html
2.4.2逻辑卷快照
-
LVM 快照可保留逻辑卷某一时刻的完整数据,用于数据备份或恢复,核心特性:快照容量需不小于原 LV 容量(避免数据溢出)。
# 1. 创建快照(-s 表示快照,-n 快照名,-L 快照大小,指定原 LV) [root@centos7 ~ 16:01:19]# lvcreate -s -n webapp01-snap -L 10G /dev/webapp/webapp01 Logical volume "webapp01-snap" created. # 2. 挂载快照(查看快照中的数据) # 快照的文件系统和原先逻辑卷的文件系统的uuid是一致的。 默认情况下,快照和原卷同一时刻只能挂载一个。 # 一定要挂载,则需要修改uuid [root@centos7 ~ 16:12:28]# uuidgen d4642940-c3b1-4977-8e7c-8092bfa71669 # 2-1. 修改xfs文件系统uuid命令使用xfs_admin [root@centos7 ~ 16:18:51]# xfs_admin -U d4642940-c3b1-4977-8e7c-8092bfa71669 /dev/webapp/webapp01-snap Clearing log and setting UUID writing all SBs new UUID = d4642940-c3b1-4977-8e7c-8092bfa71669 # 2-2. 修改ext4文件系统uuid命令使用tune2fs [root@centos7 ~ 16:18:51]# tune2fs -U bcb510b4-6e18-4b47-849f-c0b4f79dcc33 /dev/webapp/webapp01-snap # 挂载测试 [root@centos7 ~ 16:20:00]# mkdir -p /webapp/webapp01-snap [root@centos7 ~ 16:21:49]# mount /dev/webapp/webapp01-snap /webapp/webapp01-snap # 3. 验证快照数据(与原 LV 一致) [root@centos7 ~ 16:22:13]# ls /webapp/webapp01-snap host.conf hostname hosts hosts.allow hosts.deny # 4. 在快照 LV 中写入新数据(验证快照独立性) [root@centos7 ~ 16:22:20]# echo hello world > /webapp/webapp01-snap/hello.txt [root@centos7 ~ 16:22:53]# cat /webapp/webapp01-snap/hello.txt hello world
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)