Linux服务器系统盘告急:高效清理与扩容指南
2025.09.17 15:56浏览量:0简介:当Linux服务器系统盘空间耗尽时,可能导致服务中断、日志无法写入等严重问题。本文提供从诊断到解决的完整方案,涵盖日志清理、缓存释放、大文件定位及扩容策略,帮助运维人员快速恢复系统运行。
一、系统盘空间耗尽的危害与诊断
当Linux服务器系统盘(通常为/
或/boot
分区)空间耗尽时,系统会出现以下典型症状:
- 服务中断:依赖磁盘写入的进程(如MySQL、Redis)可能崩溃
- 日志堆积:
/var/log
目录下的日志文件无法轮转,导致关键日志丢失 - 更新失败:
yum
/apt
等包管理器因空间不足无法安装软件 - 启动异常:系统可能因
/boot
分区满而无法加载新内核
诊断步骤:
查看磁盘使用情况:
df -hT # 显示所有文件系统使用情况(含文件系统类型)
du -sh /* 2>/dev/null | sort -rh | head -n 10 # 显示根目录下占用最大的10个目录
重点关注
/
和/boot
分区的Use%
是否接近100%。定位大文件:
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null # 查找大于100MB的文件
find /var/log -type f -name "*.log" -exec du -h {} + | sort -rh # 统计日志文件大小
二、紧急清理策略(无需重启)
1. 清理日志文件
- 日志轮转:手动触发
logrotate
(若已配置):logrotate -f /etc/logrotate.conf
- 删除旧日志:
rm -f /var/log/*.gz /var/log/*.old # 删除压缩旧日志
truncate -s 0 /var/log/syslog /var/log/messages # 清空当前日志(保留文件)
⚠️ 注意:直接删除日志文件后,需重启相关服务(如
systemctl restart rsyslog
)以释放文件描述符。
2. 清理缓存与临时文件
- 清理包管理器缓存:
yum clean all # CentOS/RHEL
apt-get clean # Debian/Ubuntu
- 清理内核缓存:
sync; echo 3 > /proc/sys/vm/drop_caches # 释放pagecache、dentries和inodes
- 删除临时文件:
rm -rf /tmp/* /var/tmp/* # 清理临时目录
rm -rf ~/.cache/* # 清理用户级缓存(如Docker构建缓存)
3. 清理旧内核与无用文件
- 删除旧内核(仅限
/boot
分区满时):# CentOS/RHEL
package-cleanup --oldkernels --count=1
# Debian/Ubuntu
dpkg --list | grep linux-image | awk '{print $2}' | grep -v `uname -r` | xargs apt-get purge -y
- 删除无用内核模块:
rm -rf /lib/modules/$(uname -r)/.tmp_versions/ # 清理编译残留
三、长期优化方案
1. 日志管理自动化
- 配置
logrotate
:# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 root adm
sharedscripts
postrotate
/bin/systemctl restart myapp >/dev/null 2>&1 || true
endscript
}
- 使用
journald
限制日志大小(Systemd系统):# /etc/systemd/journald.conf
[Journal]
Storage=persistent
SystemMaxUse=500M
RuntimeMaxUse=100M
2. 监控与告警
使用
df
监控脚本:#!/bin/bash
THRESHOLD=90
USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$USAGE" -ge "$THRESHOLD" ]; then
echo "WARNING: / partition usage is ${USAGE}%!" | mail -s "Disk Space Alert" admin@example.com
fi
通过
crontab -e
添加每30分钟执行一次的计划任务。使用Prometheus+Grafana监控:
# Prometheus配置示例
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
metric_relabel_configs:
- source_labels: [__name__]
regex: 'node_filesystem_avail_bytes{device="rootfs",mountpoint="/"}'
target_label: __name__
replacement: 'node_disk_free'
四、扩容方案(终极手段)
1. 扩展LVM分区
步骤:
- 添加新磁盘(如
/dev/sdb
) - 创建物理卷:
pvcreate /dev/sdb
- 扩展卷组:
vgextend vg00 /dev/sdb # 假设原卷组为vg00
- 扩展逻辑卷:
lvextend -l +100%FREE /dev/vg00/lv_root # 扩展至全部剩余空间
resize2fs /dev/vg00/lv_root # 对于ext4文件系统
xfs_growfs / # 对于XFS文件系统
2. 迁移数据至独立分区
场景:/var
或/home
占用过高
步骤:
- 创建新分区(如
/dev/sdb1
) - 格式化并挂载:
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /mnt/newvar
rsync -av /var/ /mnt/newvar/
- 修改
/etc/fstab
:/dev/sdb1 /var ext4 defaults 0 2
- 重启验证:
umount /mnt/newvar
mount -a
df -h /var
五、预防措施
- 设置磁盘配额:
# 启用配额(需文件系统支持)
mount -o remount,usrquota,grpquota /
quotacheck -cum /
quotaon /
定期清理脚本:
# /usr/local/bin/cleanup.sh
find /tmp -type f -mtime +7 -delete
find /var/log -type f -name "*.log" -mtime +30 -exec gzip {} \;
通过
crontab -e
添加每周执行一次的任务。
总结
Linux服务器系统盘满问题需结合紧急清理与长期优化双重策略。运维人员应首先通过df
/du
定位问题,优先清理日志和缓存;随后通过logrotate
、监控告警等手段预防复发;最终在必要时通过LVM扩容或分区迁移解决根本问题。定期执行清理脚本和配额管理可显著降低此类故障的发生率。
发表评论
登录后可评论,请前往 登录 或 注册