
你打开终端,敲了个命令,系统提示:No space left on device。你运行df -h,看到/分区已经100%了。
网站开始报错,数据库连不上,日志写不进去。更糟的是,你不知道哪些文件可以删——怕删错了系统就崩了。
根目录满了比普通数据盘满了更棘手。因为系统本身需要空间才能运转,某些目录是系统目录,删错可能导致无法启动。今天讲怎么快速定位、安全清理。
先看一个数据
在服务器磁盘空间不足的案例中,/分区爆满占比很高。主要原因是系统日志膨胀、包管理器缓存堆积或旧内核未清理。好消息是,大部分情况不需要扩容——清理就够。
第一步:定位——谁把/吃满了
先找到哪些目录占用了最多空间,而不是盲目翻找。
bash
# 查看各分区使用情况 df -h
确认/分区的使用率。如果/dev/vda1或/dev/sda1的Use%到了95%以上,需要立刻处理。
bash
# 从根目录开始,找最大的前20个目录 du -sh /* 2>/dev/null | sort -hr | head -20
输出会告诉你哪些一级目录最大。通常可疑目标集中在:/var、/home、/root、/tmp。
bash
# 继续往下钻,比如/var下最大的子目录 du -sh /var/* 2>/dev/null | sort -hr | head -10
重复这个步骤,直到找到具体的大文件或目录。
第二步:安全清理——哪些可以删
以下目录/文件相对安全,可以根据实际情况清理。
1. 日志文件(/var/log)
这是最常见的元凶。系统日志、应用日志长期累积,可能占用数十GB。
安全范围:30天前的日志通常不再需要。谨慎起见,先检查日志是否在增长:
bash
ls -lh /var/log/*.log
清理方法:使用logrotate手动轮转:logrotate -f /etc/logrotate.conf
即时清理(谨慎):删除.gz压缩过的旧日志文件,保留最近几天的。
bash
# 找到超过30天的日志文件 find /var/log -name "*.log" -mtime +30 -delete
2. 包管理器缓存
软件包安装文件缓存。系统更新后,旧的安装包还在。
bash
# Ubuntu/Debian du -sh /var/cache/apt/archives/ apt clean # CentOS/RHEL du -sh /var/cache/yum/ yum clean all
通常能清理几百MB到几个GB。
3. 旧内核
每次内核更新都会保留旧内核,但通常不需要保留4个以上。
bash
# Ubuntu/Debian dpkg --list | grep linux-image apt autoremove --purge # CentOS/RHEL package-cleanup --oldkernels --count=2
4. 临时文件(/tmp和/var/tmp)
某些程序会在/tmp目录写入临时文件,重启后应自动删除。但如果不重启,可能长期积累。
bash
# 查看/tmp占用 du -sh /tmp/ ls -la /tmp/
删除超过3天的临时文件:
bash
find /tmp -type f -atime +3 -delete find /var/tmp -type f -atime +3 -delete
5. 大文件或异常文件
用以下命令在/下找出超过100MB的大文件:
bash
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null
逐个排查,确认文件用途。如果是core dump或数据库备份文件,确认不需要就可以删。
第三步:如果清理后还不够
如果清理了上述目录,/分区仍然使用率较高,说明数据确实在快速增长。排查方向:
检查哪个目录还在持续增长:
bash
watch -n 30 'du -sh /* 2>/dev/null | sort -hr | head -10'
观察几分钟,看哪些目录持续膨胀。可能是某个应用在疯狂写日志,或网站上传文件过多。
检查是否有进程持有已删除的文件:
如果你删除了一个大文件但空间没释放,很可能有进程还在使用它:
bash
lsof | grep deleted
找到这些进程后,重启对应的服务才能释放磁盘空间。
哪些目录/文件绝对不要删
| 目录 | 说明 |
|---|---|
/bin、/sbin | 系统命令和核心工具,删了系统无法启动 |
/lib、/lib64 | 系统库文件,删了几乎所有程序都会报错 |
/etc | 系统配置文件,删了导致服务异常 |
/boot | 启动文件,删除可能导致无法启动 |
/usr | 系统程序和库,除非你明确知道在做什么 |
/proc、/sys | 虚拟文件系统,存放运行时信息 |
核心规则:除非你确定该目录的用途,否则不要删除任何系统目录下的内容。如果你不确定,先查文档,不要冒险。
真实案例
一台跑了3年的服务器,/分区使用率98%。排查发现/var/log/journal目录占用35GB。这是systemd日志的持久化存储,默认不限制大小。执行journalctl --vacuum-size=500M,瞬间释放34GB,使用率降到70%。服务恢复正常。
最后一句
根目录满了和普通磁盘满了的区别在于:有些系统文件你不能碰。但系统日志、包缓存、旧内核都是安全的清理目标。按上面的顺序走一遍——先定位大目录,再安全清理,通常10-20分钟就能解决。
如果清理完还满,检查是否有进程占用了已删除的文件。大多数情况下你不需要扩容——你只需要告诉系统哪些东西已经不需要了。




