如何释放inode使用?

我有一个磁盘驱动器的inode使用率是100%(使用df -i命令)。 但是在大幅删除文件之后,使用率保持100%。

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

磁盘空间占用较less的磁盘驱动器如何具有比使用较高磁盘空间的磁盘驱动器更高的Inode使用率?

即使磁盘不是很满,也可以很容易地使用大量的inode。

一个inode被分配给一个文件,所以如果你有文件碎片,每个文件都是1个字节,那么在磁盘用完之前你会用完inode。

如果文件有多个硬链接,删除文件也可能不会减lessinode计数。 正如我所说,inode属于该文件, 而不是目录条目。 如果文件有两个链接到它的目录条目,删除一个不会释放inode。

另外,您可以删除一个目录项,但是如果正在运行的进程仍然打开该文件,则inode将不会被释放。

我最初的build议是删除所有可以使用的文件,然后重新启动该checkbox,以确保没有任何进程保留打开的文件。

如果你这样做,你仍然有问题,让我们知道。

顺便说一句,如果你正在寻找包含大量文件的目录,这个脚本可能会有所帮助:

 #!/bin/bash # count_em - count files in all subdirectories under current directory. echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$ chmod 700 /tmp/count_em_$$ find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n rm -f /tmp/count_em_$$ 

如果你非常不幸,你已经使用了约100%的inode,不能创buildscipt。 你可以用df -ih来检查。

那么这个bash命令可以帮助你:

 sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n 

是的,这将需要时间,但您可以find文件最多的目录。

我的情况是,我没有inodes,我已经删除了我所能做的一切。

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

我在一个Ubuntu的12.04LTS,无法删除旧的Linux内核,占用了约40万个节点,因为由于缺less包而被打破。 而且我不能安装新的软件包,因为我没有inode,所以我被卡住了。

我最终删除了几个旧的Linux内核,以释放约1 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% / 

我的解决scheme

试着找出这是否是inode问题:

 df -ih 

尝试查找大型inode计数的根文件夹:

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

尝试find特定的文件夹:

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

如果这是linux的头文件,尝试删除最老的:

 sudo apt-get autoremove linux-headers-3.13.0-24 

就我个人而言,我把他们移到一个安装文件夹(因为对我来说,最后一个命令失败),并安装最新的:

 sudo apt-get autoremove -f 

这解决了我的问题。

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

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

如果您使用的是较旧的PHP版本,则可能位于/var/lib/php5下。

使用以下权限重新创build它

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

默认情况下Debian目录下的权限显示为drwx-wx-wt (1733)

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

 rm -rf /var/cache/eaccelerator/* 

(或任何你的caching目录)

我们在一个HostGator帐户(谁负责所有主机的inode限制)之后,经历了这个垃圾邮件攻击。 它在/root/.cpanel/comet中留下了大量的队列logging。 如果发生这种情况,并且您发现没有空闲的inode,则可以通过shell运行此cPanel实用程序:

 /usr/local/cpanel/bin/purge_dead_comet_files 

我们最近面临类似的问题,如果一个进程引用一个被删除的文件,Inode不会被释放,所以你需要检查lsof /,杀死/重启进程会释放inode。

如果我在这里错了,纠正我。

您可以使用RSYNC删除大量的文件

 rsync -a --delete blanktest/ test/ 

创build带有0个文件的blanktest文件夹,命令将同步你的testing文件夹与大量的文件(我用这种方法删除了近5M文件)。

感谢http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux

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

到目前为止,对这个问题的答案很多,上面所有的都是具体的。 我认为在你使用stat你会安全的,但是OS依赖,你可能会得到一些inode错误。 因此,使用64bit来实现自己的stat调用function,以避免任何溢出问题似乎相当兼容。

邮件目录可能充满文件:

/家/用户名/的Maildir /新