我有一个运行 Ubuntu 14.04 的 EC2 节点。在今天早上的部署中,我从 git fetch 收到以下错误消息:
error: unable to create temporary file: No space left on device
我登录到服务器并且 df -h 表明我有足够的空间:
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 492M 12K 492M 1% /dev
tmpfs 100M 488K 99M 1% /run
/dev/xvda1 7.8G 4.9G 2.5G 67% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 5.0M 0 5.0M 0% /run/lock
none 497M 4.0K 497M 1% /run/shm
none 100M 0 100M 0% /run/user
我在这里误读了 df 吗?我的理解是 EC2 上的 /tmp 驻留在 /dev/xvda1 上,但也许我错了?
验证系统 inode:
如果使用率接近 100%,请尝试使用
找出占用 inode 的内容。
可悲的是,一旦创建了文件系统,就没有办法增加文件系统上的 inode 数量。
除了 LVM,它可以通过 resize2fs 扩展 inode 的数量
参考:设备上没有剩余空间,但有足够的可用空间
可能是某些应用程序正在创建大量小文件并完全耗尽 inode。您可能会寻找此类流氓应用程序并删除不需要的文件。
inode 限制不能动态增加,但是如果您使用 LVM,您可能会考虑增加卷的大小,否则进行备份并创建一个新的文件系统,指定更高的 inode 限制。
您可以使用 find 命令搜索包含批量文件的目录,并且可以根据您的标准执行清理
find /dev/xvda1 -type f -size +1M -exec ls -ltrh {} \;
当您找到需要执行清理的位置或目录时,在源代码中传递该目录路径,您可以执行清理在上面的命令中,我从一个名为 dummy 的目录中删除早于 120 的文件