我有一个inode使用率为100%(使用df -i
命令)的磁盘驱动器。但是,在实质上删除文件后,使用率仍为100%。
那么正确的方法是什么?
与磁盘空间使用量较高的磁盘驱动器相比,磁盘空间使用量较小的磁盘驱动器如何可能具有更高的Inode使用率?
如果我压缩大量文件,是否有可能减少使用的inode数量?
我有一个inode使用率为100%(使用df -i
命令)的磁盘驱动器。但是,在实质上删除文件后,使用率仍为100%。
那么正确的方法是什么?
与磁盘空间使用量较高的磁盘驱动器相比,磁盘空间使用量较小的磁盘驱动器如何可能具有更高的Inode使用率?
如果我压缩大量文件,是否有可能减少使用的inode数量?
Answers:
即使磁盘不是很满,使用大量的inode还是很容易的。
索引节点已分配给文件,因此,如果您有成千上万个文件(每个均为1字节),则在磁盘用尽之前,节点将用尽。
如果文件具有多个硬链接,则删除文件也可能不会减少inode的数量。正如我所说,inode属于文件,而不是目录条目。如果文件有两个链接的目录条目,则删除其中一个不会释放索引节点。
此外,您可以删除目录条目,但是,如果正在运行的进程仍打开了文件,则不会释放索引节点。
我最初的建议是删除所有可以的文件,然后重新启动该框,以确保没有任何进程使文件保持打开状态。
如果您这样做仍然有问题,请告诉我们。
顺便说一句,如果您要查找包含许多文件的目录,此脚本可能会有所帮助:
#!/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_$$
>/tmp/count_em_$$
只有在有空间的情况下,该方法才起作用...如果是这种情况,请参阅@simon的答案。
/tmp
内容不会影响您的其他文件系统。
ls -A
代替ls -a
。你为什么要数。和..?
如果您很不幸,您已经使用了所有索引节点的大约100%,并且无法创建Scipt。您可以使用进行检查df -ih
。
然后,此bash命令可能会帮助您:
sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
是的,这将花费一些时间,但是您可以找到包含最多文件的目录。
awk
可以保留目录的哈希值和文件计数,而无需uniqing并排列成千上万的行。就是说,也许这是一个改进:find . -maxdepth 1 -type d | grep -v '^\.$' | xargs -n 1 -i{} find {} -xdev -type f | cut -d "/" -f 2 | uniq -c | sort -n
—仅对最后一个列表进行排序。
sort
也可能会失败,因为可能无法将所有内容保留在内存中,并会尝试自动回退以写入临时文件。一个显然会失败的过程……
sort
对于我来说失败了,但是我能够给出成功的--buffer-size=10G
方法。
我的情况是我没有i节点,并且已经删除了所有可能的内容。
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 11 100% /
我在ubuntu 12.04LTS上,无法删除占用约40万个inode的旧linux内核,因为apt由于缺少软件包而被破坏。而且我无法安装新软件包,因为我不在inode里面,所以被卡住了。
我最终手动删除了一些旧的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% /
sudo rm -rf /usr/src/linux-headers-3.2.0-2*
,如果我确定我没有使用该内核?
$ sudo apt-get autoremove
独自打来的电话,对我有用。
我的解决方案:
尝试查找这是否是inode的问题:
df -ih
尝试查找具有大inode数量的根文件夹:
for i in /*; do echo $i; find $i |wc -l; done
尝试查找特定的文件夹:
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
这解决了我的问题。
SpamAssasin-Temp
。find /var/spool/MailScanner/incoming/SpamAssassin-Temp -mtime +1 -print | xargs rm -f
做的工作:)谢谢!
for i in /usr/src/*; do echo -en "$i\t"; find $i 2>/dev/null |wc -l; done
for i in /src/*; do echo "$i, `find $i |wc -l`"; done|sort -nrk 2|head -10
炫耀前10大目录
我有同样的问题,通过删除php的目录会话来解决
rm -rf /var/lib/php/sessions/
可能在 /var/lib/php5
如果您使用的是较早的php版本。
使用以下权限重新创建
mkdir /var/lib/php/sessions/ && chmod 1733 /var/lib/php/sessions/
默认情况下,显示了对Debian上目录的许可drwx-wx-wt
(1733)
rm -rf /var/lib/php/sessions/*
可能会是一个更好的命令-它不会删除会话目录,只会删除其目录...然后,您不必担心重新创建它
您可以使用RSYNC删除大量文件
rsync -a --delete blanktest/ test/
创建其中包含0个文件的blanktest文件夹,命令将使您的测试文件夹与大量文件同步(我已使用此方法删除了近5M个文件)。
感谢http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux
rm *
,由于扩展了通配符并传递/处理了每个参数,因此这比处理大量文件要快,但是rm test/
对于删除test/
包含大量文件的文件夹来说则是很好的选择。
后来的答案:就我而言,这是我的会话文件
/var/lib/php/sessions
在使用Inodes。
我什至无法打开crontab或创建新目录,更不用说触发删除操作了。由于我使用PHP,因此我们有了本指南,在这里我从示例1复制了代码并设置了cronjob来执行那部分代码。
<?php
// Note: This script should be executed by the same user of web server
process.
// Need active session to initialize session data storage access.
session_start();
// Executes GC immediately
session_gc();
// Clean up session ID created by session_gc()
session_destroy();
?>
如果您想知道如何设法打开crontab,那么好了,我通过CLI手动删除了一些会话。
希望这可以帮助!
如果使用docker,请删除所有图像。他们使用了很多空间。
停止所有容器
docker stop $(docker ps -a -q)
删除所有容器
docker rm $(docker ps -a -q)
删除所有图片
docker rmi $(docker images -q)
对我有用