我有一个磁盘驱动器,其中inode使用率为100%(使用df -i命令)。 但是在大量删除文件后,使用率仍然是100%。

那么正确的做法是什么呢?

一个磁盘空间使用较少的磁盘驱动器怎么可能有 更高的Inode使用率比更高的磁盘驱动器磁盘空间使用率?

它是可能的,如果我压缩大量的文件,会减少使用的索引节点数?


当前回答

首先,获取inode存储使用情况:

df -i

下一步就是找到那些文件。为此,我们可以使用一个小脚本列出目录和其中的文件数量。

for i in /*; do echo $i; find $i |wc -l; done

从输出中,您可以看到使用大量文件的目录,然后对该目录重复此脚本,如下所示。重复该操作,直到看到可疑目录。

for i in /home/*; do echo $i; find $i |wc -l; done

当您发现有大量不需要的文件的可疑目录时。只需删除该目录上不需要的文件,并通过以下命令释放一些inode空间。

rm -rf /home/bad_user/directory_with_lots_of_empty_files

你已经成功地解决了这个问题。现在再次使用df -i命令检查inode的使用情况,您可以看到如下的差异。

df -i

其他回答

在上面的一个回答中,有人建议会话是inode耗尽的原因,在我们的例子中正是如此。为了补充这个答案,我建议检查php.ini文件并确保session。Gc_probability = 1也是session。gc_除数= 1000和 会话。Gc_maxlifetime = 1440。在我们的案例会议上。Gc_probability等于0,导致了这个问题。

eaccelerator可能会导致这个问题,因为它将PHP编译成块…我在一个负载很重的网站上使用亚马逊AWS服务器时遇到过这个问题。如果您仍然有问题,可以通过删除/var/cache/eaccelerator中的eaccelerator缓存来释放Inodes。

rm -rf /var/cache/eaccelerator/*

(或者你的缓存目录)

我的情况是我没有inodes了,我已经删除了所有我能删除的东西。

$ df -i
Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1      942080 507361     11  100% /

我使用的是ubuntu 12.04LTS,无法删除旧的linux内核,它占用了大约400,000个inodes,因为apt因为缺少一个包而损坏了。我无法安装新包,因为我没有inodes了,所以我被卡住了。

我最终手动删除了一些旧的linux内核,以释放大约10,000个inode

$ sudo rm -rf /usr/src/linux-headers-3.2.0-2*

这足以让我安装丢失的包并修复我的apt

$ sudo apt-get install linux-headers-3.2.0-76-generic-pae

然后使用apt删除剩余的旧Linux内核

$ sudo apt-get autoremove

现在情况好多了

$ df -i
Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1      942080 507361 434719   54% /

如前所述,如果有很多小文件,文件系统可能会耗尽inode。我提供了一些方法来查找这里包含大多数文件的目录。

我有同样的问题,通过删除php的目录会话来修复它

rm -rf /var/lib/php/sessions/

如果您使用的是较旧的php版本,它可能在/var/lib/php5下。

使用以下权限重新创建它

mkdir /var/lib/php/sessions/ && chmod 1733 /var/lib/php/sessions/

Debian默认目录权限显示drwx-wx-wt (1733)