服务器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. 所谓"还要挂载",本质是刷新文件系统让内核识别新容量,不是重新挂载目录。
相关推荐
ao-weilai13 分钟前
Linux基础:Ext系列文件系统
linux·运维·服务器
GlobalSign数字证书3 小时前
小企业零运维 TLS 架构设计:证书生命周期管理(CLM)与自动化轮换策略的技术选型
运维·自动化
01_ice4 小时前
MySQL库和表的操作
数据库·mysql
艾伦_耶格宇5 小时前
【ELK】-4 logstash的搭建及操作
linux·运维·ubuntu·elk
mifengxing5 小时前
文件逻辑结构、物理结构与磁盘空闲存储空间管理
大数据·linux·运维·操作系统·计算机408
听你说325 小时前
智亮苍南・绿动未来!中节能晶和科技打造浙南县域智慧照明示范样板
大数据·运维·人工智能·科技
这个DBA有点耶6 小时前
从库延迟的“二次放大”效应:一次大事务,拖垮整个读写分离
数据库·mysql·架构
一个有温度的技术博主6 小时前
MySQL 三大日志协同机制:redo log、undo log 与 binlog 的联合运作
数据库·mysql·oracle
小此方7 小时前
Re:Linux系统篇(五十七)线程篇 · 十:基于环形缓冲的生产者消费者模型与信号量
linux·运维·驱动开发