我有一个磁盘驱动器,其中inode使用率为100%(使用df -i命令)。 但是在大量删除文件后,使用率仍然是100%。
那么正确的做法是什么呢?
一个磁盘空间使用较少的磁盘驱动器怎么可能有 更高的Inode使用率比更高的磁盘驱动器磁盘空间使用率?
它是可能的,如果我压缩大量的文件,会减少使用的索引节点数?
我有一个磁盘驱动器,其中inode使用率为100%(使用df -i命令)。 但是在大量删除文件后,使用率仍然是100%。
那么正确的做法是什么呢?
一个磁盘空间使用较少的磁盘驱动器怎么可能有 更高的Inode使用率比更高的磁盘驱动器磁盘空间使用率?
它是可能的,如果我压缩大量的文件,会减少使用的索引节点数?
当前回答
对于大量的文件,可以使用RSYNC删除
rsync -a --delete blanktest/ test/
创建空白测试文件夹,其中包含0个文件,命令将与大量文件同步测试文件夹(我已经使用这种方法删除了近500万个文件)。
感谢http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux
其他回答
这篇文章拯救了我: https://bewilderedoctothorpe.net/2018/12/21/out-of-inodes/
find . -maxdepth 1 -type d | grep -v '^\.$' | xargs -n 1 -i{} find {} -xdev -type f | cut -d "/" -f 2 | uniq -c | sort -n
即使磁盘不是很满,也很容易在磁盘上使用大量的inode。
inode被分配给一个文件,因此,如果您有无数个文件,每个文件都是1个字节,那么在耗尽磁盘之前,您就会耗尽inode。
如果文件有多个硬链接,删除文件也可能不会减少inode计数。正如我所说,inode属于文件,而不是目录条目。如果一个文件有两个目录条目链接到它,删除一个不会释放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_$$
如前所述,如果有很多小文件,文件系统可能会耗尽inode。我提供了一些方法来查找这里包含大多数文件的目录。
我们最近遇到了类似的问题,如果一个进程指向一个被删除的文件,Inode不会被释放,所以你需要检查lsof /, kill/ restart进程会释放Inode。
如果我说错了,请指正。
你可以看到这个信息
for i in /var/run/*;do echo -n "$i "; find $i| wc -l;done | column -t