服务器LVM磁盘内部空闲空间无损扩容+挂载原理+MySQL Binlog自动清理完整实操

一、场景背景

服务器配置: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. 四层概念一定要分清

  1. 物理磁盘 :/dev/vda 硬件裸盘
  2. 磁盘分区 :/dev/vda1 /dev/vda2 /dev/vda3,把裸盘切分区块
  3. LVM卷组VG :把多个分区/磁盘打包成一个大资源池 centos
  4. LVM逻辑卷LV :从资源池划空间出来,比如 centos-home
  5. 文件系统: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

按顺序依次输入:

  1. n 新建分区
  2. p 主分区
  3. 起始扇区、结束扇区 全部默认回车,吃满剩余所有空闲空间
  4. t 修改分区类型
  5. 输入分区编号(默认3)
  6. 输入 8e 设置为LVM类型
  7. 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天前日志,永不撑爆磁盘。

五、关键知识点总结

  1. 磁盘空间四层结构:裸盘→分区→LVM卷组→逻辑卷→文件系统
  2. LVM扩容分两步:扩逻辑卷 + 扩文件系统,缺一不可
  3. xfs_growfs 适配xfs格式,resize2fs 适配ext4格式
  4. 扩容后不用改 /etc/fstab,LVM原有挂载配置自动生效
  5. MySQL磁盘爆满首选:清理binlog + 配置自动7天过期,从根源避免再次占满
  6. 所谓"还要挂载",本质是刷新文件系统让内核识别新容量,不是重新挂载目录。
相关推荐
Huangjin007_6 小时前
【Linux 系统篇(二十五)】文件(二) 系统文件I/O详解
linux·运维·服务器
微小冷6 小时前
Mermaid画甘特图
运维·markdown·甘特图·mermaid·时间图
LBL12208 小时前
内网容器部署FTP日志监控服务
运维·服务器·容器
志栋智能8 小时前
超自动化巡检:驱动持续改进的运维飞轮
运维·自动化
海宇大数据8 小时前
零信任架构实战:基于海宇学历核验版构建自动化风控审查网关
运维·人工智能·架构·自动化
NailiConveyor8 小时前
输送机系统与WMS仓储管理系统集成的5个关键技术点
大数据·运维·自动化·制造·业界资讯
本人手速666+8 小时前
企微开发API如何设计客户冻结状态?WeComApi 在删除、投诉和异常客户场景中的自动化边界
运维·分布式·自动化·企业微信·企微外部群开发·wecomapi·企业微信二次开发
一只专注api接口开发的技术猿8 小时前
告别手工复制粘贴:搭建电商商品自动化监控与数据分析实践
大数据·运维·数据挖掘·数据分析·自动化
数据库小学妹8 小时前
MySQL大表怎么优化?2亿行表的分区归档与冷热分离实战
数据库·mysql·分库分表·分区表·数据库运维·冷热分离
资深技术分享员8 小时前
Geejing WebBuilder 日志、在线用户、系统监控,出问题时的三个第一现场
java·运维·数据库