Linux系统用久了,根目录(/)空间告急是很常见的问题。很多人一看到磁盘满了就慌了linux根目录释放空间,其实只要搞清楚哪些文件占用了空间,清理起来并不复杂。根目录空间不足会直接影响系统运行,比如无法安装软件、系统更新失败,甚至某些服务启动不了。下面就从实际运维的角度linux find,聊聊怎么安全有效地释放根目录空间。
哪些地方最占根目录空间
根目录下藏着很多容易被忽略的大文件。系统日志(/var/log)是头号嫌疑人,尤其是长期运行的服务器,日志文件动不动就几个G。还有软件包缓存,apt或yum下载的安装包都存着没删。另外,Docker的镜像和容器数据如果默认放在/var/lib/docker,那更是吃空间的大户。

我见过一台服务器,/var/log/journal目录下积压了半年的系统日志,足足占了8个G。还有一次,某同事在/home下建了个临时目录忘了删,结果根目录直接爆了。别只盯着自己的文件,系统自己产生的垃圾往往更吓人。
怎么快速找到根目录里的大文件
别靠肉眼一个个文件夹点,用命令行最直接。du -sh /<strong> 可以看根目录下每个一级目录的大小,但输出可能有点乱。更聪明的做法是用 du -sh /var/log/</strong> | sort -rh | head -10,直接列出/var/log里最大的10个文件或目录。
想扫描整个根目录?试试 du -sh / --exclude=/proc --exclude=/sys --exclude=/mnt 2>/dev/null | sort -rh | head -20。排除掉虚拟文件系统和挂载点,剩下的才是真实占用。用ncdu这个工具更省事linux根目录释放空间,一条ncdu /就能交互式地看到每个目录的占用情况,还能直接进去删文件。

有个细节要注意:有时候df -h显示根目录满了,但du -sh /统计出来却小很多。这通常是因为有进程还在占用已删除的文件,用lsof | grep '(deleted)'看看,找到对应进程重启一下就好。
清理日志和临时文件安全又有效
日志文件是最容易下手的。清空日志别用rm,用truncate -s 0 /var/log/syslog或者> /var/log/syslog,这样不会影响正在写的进程。journalctl日志可以用journalctl --vacuum-time=3d只保留最近3天的。apt缓存直接apt clean,yum缓存用yum clean all。
/tmp目录下的临时文件系统会自动清理,但有时候会残留。手动删的时候注意别误删正在用的socket文件。还有/var/tmp,这个目录下的文件系统不会自动清理,可以放心删。

Docker相关的清理要小心。docker system prune -a会删除所有未使用的镜像和容器,但如果你有重要的停止容器,先确认一下。建议用docker system df看看具体哪些占用,再决定删什么。
通过移动目录到其他分区腾空间
如果根目录实在太小,而其他分区还有空间,可以把某些目录迁移过去。比如把/var/log指向一个更大的分区。操作步骤是:先在新分区建个目录,把/var/log内容复制过去,然后修改/etc/fstab让新分区挂载到/var/log,或者用mount --bind。
但要注意linux cp,像/usr、/etc这种系统核心目录别乱动,动完系统可能起不来。建议只迁移/var、/home或/opt这类用户数据目录。迁移前一定先备份,或者用虚拟机先演练一遍。

找出并删除不再需要的旧内核
Linux内核更新后,旧内核不会自动删除。用dpkg --list | grep linux-image(Debian/Ubuntu)或rpm -qa | grep kernel(CentOS/RHEL)看看装了多少个。保留最近两个就够了,删掉旧的能省出几百兆甚至几个G。
删除时用包管理器,别直接删文件。Ubuntu下apt autoremove --purge会自动清理旧内核和依赖。CentOS下用yum remove kernel-旧版本号。删完记得重启一次,让系统用新内核。
检查大文件并处理core dump和快照

用户目录下也可能有隐藏的大文件,比如下载的ISO镜像、编译的中间文件。用find / -xdev -type f -size +100M -exec ls -lh {} ; 2>/dev/null找出所有超过100M的文件,看看哪些能删。
core dump文件默认在/var/core或当前目录下,如果程序崩溃频繁,这些文件会迅速占满空间。用ulimit -c 0临时禁止生成,或者修改/etc/security/limits.conf永久关闭。还有系统的快照,比如LVM或snapper创建的,检查下有没有旧的可以删掉。
根目录空间管理其实是个习惯问题。定期用df -h看看,日志设置合理的轮转策略,临时文件及时清理,能省去很多麻烦。别等到报警了才动手,平时多留个心眼,系统跑起来才稳当。
