报 no space left on device,看上去是磁盘空间不足,但有可能不是存储满了,而是 inode 满了。用 df -i 查看 inode 使用情况,如果有 100% 的就是 inode 满了。

现象

报 no space left on device,看上去是磁盘空间不足了,那么找没用的文件删了即可。

但有可能不是存储满了,而是 inode 满了。

排查

使用 df -i 查看 inode 的使用情况,如果有 100% 的,那就说明是 inode 满了:

root@host:~# df -i
Filesystem        Inodes  IUsed     IFree IUse% Mounted on
udev            16059428   1017  16058411    1% /dev
tmpfs           16078645   1812  16076833    1% /run
/dev/sda2        3276800 154963   3121837    5% /
tmpfs           16078645      4  16078641    1% /dev/shm
tmpfs           16078645     13  16078632    1% /run/lock
tmpfs           16078645     18  16078627    1% /sys/fs/cgroup
/dev/sda4       31162368   4308  31158060    1% /data
/dev/sdb1      182939648    564 182939084    1% /data/container

然后查找哪里小文件特别多。

解决办法

  1. 删除没用的文件,释放出分区的一部分 inode;

  2. 用软连接将空闲分区 /opt 中的目录连接到 inode 紧张的目录,使用 /opt 分区的 inode 来缓解 /data 分区 inode 不足的问题:

    ln -s /opt/newcache /data/cache
    
  3. 更换服务器,用高配置的服务器替换低配置的服务器。

    很多时候用钱去解决问题比用技术更有效。一般不建议。

小结

  • no space left on device 不一定是磁盘满了,可能是 inode 满了;
  • 用 df -i 查看 inode 使用情况,有 100% 的就是 inode 满了;
  • 小文件特别多会耗尽 inode;
  • 解决办法:删除没用的文件、用软连接借用其他分区的 inode、更换高配置服务器。