如何释放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 /新