CentOS 7 系统某分区使用率接近100%解决方案 #
问题概述 #
当 CentOS 7 系统中的 /dev/mapper/centos-root
分区使用率接近 100% 时的解决方案。
问题诊断 #
1. 检查磁盘使用情况 #
# 查看所有挂载点的磁盘使用情况
df -h
# 查看指定目录的磁盘使用情况
df -h /
2. 检查 LVM 状态 #
# 查看卷组信息
sudo vgdisplay
# 查看逻辑卷信息
sudo lvdisplay
# 查看物理卷信息
sudo pvdisplay
3. 查找大文件和目录 #
# 查找根目录下最大的目录
sudo du -h --max-depth=1 / | sort -hr
# 查找大于 100MB 的文件
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null
# 查找最大的 10 个文件
sudo find / -type f -exec ls -s {} \; 2>/dev/null | sort -n -r | head -10
# 查看特定目录的大小
sudo du -sh /var /tmp /home /usr
解决方案 #
方案一:清理系统垃圾文件(快速临时解决) #
# 清理包管理器缓存
sudo yum clean all
# 清理系统日志(保留最近7天)
sudo journalctl --vacuum-time=7d
# 清理旧日志文件
sudo find /var/log -name "*.log" -type f -mtime +30 -delete
# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# 清理用户缓存
rm -rf ~/.cache/*
# 清理 yum 缓存目录
sudo rm -rf /var/cache/yum/*
方案二:扩展现有逻辑卷(如果卷组有剩余空间) #
# 1. 检查卷组剩余空间
sudo vgdisplay
# 2. 如果有剩余空间,扩展逻辑卷
sudo lvextend -l +100%FREE /dev/mapper/centos-root
# 3. 扩展文件系统
# 对于 XFS 文件系统:
sudo xfs_growfs /
# 对于 ext4 文件系统:
sudo resize2fs /dev/mapper/centos-root
方案三:从其他逻辑卷调整空间 #
前提检查 #
# 检查文件系统类型
lsblk -f
# 检查各分区使用情况
df -h
操作步骤(以从 home 分区分配 50GB 给 root 为例) #
重要:操作前务必备份重要数据!
1. 备份 /home 数据 #
# 检查可用空间
df -h /tmp
sudo du -sh /home
# 备份方法选择其一:
# 方法1:压缩备份(推荐)
sudo tar -czf /tmp/home_backup.tar.gz /home
# 方法2:非压缩备份
sudo tar -cf /tmp/home_backup.tar /home
# 方法3:使用 rsync(增量备份)
sudo mkdir -p /tmp/home_backup
sudo rsync -av /home/ /tmp/home_backup/
# 方法4:直接移动(最快)
sudo mv /home /tmp/home_old
sudo mkdir /home
2. 重建 home 逻辑卷 #
# 卸载 /home 分区
sudo umount /home
# 删除现有的 home 逻辑卷
sudo lvremove /dev/mapper/centos-home
# 创建新的更小的 home 逻辑卷(原大小减去要分配的空间)
sudo lvcreate -L 1750G -n home centos # 假设原来是1800G,减少50G
# 格式化新逻辑卷
sudo mkfs.xfs /dev/mapper/centos-home
# 挂载新分区
sudo mount /home
3. 恢复 /home 数据 #
# 根据备份方法选择对应的恢复命令:
# 恢复压缩备份
sudo tar -xzf /tmp/home_backup.tar.gz -C /
# 恢复非压缩备份
sudo tar -xf /tmp/home_backup.tar -C /
# 恢复 rsync 备份
sudo rsync -av /tmp/home_backup/ /home/
# 恢复移动的数据
sudo rsync -av /tmp/home_old/ /home/
4. 扩展 root 逻辑卷 #
# 扩展 root 逻辑卷
sudo lvextend -L +50G /dev/mapper/centos-root
# 扩展文件系统
sudo xfs_growfs /
5. 验证和清理 #
# 验证操作结果
df -h
sudo lvdisplay
# 清理备份文件(确认一切正常后)
sudo rm -rf /tmp/home_backup*
sudo rm -rf /tmp/home_old
方案四:添加新硬盘扩容 #
1. 添加新硬盘后的操作 #
# 查看新添加的硬盘
lsblk
# 创建物理卷
sudo pvcreate /dev/sdb # 假设新硬盘是 sdb
# 扩展卷组
sudo vgextend centos /dev/sdb
# 查看扩展后的卷组状态
sudo vgdisplay
2. 扩展逻辑卷 #
# 扩展 root 逻辑卷使用所有可用空间
sudo lvextend -l +100%FREE /dev/mapper/centos-root
# 或指定具体大小
sudo lvextend -L +100G /dev/mapper/centos-root
# 扩展文件系统
sudo xfs_growfs /
常用命令速查 #
磁盘空间查看 #
df -h # 查看磁盘使用情况
du -sh /* # 查看根目录下各目录大小
du -h --max-depth=1 /path | sort -hr # 按大小排序显示目录
LVM 相关命令 #
sudo pvdisplay # 查看物理卷
sudo vgdisplay # 查看卷组
sudo lvdisplay # 查看逻辑卷
lsblk -f # 查看块设备和文件系统类型
文件系统操作 #
sudo xfs_growfs / # 扩展 XFS 文件系统
sudo resize2fs /dev/mapper/centos-root # 扩展 ext4 文件系统
sudo e2fsck -f /dev/mapper/centos-home # 检查 ext4 文件系统
sudo xfs_repair /dev/mapper/centos-home # 修复 XFS 文件系统
注意事项和最佳实践 #
安全提醒 #
- 备份优先:任何磁盘操作前都要备份重要数据
- 测试环境:建议先在测试环境验证操作步骤
- 分步执行:每个步骤完成后验证结果再继续
- 保留空间:root 分区至少保留 10-20% 的空闲空间
最佳实践 #
- 定期监控:设置磁盘使用率监控告警
- 日志轮转:配置合理的日志轮转策略
- 定期清理:建立定期清理系统垃圾的计划任务
- 合理分区:初始安装时合理规划分区大小
监控命令 #
# 持续监控磁盘使用情况
watch -n 5 "df -h /"
# 设置定时任务清理(编辑 crontab)
sudo crontab -e
# 添加以下行,每周日凌晨2点清理
# 0 2 * * 0 /usr/bin/yum clean all && /usr/bin/journalctl --vacuum-time=7d
故障排除 #
常见错误及解决方法 #
1. tar 压缩错误 #
错误:tar (child): gzip: Cannot exec: No such file or directory
解决:
- 检查 gzip 是否存在:which gzip
- 使用非压缩备份:tar -cf backup.tar /home
- 安装 gzip:sudo yum install gzip
2. 卸载失败 #
错误:umount: /home: target is busy
解决:
- 查看占用进程:sudo lsof +D /home
- 强制结束进程:sudo kill -9 <PID>
- 切换到其他目录:cd /
3. 逻辑卷删除失败 #
错误:Logical volume centos/home contains a filesystem in use
解决:
- 确保分区已卸载:sudo umount /home
- 检查挂载状态:mount | grep home
- 强制卸载:sudo umount -f /home
应急处理 #
当空间完全耗尽时 #
# 立即释放空间的命令
sudo rm -rf /tmp/* /var/tmp/*
sudo yum clean all
sudo journalctl --vacuum-size=100M
# 查找并删除大文件
sudo find /var/log -name "*.log" -size +100M -delete
sudo find / -name "*.core" -delete 2>/dev/null