Linux 磁盘空间入门:df、du 与清理
服务器用着用着,某天部署新东西突然报错:磁盘空间不足。明明没存多少文件,空间却被悄悄吃光了。日志在涨、缓存在涨、旧安装包也在涨,不查不知道,一查吓一跳。
磁盘空间管理就三个动作:df 看整体剩多少,du 查是谁占了地方,清理只删能确认的东西。学会这三步,空间告急时不再手忙脚乱。
小节一、df:先看整体还剩多少
出问题先看大盘,df 就是干这个的:
df -h
-h 的意思是按人类可读的方式显示,G、M 这样的单位一眼能看懂。重点看两列:已用百分比和挂载点。根分区 / 用到 90% 以上就要警惕了,再涨下去服务可能写不进日志、甚至起不来。
只看某一个分区,可以直接点名:
df -h /
如果根分区还很空,但某个数据盘满了,问题就锁定在那个盘上,不用满世界找。
小节二、du:顺着目录往下查,谁占了地方
知道哪个盘满了,还要知道是哪个目录在吃空间。用 du:
du -sh /var/log
-s 是只给总和,不展开每个子目录;-h 同样是可读单位。这行命令的意思是:只告诉我 /var/log 一共占了多大。
想一层层往下钻,就列出当前目录下每个子目录的大小,再按大小排个序:
du -sh * | sort -rh | head -10
这行命令先算出每个子目录的大小,再从大到小排,只看最大的 10 个。最大的那个目录,就是下一步要查的地方,顺着它继续往下钻,直到找到真正的“大户”。
小节三、find:把大文件直接揪出来
有时候占空间的不是某个目录,而是一两个超大文件,比如没轮转的日志、忘删的备份包。用 find 直接按大小找:
find /var -type f -size +100M
意思是:在 /var 下面找出所有大于 100M 的普通文件。-type f 只找文件,不找目录;-size +100M 是大于 100M 的意思。
想看这些大文件到底多大、按大小排好,再接一手:
find / -type f -size +500M -exec ls -lh {} \;
这条是在整个根分区找大于 500M 的文件并列出详情。在根分区全盘找会慢一点,着急时可以把范围先缩小到可疑目录。
小节四、清理:只删能确认的东西
找到大户之后再动手,而且只删自己能确认的东西。最常见的三类安全清理:
第一,系统软件包缓存。装软件时下载的安装包会留下来,清掉它们不影响已装好的软件:
apt clean
用 yum 的系统对应的是:
yum clean all
第二,旧日志。很多服务自带日志轮转,旧日志会被压缩归档,确认不需要排查历史问题后,可以删掉最旧的压缩包,但正在被写入的当前日志文件不要直接删,删了服务可能还在往已删除的文件里写,空间反而释放不掉。
第三,临时文件。/tmp 下的东西重启会清,手动清之前先确认没有正在运行的程序在用它们。
删之前先问自己一句:这个文件删了,哪个服务会受影响?答不上来就先不动,查清楚再删。误删数据比磁盘满更糟。
小节五、三个新手常踩的坑
第一,只看 df 的百分比,不看挂载点。/ 还有空间,但数据盘满了,服务照样报错——先看清满的是哪个挂载点。
第二,du 和 df 对不上。文件被删了但还有进程占着它,df 看到的已用空间不会立刻降下来,重启相关服务或等进程退出后才会释放。删日志前先确认有没有进程还在写它。
第三,清理用 rm -rf 图省事。通配符一旦写错目录,删掉的就回不来了。清理命令先不带 -rf 试一次,确认删的是对的东西再真正执行,重要目录先备份再动手。
df 看整体,du 定位目录,find 揪出大文件,清理只动能确认的。下次再遇到磁盘空间不足,先别急着扩容——花五分钟顺着这条链查一遍,往往是日志或缓存占了大头,清掉就能再撑很久。
- 点赞
- 收藏
- 关注作者
评论(0)