df 与 du 入门:分清磁盘总量和哪个目录把空间吃光了
云服务器磁盘告警时,很多人会先删几个自己记得的日志,结果空间几乎没有变化。更稳妥的顺序是先看整盘还剩多少,再找出具体是哪个目录在增长。df 回答“文件系统整体用了多少”,du 回答“某个目录及其内容占用多少”。两者看的不是同一层信息,混用就容易误判。下面用常见用法说明如何把它们配合起来,不把某一次输出当成你机器上的实测结果。
一、先用 df 看文件系统,而不是某个文件夹
df 读取的是已挂载文件系统的用量。最常用的写法是加上 -h,让容量以 G、M 这些人类可读的单位显示。
df -h
输出里每一行通常对应一个挂载点。需要重点看的是根分区 /,以及单独挂出来的数据盘,例如 /data 或 /var。Use% 表示该文件系统已用比例,Avail 表示大约还能写入多少。
如果只关心根分区,可以明确指定路径:
df -h /
这样能避免被临时文件系统、容器 overlay 或光驱占位行干扰。需要注意:df 报告的是整个文件系统,不是你当前所在的那个子目录。某个目录显示“很大”,并不等于它可以单独扩容;它仍然占用所属分区的空间。
二、再用 du 找出目录里谁在增长
确认整盘紧张之后,下一步才是定位目录。du 会统计指定路径下各文件和子目录的占用,并汇总。常见写法是对根目录下一层做排序,先找出最大的几个目录。
sudo du -h -d 1 /var | sort -h
-d 1 表示只展开一层,避免第一次就把整棵目录树打满屏幕。sort -h 按人类可读的容量排序,最大的目录会出现在末尾。若某一层仍然很大,再对它重复同样的命令,一层层往下收。
如果只想看当前目录合计,使用 -s:
du -sh /var/log
这会给出该路径的总占用,适合在已经缩小范围后做确认。du 统计的是它实际访问到的文件;权限不足时,部分目录会被跳过,总和可能偏小,所以对系统目录加上合适的权限再看一次更稳妥。
三、两者对不上时,先找未释放的文件
有时 du 把目录加起来明显小于 df 显示的已用空间,这并不一定是命令坏了。一个常见原因是:进程还开着已经删除的文件。文件从目录中消失后,磁盘块要等进程关闭句柄才会真正释放。此时 df 仍把这块空间算作已用,du 却已经统计不到它。
遇到这种情况,不要急着继续删别的目录。可以先确认是否有服务刚刚轮转或清空过日志,再考虑重启对应进程或检查仍打开的已删文件。另一个差异来自不同文件系统的预留空间、快照和挂载方式:df 以文件系统记账为准,du 以走访到的文件为准。
四、养成可重复的检查顺序
磁盘告警时,建议固定按“先 df、再分层 du、最后才删除”的顺序处理。删除前先确认文件角色:正在写入的日志、数据库目录和容器数据,都可能看起来很大,却不能直接当垃圾清掉。对日志,优先用轮转和压缩,而不是手工删当前文件。
把每次看到的挂载点、目录和命令记下来,下次对比时才知道是突然增长还是长期累积。df 和 du 能帮你定位空间去向,但它们不会告诉你哪些数据可以安全删除;这个判断仍然要回到业务本身。
- 点赞
- 收藏
- 关注作者
评论(0)