我如何检查 /tmp 中占用了哪些磁盘空间?

我如何检查 /tmp 中占用了哪些磁盘空间?

我正在使用外部服务器 - 只是在那里执行一些 web-api。今天当我想使用 api 时,php 返回了以下错误:

Unknown: write failed: No space left on device (28)

所以我发现 tmp 已满:

~# df -h /tmp
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       102G   97G     0 100% /

所以我想我必须清除 tmp 中的垃圾 - 但首先我想知道是什么导致了这个问题,我的意思是是什么占用了 tmp 中的这么多内存?也许是有什么东西以某种方式淹没了 tmp 目录?我不是系统管理专家,我只是编写 web-api... tmp 大小超标是正常的吗?也许它只是偶尔发生?

命令结果:

du -sh /tmp/* | sort -h
0       /tmp/tmpEZIyDT
0       /tmp/unity_support_test.0
4.0K    /tmp/amazoncookie.txt
4.0K    /tmp/at-spi2
4.0K    /tmp/filewhHOLH
4.0K    /tmp/keyring-b3ZOTY
4.0K    /tmp/mc-domator
4.0K    /tmp/mc-root
4.0K    /tmp/pulse-2L9K88eMlGn7
4.0K    /tmp/pulse-PKdhtXMmr18n
4.0K    /tmp/ssh-thimUVhk2748
8.0K    /tmp/pulse-5N1YM8s2cT0i

奇怪 - 据我所知,tmp 目录中没有太多东西......也许其他东西占用了太多磁盘空间 - 我该如何检查呢?

答案1

第一个命令表明 /tmp 实际上与 / 位于同一文件系统上(即其他所有内容)。如果您的根分区已满,则可能是其他内容(例如 /var/log)占用了空间。

找到事物的一个体面的方法是

du -sc * .[^.]* | sort -n

找出哪些目录比较大。然后,您可以继续 cd 到较低的目录并重新运行该命令以缩小范围。

答案2

检查一下 inode 是否用完。

# df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda3            1236992 1236992       0  100% /
tmpfs                1007716       1 1007715    1% /dev/shm
/dev/sda1              38456      45   38411    1% /boot

答案3

在最近的发行版中:

du -sh /tmp/* | sort -h

在较旧的发行版上:

du -csm /tmp/* | sort -n

答案4

这是我在 bashrc 中的内容。这将让您很好地了解什么是“大”,然后您可以从那里进行调查。当我们有用户喜欢使用系统 /tmp 而不是我们的共享 tmp 空间时使用它。

function get_big_usage () {
    echo -e "\n"
    du -ks /tmp/* | sort -nr | head
    echo -e "\n"
    du -ks /var/* | sort -nr | head
    echo -e "\n"
    du -ks /home/* | sort -nr | head
}

相关内容