Contents

Ubuntu清理磁盘空间

清理 Linux 服务器磁盘空间时需要谨慎,避免误删系统关键文件。建议按以下步骤进行。

第一步:诊断空间占用

查看整体磁盘使用情况

1
df -h

重点关注 Use%(使用率)和 Mounted on(挂载点,通常是 //home)。如果 /dev/vda1/dev/sda1 使用率超过 90%,就需要清理了。

分析目录占用

进入根目录,使用 du 命令查看各一级目录大小:

1
2
cd /
sudo du -h --max-depth=1

这会列出 /var/usr/home 等目录的占用情况。通常占用较大的目录有:

  • /var:日志和缓存
  • /home:用户数据
  • /opt:安装的软件

找到占用最大的目录后,可以继续深入查看:

1
sudo du -h --max-depth=1 /var

第二步:按优先级清理

1. 清理软件包缓存

1
2
sudo apt-get clean       # 清理已下载的安装包
sudo apt-get autoremove  # 移除不再需要的依赖包

2. 清理系统日志

如果 /var/log 占用很大,说明日志未做过期轮转。

查看日志大小

1
du -sh /var/log

清理 journal 日志(systemd 系统)

1
2
3
4
5
6
7
8
# 查看当前日志大小
journalctl --disk-usage

# 只保留最近一周的日志
sudo journalctl --vacuum-time=1w

# 或者限制日志最大体积(例如 100MB)
sudo journalctl --vacuum-size=100M

手动清理旧日志文件

进入日志目录,检查是否有体积异常大的 .log 文件。

注意:不要直接删除正在被写入的日志文件,否则会导致服务异常。

1
2
3
4
5
# 删除旧的压缩归档
sudo rm -f /var/log/syslog.*.gz

# 如果某个大文件必须清空,用 echo 重定向而非 rm
sudo echo > /var/log/nginx/access.log

3. 清理 Docker

Docker 的镜像、容器和卷会占用大量空间,且容易被遗忘。

一键清理

1
docker system prune

删除停止的容器、未使用的网络、悬空镜像。如果想删除所有未使用的镜像:

1
docker system prune -a

注意:删除镜像后,下次启动容器可能需要重新下载。

手动清理卷

1
docker volume prune

4. 查找并删除大文件

如果大致知道文件位置,可以用 find 命令精确定位:

1
2
# 查找最近 7 天修改过的大文件(排查暴涨原因)
sudo find / -type f -mtime -7 -size +50M

5. 清理缓存目录

清理 /tmp 临时文件

系统重启通常会自动清理,也可以手动检查:

1
2
ls -lh /tmp
# 确认无重要文件后可谨慎删除

清理用户缓存

如果系统有多个用户,~/.cache 目录可能很大:

1
du -sh ~/.cache

高危雷区

清理过程中务必注意以下事项,否则可能导致系统崩溃。

禁止删除系统核心文件

  • 不要删除 /bin/sbin/lib/usr 目录下的任何文件。这些是系统核心程序,删除后系统将无法启动。

不要操作虚拟文件系统

  • 不要在 /proc/dev/sys 目录下进行任何操作。这些是虚拟文件系统,不是真实硬盘空间。

正确处理正在写入的文件

  • 不要强行删除正在被进程写入的文件。如果你用 rm 删除了一个正在被写入的日志文件(如 /var/log/syslog),磁盘空间不会立即释放,直到该服务重启。

正确做法:用 echo > filename 清空文件内容,而不是删除文件本身。

检查已删除但仍占用空间的文件

1
lsof | grep deleted

如果发现这类文件占用巨大空间,需要重启对应的服务或进程来释放空间。

拓展与后续学习建议

  • 日志管理策略:学习配置 logrotate 自动轮转日志,设置合理的保留周期
  • 磁盘配额:学习使用 quota 命令为用户或目录设置磁盘使用限制
  • LVM 逻辑卷管理:掌握 LVM 的创建、扩容、缩减操作,便于动态调整磁盘空间
  • 监控告警:配置磁盘空间监控脚本或使用工具(如 ncdubaobab)及时发现异常
  • 容器运维:深入学习 Docker 的存储驱动和清理策略,避免镜像膨胀
  • 定期维护计划:建立周期性清理任务,保持系统健康运行