报 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
然后查找哪里小文件特别多。
解决办法
删除没用的文件,释放出分区的一部分 inode;
用软连接将空闲分区 /opt 中的目录连接到 inode 紧张的目录,使用 /opt 分区的 inode 来缓解 /data 分区 inode 不足的问题:
ln -s /opt/newcache /data/cache更换服务器,用高配置的服务器替换低配置的服务器。
很多时候用钱去解决问题比用技术更有效。一般不建议。
小结
no space left on device不一定是磁盘满了,可能是 inode 满了;- 用
df -i查看 inode 使用情况,有 100% 的就是 inode 满了; - 小文件特别多会耗尽 inode;
- 解决办法:删除没用的文件、用软连接借用其他分区的 inode、更换高配置服务器。