跳到主要内容

CentOS 7 系统某分区使用率接近100%解决方案

·1643 字·4 分钟

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 文件系统

注意事项和最佳实践 #

安全提醒 #

  1. 备份优先:任何磁盘操作前都要备份重要数据
  2. 测试环境:建议先在测试环境验证操作步骤
  3. 分步执行:每个步骤完成后验证结果再继续
  4. 保留空间:root 分区至少保留 10-20% 的空闲空间

最佳实践 #

  1. 定期监控:设置磁盘使用率监控告警
  2. 日志轮转:配置合理的日志轮转策略
  3. 定期清理:建立定期清理系统垃圾的计划任务
  4. 合理分区:初始安装时合理规划分区大小

监控命令 #

# 持续监控磁盘使用情况
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