当 Linux 系统磁盘空间不足时,通常有以下几种情况会导致空间"被吃掉"。下面我将介绍如何查找和恢复这些空间。
首先使用以下命令找出占用空间最多的目录:
# 查看各分区使用情况
df -h
# 查看当前目录下各子目录大小
du -sh * | sort -h
# 查找大于100MB的文件
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | awk '{ print $9 ": " $5 }'
系统日志和应用程序日志可能占用大量空间:
# 查看/var/log目录大小
du -sh /var/log
# 清空特定日志文件(例如syslog)
sudo truncate -s 0 /var/log/syslog
# 使用logrotate管理日志
sudo logrotate -f /etc/logrotate.conf
被进程占用的已删除文件会占用空间:
# 查找已删除但未释放的大文件
sudo lsof | grep deleted
# 重启相关进程或系统以释放空间
# 或者直接终止相关进程(谨慎操作)
# 清理apt缓存(适用于Debian/Ubuntu)
sudo apt-get clean
sudo apt-get autoclean
# 清理yum缓存(适用于RHEL/CentOS)
sudo yum clean all
# 清理/tmp目录
sudo rm -rf /tmp/*
# 清理旧的内核版本(释放/boot空间)
sudo apt-get autoremove --purge # Debian/Ubuntu
sudo package-cleanup --oldkernels --count=1 # RHEL/CentOS
如果使用Docker,可能会有大量未清理的镜像和容器:
# 清理无用的Docker对象
docker system prune -a --volumes
安装ncdu进行交互式磁盘使用分析:
sudo apt-get install ncdu # Debian/Ubuntu
sudo yum install ncdu # RHEL/CentOS
# 扫描目录
ncdu /
稀疏文件可能占用比显示更大的空间:
# 查找稀疏文件
find / -type f -printf "%S\t%p\n" | awk '$1 < 1.0 {print}' | sort -n
# 查看文件系统保留空间比例(通常5%)
tune2fs -l /dev/sda1 | grep "Reserved block count"
# 修改保留空间比例(谨慎操作)
sudo tune2fs -m 1 /dev/sda1 # 设置为1%
通过以上方法,您应该能够找出并恢复大部分"丢失"的磁盘空间。如果问题依然存在,可能需要考虑扩展磁盘容量或迁移部分数据。