一、快速定位大文件
当系统提示磁盘空间不足时,第一步就是要找出哪些文件占用了大量空间。Linux提供了几个强大的命令来帮助我们快速定位这些"空间杀手"。
最常用的命令是du(disk usage),配合一些参数可以很直观地查看文件大小分布。比如:
# 查看当前目录下各文件和子目录的大小(人类可读格式)
du -sh *
# 查找当前目录下最大的10个文件或目录
du -ah | sort -rh | head -n 10
# 查找/var目录下大于100MB的文件
find /var -type f -size +100M -exec ls -lh {} \;
这里解释下这些命令:
du -sh *:-s表示汇总,-h表示人类可读格式sort -rh:-r反向排序,-h按人类可读大小排序find命令的-size参数:+100M表示大于100MB
二、清理日志文件
日志文件往往是占用空间的大户,特别是长期运行的服务器。我们可以用以下几种方式处理:
- 手动清理旧日志:
# 删除/var/log下7天前的日志文件
find /var/log -type f -name "*.log" -mtime +7 -delete
- 使用logrotate工具自动管理:
# 查看系统现有的logrotate配置
ls /etc/logrotate.d/
# 示例配置(/etc/logrotate.d/myapp):
"/var/log/myapp/*.log" {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 644 root root
}
这个配置表示:
- 每天轮转一次日志
- 保留30个归档
- 使用gzip压缩(compress)
- 延迟一天压缩(delaycompress)
- 如果日志为空则不轮转
三、清理软件包缓存
Linux的包管理器会缓存下载的软件包,时间久了会占用不少空间。
对于Debian/Ubuntu系统:
# 清理apt缓存
sudo apt-get clean
sudo apt-get autoclean
# 删除不再需要的依赖包
sudo apt-get autoremove
对于CentOS/RHEL系统:
# 清理yum缓存
sudo yum clean all
# 更彻底的清理
sudo rm -rf /var/cache/yum
四、处理Docker磁盘占用
如果你使用Docker,它的镜像、容器和卷可能会占用大量空间。以下是清理方法:
- 查看磁盘使用情况:
docker system df
- 清理无用资源:
# 删除所有停止的容器
docker container prune
# 删除所有未被使用的镜像
docker image prune -a
# 删除所有未被使用的网络
docker network prune
# 一键清理所有无用资源
docker system prune -a
- 限制日志大小:
# 在docker-compose.yml中限制日志大小
services:
myapp:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
五、查找并删除重复文件
重复文件也是浪费空间的常见原因。我们可以使用fdupes工具来查找:
# 安装fdupes
sudo apt install fdupes # Debian/Ubuntu
sudo yum install fdupes # CentOS/RHEL
# 查找当前目录下的重复文件
fdupes -r .
# 查找并立即删除重复文件(保留第一个找到的文件)
fdupes -rd .
六、清理临时文件
系统临时目录和用户临时目录经常堆积无用文件:
# 清理系统临时文件
sudo rm -rf /tmp/*
# 清理用户缓存
rm -rf ~/.cache/*
# 清理旧的snap版本
sudo snap list --all | awk '/disabled/{print $1, $3}' | \
xargs -rn1 sudo snap remove --revision
七、使用ncdu进行可视化分析
如果你更喜欢图形化界面,可以试试ncdu工具:
# 安装ncdu
sudo apt install ncdu # Debian/Ubuntu
sudo yum install ncdu # CentOS/RHEL
# 扫描当前目录
ncdu
# 扫描整个系统(需要root权限)
sudo ncdu /
使用方向键导航,d键删除选中的文件或目录,非常方便。
八、处理大文件的高级技巧
对于特别大的文件,我们可以使用稀疏文件技术:
# 检查文件是否是稀疏文件
filefrag -v largefile.iso
# 将普通文件转换为稀疏文件
cp --sparse=always largefile.iso largefile_sparse.iso
# 使用fallocate释放文件空间
fallocate -d largefile.iso
九、预防磁盘空间不足的建议
- 设置磁盘空间监控:
# 每天检查磁盘空间并发送邮件
df -h | mail -s "Disk Space Report" admin@example.com
- 使用cron定期清理:
# 编辑crontab
crontab -e
# 添加每周清理任务
0 3 * * 0 /usr/bin/find /tmp -type f -atime +7 -delete
- 考虑使用LVM管理磁盘,方便扩容。
十、总结与注意事项
通过以上方法,大多数磁盘空间问题都能得到解决。但在清理时要注意:
- 删除文件前先确认内容,特别是系统文件
- 不要直接删除正在被进程使用的日志文件
- 清理前最好先备份重要数据
- 对于生产环境,建议在非高峰期进行清理操作
- 考虑设置磁盘配额防止单个用户占用过多空间
记住,预防胜于治疗。定期监控磁盘使用情况,设置自动清理策略,才能从根本上避免空间不足的问题。
评论