在工作中会遇到No space left on device的异常,下面总结一下问题的排查和解决思路:

磁盘空间真的满了

执行df -h命令可以看到磁盘的占用情况:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        36G  5.7G   28G  17% /
tmpfs           1.9G  209M  1.7G  12% /run
/dev/vdb         99G  5.7G   88G   7% /home

如果磁盘满了,use%会显示为100%。可以执行du -h --max-depth=1继续查看具体哪个目录占用空间大。执行 find /home -type f -size +10M -print0 | xargs -0 du -h | sort -nr命令查找出大文件,并排序。

找到大文件后,可以执行进行删除操作,如果文件删除后,空间还没有变小。需要检查文件是否还被进程持有(lsof 文件名称),需要杀死进程,才会完全释放空间。

磁盘空间没有满,但是inode满了

执行df -i命令可以看到inode的使用情况,inode满了,说明可能存在大量的小文件,此时删除部分文件就可以解决

Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/vda1      2359296 142821 2216475    7% /
tmpfs           485127     16  485111    1% /sys/fs/cgroup
/dev/vdb       6553600 666557 5887043   11% /home