我有一个运行 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 上,但也许我错了?
答案1
验证系统 inode:
root #df -i /
如果使用率接近 100%,请尝试使用
xdiskusage /
找出占用了 inode 的内容。
遗憾的是,一旦创建了文件系统,就无法增加文件系统上的 inode 数量。
除了 LVM,可以使用 resize2fs 扩展 inode 的数量
答案2
可能是某些应用程序正在创建大量小文件并完全耗尽 inode。您可以查找此类恶意应用程序并删除不需要的文件。
inode 限制不能动态增加,但是如果您使用 LVM,您可能会考虑增加卷的大小,否则进行备份并创建指定更高 inode 限制的新文件系统。
答案3
您可以使用 find 命令搜索包含大量文件的目录,并根据您的标准执行清理
find /dev/xvda1 -type f -size +1M -exec ls -ltrh {} \;
当您找到需要执行清理的位置或目录时,将该目录路径传递到源中,然后您就可以执行清理
find /dev/xvda1/dummy -type f -size +1M -mtime +120 -exec rm -rf {} \;
在上面的命令中,我从名为 dummy 的目录中删除了超过 120 个文件