我正在使用外部服务器 - 只是在那里执行一些 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
}