“设备上没有剩余空间” 导致登录不上 SSH 的解决方法

最近给自己的服务器添加了新的电脑的 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。

posted @ 2021-02-12 02:52  水郁  阅读(952)  评论(0编辑  收藏  举报
……