1. 当服务器根分区告急时你该怎么办最近接手了一台运行了3年的CentOS服务器刚登录就发现系统弹出了磁盘空间不足的警告。df -h一看好家伙根分区/已经用了98%而/home分区却还有70%的剩余空间。这种情况在长期运行的服务器上太常见了日志文件不断堆积、Docker容器占用空间、临时文件无人清理...系统随时可能因为磁盘写满而崩溃。这时候很多新手运维会手忙脚乱地删除文件但这不是长久之计。作为一个有10年经验的系统管理员我强烈推荐使用LVMLogical Volume Manager来动态调整分区空间。LVM就像是给硬盘装上了变形金刚的能力可以随时调整分区大小而不用像传统分区那样需要备份数据、重新分区、恢复数据这么麻烦。2. LVM基础理解这个空间魔术师2.1 LVM的三大核心组件LVM的工作原理可以用一个仓库来比喻PVPhysical Volume就像仓库里的货架对应实际的硬盘或分区VGVolume Group把多个货架组合成一个大仓库LVLogical Volume从大仓库中划分出来的具体储物区域在CentOS安装时如果选择了LVM分区方式强烈推荐系统通常会创建这样的结构sda物理硬盘 ├─sda1boot分区 └─sda2LVM物理卷 ├─centos-root根分区逻辑卷 └─centos-homehome分区逻辑卷2.2 为什么LVM是运维必备技能我管理过上百台服务器最深刻的体会就是没有用LVM的服务器扩容时都是在玩俄罗斯轮盘赌。传统分区调整需要停机而LVM可以在线调整分区大小跨硬盘合并空间创建快照备份动态迁移数据3. 实战从/home借空间给根分区3.1 安全检查操作前的必备步骤重要提示任何磁盘操作都有风险请先做好备份我曾在一次操作中因为漏掉一个步骤导致数据丢失那个不眠之夜让我养成了三重检查的习惯。确认分区类型lsblk -f看到有LVM标记的就是我们要操作的对象。检查文件系统类型df -ThCentOS 7默认使用XFS这与ext4的调整方式不同。确认VG有足够空间vgdisplay重点看Free PE / Size这一行。3.2 详细操作步骤假设我们的VG名为centos现在要把/home的20GB空间给/分区卸载/home如果有程序在使用需要先停止umount /home检查文件系统ext4用这个e2fsck -f /dev/centos/home调整逻辑卷大小关键步骤lvreduce -L -20G -r /dev/centos/home这里的-r参数会同时调整文件系统大小避免后续步骤出错。检查调整后的空间lvdisplay /dev/centos/home扩展根分区lvextend -L 20G -r /dev/centos/root对于XFS文件系统CentOS 7默认xfs_growfs /这个命令可以在线扩展不需要卸载分区。重新挂载/homemount /home4. 那些年我踩过的坑与解决方案4.1 空间计算错误导致的数据丢失有一次我算错了空间执行lvreduce时指定的大小比实际数据还小结果...你懂的。现在我的操作铁律是先用df -h查看已用空间预留至少10%的buffer执行前用-n参数模拟操作4.2 XFS文件系统的特殊注意事项XFS只能扩容不能缩容如果/home是XFS格式必须备份/home数据创建新的更小的XFS分区恢复数据删除旧分区4.3 当lvreduce报错时怎么办常见错误Filesystem too small通常是因为没加-r参数没先执行文件系统检查指定的大小小于已用空间5. 高级技巧不卸载/home调整空间对于不能卸载/home的生产环境可以创建临时挂载点mkdir /mnt/temphome挂载home到临时位置mount /dev/centos/home /mnt/temphome修改fstab中/home的挂载点重启后操作原home分区这个方法虽然复杂但在某些7×24小时运行的关键业务系统上是唯一选择。记得操作前一定要通知所有用户保存工作6. 自动化监控与预防措施与其等到空间耗尽才处理不如提前预防。我的方案是每天定时检查磁盘空间的脚本#!/bin/bash THRESHOLD90 df -h | awk {gsub(/%/,); if($5 THRESHOLD $6 ~ /^\/$/) print 警报根分区使用率$5%} | mail -s 磁盘空间警报 adminexample.com日志轮转配置/etc/logrotate.confweekly rotate 8 compress定期清理Docker无用数据docker system prune -f这些经验都是从血泪教训中总结出来的。记住在服务器运维中预防永远比抢救更重要。LVM给了我们调整的空间但合理的规划和使用习惯才是根本解决方案。