很多刚接触linux的人都不知道linux里有个inodes机制。

inodes是什麽?通俗点说就是文件和文件夹的总数限制。一般VPS的inodes总数限制是1000000,但具体还是要看IDC的设置。

inodes满了之后会照成文件无法写入的情况,windows用多了的人基本上都想不到这裡居然还有个坑。

首先我们能使用一个命令来查看inodes的使用情况。

df -i

之后我们就能看到系统inodes的使用情况。

但是这个命令显示的是整个系统的inodes的使用情况,假如我们要定位哪个文件夹的inodes佔用过多的话,我们还需要用到其他的命令。

cd / #可以切换到任意你想查看的目录
echo "Detailed Inode usage for: $(pwd)" ; for d in `find -maxdepth 1 -type d |cut -d\/ -f2 |grep -xv . |sort`; do c=$(find $d |wc -l) ; printf "$c\t\t- $d\n" ; done ; printf "Total: \t\t$(find $(pwd) | wc -l)\n"

利用这条命令我们就能够精准的找出哪裡占用了我们大量的inodes索引。

在这裡我就发现了我的VPS上在/usr/scr目录佔用了我几十万的inodes索引。这个目录是什麽目录?大概是存放linux系统内核的目录。为什么我的这个目录异常庞大?经过我仔细分析之后我突然想起了在安装锐速的时候碰上了内核不兼容的情况,然后我手动更换了内核之后并没有把内核卸载,而且ubuntu在安装老内核的时候还会把之后一个系列的新内核都装了,所以就导致了这部分佔用了我几十万的inodes索引。直接卸载就好了。

使用如下命令查看已经安装过的内核文件,不管这些内核是不是都启用了。

dpkg --get-selections|grep linux

回复的信息大概会是下面这样的:

libselinux1                    install
libselinux1:i386                install
linux-firmware                    install
linux-headers-3.13.0-32                install
linux-headers-3.13.0-32-generic            install
linux-image-3.13.0-24-generic            install
linux-image-3.13.0-32-generic            install
linux-libc-dev                    install
linux-sound-base                install
pptp-linux                    install
syslinux                    install
syslinux-common                    install
syslinux-legacy                    install
util-linux                    install

然后我们要看下我们系统正在使用的是哪个内核,使用如下命令:

uname -r

通过对比我们就知道我们需要删除哪些多余的内核。卸载内核的命令如下:
例如我们要删除3.13.0-32的内核。

apt-get remove linux-headers-3.13.0-32
apt-get remove linux-headers-3.13.0-32-generic

假如我们发现某个内核的状态是deinstall,我们可以使用如下命令来删除这个内核:

dpkg --get-selections | grep deinstall | sed 's/deinstall/\lpurge/' | sudo dpkg --set-selections; sudo dpkg -Pa

这样子我们就能释放掉因内核占用了的inodes索引条目。

但如果是需要存储很零碎的文件服务器的话,建议在部署之前就对inodes上限进行修改。
具体修改方法可以参照这个阿里云的文章。https://help.aliyun.com/knowledge_detail/6526698.html
或者在部署之前先联系IDC的客服进行修改。