Debian 服务器磁盘空间查看与清理

服务器最常见的“突然挂掉”原因之一就是磁盘占满,尤其是 /var、/ 或 /home。下面从查看 → 定位 → 清理一步步教你操作。

1. 快速查看整体磁盘使用情况(最常用 3 条命令)

命令用途与输出特点推荐使用场景
df -h人类可读格式,显示每个挂载点使用量/剩余第一眼看哪里快满了(首选)
df -hT多显示文件系统类型(ext4/xfs/tmpfs 等)排查 tmpfs 或特殊分区
du -sh /*显示根目录下每个一级目录占用大小(排序后)快速定位哪个大目录吃空间

最常用组合(复制粘贴运行):

Bash
df -h
echo "-------------------"
sudo du -sh /* 2>/dev/null | sort -hr | head -n 15

通常你会看到 /var、/home、/usr 排在前列。

2. 深入定位占用空间的大户(分层钻取)

第一层:找大目录

Bash
# 列出前 10 大目录(忽略错误)
sudo du -shx /* 2>/dev/null | sort -hr | head -n 10

常见罪魁祸首:

  • /var(日志、缓存、数据库)
  • /home(用户文件、下载、虚拟机镜像)
  • /usr(软件包、源码编译产物)
  • /var/lib/docker(如果装了 Docker)

第二层:进入嫌疑目录继续钻

Bash
# 示例:/var 最大 → 看里面
sudo du -sh /var/* 2>/dev/null | sort -hr | head -n 10

# 再深入:/var/log 最大
sudo du -sh /var/log/* 2>/dev/null | sort -hr | head -n 10

第三层:交互式神器 ncdu(强烈推荐安装)

Bash
sudo apt update
sudo apt install ncdu

# 扫描整个根目录(可随时 q 退出)
sudo ncdu /

# 只扫描 /var(更快)
sudo ncdu /var

ncdu 优点:用箭头/回车浏览,像文件管理器一样删除文件(按 d 删除,按 y 确认)。

3. Debian 服务器最常见的空间占用点 & 安全清理方法

目录/类型常见占用原因安全清理命令(推荐顺序)注意事项
/var/cache/apt/archives/已下载的 deb 包sudo apt clean 或 sudo apt autoclean完全安全,可随时清理
/var/log/journald 日志、rsyslog 文本日志sudo journalctl --vacuum-time=2weeks sudo journalctl --vacuum-size=500M建议保留 1–4 周
/var/log/journal/systemd journal 持久化日志编辑 /etc/systemd/journald.conf → SystemMaxUse=300M → sudo systemctl restart systemd-journald持久化后必设上限
/var/lib/docker/Docker 镜像、容器、volumedocker system prune -a --volumes(删未使用) docker image prune -a先确认无用镜像
/tmp / /var/tmp临时文件sudo rm -rf /tmp/*(小心运行中程序) 或重启系统(/tmp 通常 tmpfs 或自动清)重启最安全
/home/*/下载 / .cache用户下载、浏览器缓存du -sh ~/.cache/* → 手动删或 rm -rf ~/.cache/*用户目录可删缓存
/var/lib/mysql / postgresql数据库膨胀、binlog、WAL优化数据库(VACUUM、清理旧备份) 或设置 binlog 过期谨慎操作
旧内核/boot 里积累多个内核sudo apt autoremove(自动删旧内核) 或 sudo apt purge linux-image-旧版本保留 1–2 个最新内核

4. 一键式常规清理脚本(可保存为 crontab 每周跑)

Bash
#!/bin/bash
# 文件名:/usr/local/bin/clean-disk.sh
# 权限:chmod +x /usr/local/bin/clean-disk.sh

echo "清理 apt 缓存..."
sudo apt clean
sudo apt autoclean
sudo apt autoremove -y

echo "清理 journal 日志(保留最近 4 周)..."
sudo journalctl --vacuum-time=4weeks

echo "清理临时目录..."
sudo find /tmp -type f -atime +10 -delete 2>/dev/null
sudo find /var/tmp -type f -atime +30 -delete 2>/dev/null

echo "完成。当前磁盘使用:"
df -h /

加入 crontab(每周日凌晨 4 点):

Bash
sudo crontab -e
# 添加一行:
0 4 * * 0 /usr/local/bin/clean-disk.sh >> /var/log/clean-disk.log 2>&1

5. 快速排查“磁盘突然占满”的 checklist

  1. df -h → 看哪个分区 90%+
  2. sudo du -shx /* | sort -hr | head → 定位大目录
  3. 进入大目录 → sudo du -sh * | sort -hr | head
  4. 安装 ncdu → sudo ncdu / 或 sudo ncdu /var
  5. 检查 journal:sudo journalctl --disk-usage
  6. 检查 Docker(如果有):docker system df
  7. 清理后再次 df -h

记住:永远不要直接 rm -rf /var/log//var/lib 整个目录,会毁系统。定位到具体子目录再删。

掌握以上方法,你就能在 5–10 分钟内找出并解决 95% 的 Debian 服务器磁盘空间问题。

THE END