一、场景背景
服务器配置:CentOS 7 + LVM 架构
磁盘单块 /dev/vda 总大小 600G
分区结构:
/dev/vda1:1G 挂载/boot/dev/vda2:499G 划入 LVM 卷组centos- 剩余约101G 空闲未分区、未分配、未使用
LVM逻辑卷分布:
centos-root:50G 挂载/centos-swap:7.9G 交换分区centos-home:441G 挂载/home
故障现象:
/home 被MySQL的binlog日志占满 100%,MySQL启动报错:
OS errno 28 - No space left on device
启动瞬间直接崩溃退出。
二、核心疑问解答:已经扩容了,为什么还要做挂载/文件系统刷新?
很多人疑惑:我已经把磁盘空间分给LVM了,为什么df -h看不到空间?
1. 四层概念一定要分清
- 物理磁盘 :
/dev/vda硬件裸盘 - 磁盘分区 :
/dev/vda1 /dev/vda2 /dev/vda3,把裸盘切分区块 - LVM卷组VG :把多个分区/磁盘打包成一个大资源池
centos - LVM逻辑卷LV :从资源池划空间出来,比如
centos-home - 文件系统:xfs/ext4,真正能存文件、被系统识别占用、挂载到目录
2. 扩容每一步到底干了什么
- 新建分区vda3:把磁盘闲置101G划出一个合法分区
- pvcreate:把分区标记为LVM物理卷,能被卷组识别
- vgextend:把新分区加入centos资源池,卷组空闲空间变多
- lvextend:从资源池拿空间分给
/home逻辑卷,逻辑卷容量变大 - xfs_growfs /home :关键!把逻辑卷新增空间,刷新给文件系统,系统df -h才能识别到可用空间
3. 为什么扩容完必须"刷新文件系统/相当于重新挂载生效"
- LVM扩容只是底层块设备变大
- 但上层文件系统还停留在旧容量,系统内核不认新空间
xfs_growfs/resize2fs就是在线扩容文件系统,让挂载点实时识别新空间- 不用重启、不用卸载目录,业务不中断
一句话总结:
扩LVM只是把"仓库变大",刷新文件系统才是把"货架摆好",系统才能真正用上空间。
三、完整实操:把vda闲置101G无损扩给/home(在线不重启、不丢数据)
步骤1:新建空闲分区 /dev/vda3
bash
fdisk /dev/vda
按顺序依次输入:
n新建分区p主分区- 起始扇区、结束扇区 全部默认回车,吃满剩余所有空闲空间
t修改分区类型- 输入分区编号(默认3)
- 输入
8e设置为LVM类型 w保存分区表退出
步骤2:刷新分区表,无需重启
bash
partprobe
执行 lsblk 能看到多出 /dev/vda3 约101G。
步骤3:初始化物理卷PV
bash
pvcreate /dev/vda3
步骤4:把新分区加入centos卷组
bash
vgextend centos /dev/vda3
执行 vgs 可看到VG空闲空间大幅增加。
步骤5:把所有空闲空间全部分配给home逻辑卷
bash
lvextend -l +100%FREE /dev/mapper/centos-home
步骤6:在线刷新xfs文件系统(你系统默认xfs)
bash
xfs_growfs /home
步骤7:验证扩容结果
bash
df -h
此时 /home 容量增加100G左右,使用率下降。
四、MySQL爆满后续处理:配置Binlog自动保留7天
1. 先清理爆满的旧Binlog,立刻释放空间
bash
cd /home/mysql1/data
rm -f binlog.*
2. 编辑MySQL配置 my.cnf
bash
vi /etc/my.cnf
在 [mysqld] 节点添加:
ini
# 自动清理7天前binlog
expire_logs_days = 7
binlog_expire_logs_seconds = 604800
604800秒 = 7天,MySQL8.0双配置兜底,永久生效。
3. 启动MySQL
bash
cd /usr/local/mysql/bin
./mysqld_safe --user=mysql &
4. 验证binlog过期配置
登录MySQL执行:
sql
show variables like '%expire%';
看到两个7天相关参数即配置成功,以后自动清理7天前日志,永不撑爆磁盘。
五、关键知识点总结
- 磁盘空间四层结构:裸盘→分区→LVM卷组→逻辑卷→文件系统
- LVM扩容分两步:扩逻辑卷 + 扩文件系统,缺一不可
xfs_growfs适配xfs格式,resize2fs适配ext4格式- 扩容后不用改
/etc/fstab,LVM原有挂载配置自动生效 - MySQL磁盘爆满首选:清理binlog + 配置自动7天过期,从根源避免再次占满
- 所谓"还要挂载",本质是刷新文件系统让内核识别新容量,不是重新挂载目录。