最近给自己的服务器添加了新的电脑的 SSH 权限,但是新电脑上反复尝试都不能 ssh 上服务器。然而通过旧电脑却可以登录上去。没想到竟是因为设备上没有 inode 了。

inode 是什么呢?

一般 UNIX 操作系统上的每个目录、文件都会有一个“元信息”,存储了文件名、创建者、创建时间等等信息。而 inode 就是存储“元信息”的数据结构,这个 i 就是 index 的意思。
因为 inode 本身也要存在硬盘里,所以也占一定的空间。

使用 df 命令解决“设备上没有剩余空间”的报错

登录到服务器上后,看到了“设备上没有剩余空间”的报错,touch 一个新文件也报这个错,rm 删除东西时就一直卡住了。这个时候就可以通过

df -h

命令查一下空间使用情况,如果是空间使用满了,就用

du -sh

命令来查找大文件,删除无用的文件来腾空间。

然后用

df -i

命令来查看 inode 的使用情况,大概长这个样子:

文件系统    Inode  已用(I)  可用(I) 已用(I)% 挂载点
/dev/vda1  3276800  123327 3153473  4% /

如果发现已用%已达100%,那么就有必要看看什么导致了那么多 inode 的占用。

我这次通过 du -sh 查找到 docker 相关的目录占了很多空间,而 docker 本身却打不开,所以先删掉了也占很大空间的/var/log/ 下的文件,其中 maillog 居然有上 G 大小,tail 了一下发现有好多 “设备上没有剩余空间” 的日志。以及删除了大量的博客备份文件。然后就可以 systemctl start docker了。

之后我用了

docker volume prune

果然开始了长时间的清理工作,最后成功把 inode 的使用率从 100% 下降到 4%。 其实如果平时执行 docker run 时注意加上 --rm,运行完就会自动清理容器的 volume。


┆凉┆暖┆降┆等┆幸┆我┆我┆里┆将┆ ┆可┆有┆谦┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆临┆你┆的┆还┆没┆ ┆来┆ ┆是┆来┆逊┆没┆些┆ ┆雁┆终┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆没┆ ┆你┆
┆ ┆这┆ ┆试┆方┆在┆逃┆ ┆会┆ ┆在┆ ┆清┆来┆准┆ ┆没┆有┆ ┆没┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆这┆ ┆晨┆ ┆的┆ ┆有┆来┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆这┆ ┆里┆ ┆没┆ ┆杀┆ ┆来┆ ┆ ┆来┆