单个目录中是否有最大数量的inode?目录中的inode的最大数量?
我有一个超过200万个文件的目录,无法使ls
命令对该目录工作。所以现在我想知道我是否超过了Linux中inode的限制。 2^64数字限制之前是否有限制?
单个目录中是否有最大数量的inode?目录中的inode的最大数量?
我有一个超过200万个文件的目录,无法使ls
命令对该目录工作。所以现在我想知道我是否超过了Linux中inode的限制。 2^64数字限制之前是否有限制?
你能得到真正的文件数量吗?它是否接近2^n边界?你可以简单地用完RAM来保存所有的文件名吗?
我知道在Windows中至少文件系统的性能会随着文件夹中文件数量的增加而急剧下降,但我认为linux并没有遭受这个问题,至少如果你使用的是命令提示符。上帝帮助你,如果你试图让鹦鹉螺等东西打开一个文件夹与许多文件。
我也想知道这些文件来自哪里。你能够通过编程来计算文件名吗?如果是这样的话,你可以编写一个小程序将它们分类到多个子文件夹中。通常列出特定文件的名称将授予您访问权限,因为试图查找名称将失败。例如,我在窗口中有一个文件夹,其中包含大约85,000个文件。
如果此技术成功,您可能会尝试找到一种方法来使此类排序成为永久性,即使它只是将该小程序作为cron作业运行。如果您可以在某处按日期对文件进行排序,它将特别有效。
编号Inode限制是每个文件系统,并在文件系统创建时决定。你可能会遇到另一个限制,或者'ls'只是表现不佳。
试试这个:
tune2fs -l /dev/DEVICE | grep -i inode
它应该告诉你种种的inode相关信息。
除非您收到错误消息,否则ls正在运行,但速度很慢。你可以尝试寻找在刚刚前十个文件是这样的:
ls -f | head -10
如果你要需要看的,而文件的详细信息,你可以把它们放在一个文件中的第一。您可能希望将输出发送到目前不同的目录中!
ls > ~/lots-of-files.txt
如果你想要做的事的文件,你可以使用xargs的。如果您决定编写某种脚本来完成这项工作,请确保您的脚本将流式处理文件列表,而不是一次处理所有文件。以下是移动所有文件的示例。
ls | xargs -I thefilename mv thefilename ~/some/other/directory
你可以结合起来,与头部移动的文件的数量较少。
ls | head -10000 | xargs -I x mv x /first/ten/thousand/files/go/here
你或许可以结合ls | head
成一个shell脚本,将文件分割成在每个文件的管理数量一堆目录。
ls |头-10不能立即得到结果,因为ls正在排序 - 所以在它能打印任何东西之前它需要读取所有东西。 – 2008-10-20 03:20:26
在这种情况下,请尝试:ls -f |头-10 – 2008-10-27 17:20:34
df -i
应该告诉你,使用和免费的文件系统上的inode数。
尝试ls -U
或ls -f
。
ls
,默认情况下,字母顺序排列的文件。如果您有200万个文件,那么这种排序可能需要很长时间。如果ls -U
(或可能是ls -f
),那么文件名将立即打印。
最大目录大小取决于文件系统,因此确切的限制会有所不同。但是,拥有非常大的目录是一种不好的做法。
您应该考虑通过将文件分类到子目录来缩小目录。一种常见的方案是使用前两个字符用于第一级子目录,如下所示:
${topdir}/aa/aardvark ${topdir}/ai/airplane
此工作得特别好,如果使用UUID,的GUID或内容的散列值来命名。
正如Rob Adams所指出的那样,ls在显示文件之前对文件进行排序。请注意,如果您使用的是NFS,NFS服务器将在发送目录之前排序该目录,并且200万条条目可能比NFS超时要长。这使得目录无法通过NFS登录,即使使用了-f标志。
对于其他网络文件系统也是如此。
虽然没有强迫限制目录中的条目数,这是很好的做法,有一些限制,你预料到的条目。
对于NetBackup,即分析客户的目录下的二进制文件执行某种类型的上市,通过文件的数量巨大超时的每个文件夹(约一百万每个文件夹,SAP工作目录)英寸
我的解决办法(如在此线程查尔斯达菲写),重组子文件夹中的文件夹用更少的档案。
另一种选择是find
:
find . -name * -exec somcommands {} \;
{}
是绝对的文件路径。
优点/缺点是文件被一个接一个地处理。
find . -name * > ls.txt
将打印所有文件名中ls.txt
find . -name * -exec ls -l {} \; > ls.txt
将打印每个文件的所有信息形式LS在ls.txt
什么你打是LS的内部限制。这里是一篇文章,它很好地解释它: http://www.olark.com/spw/2011/08/you-can-list-a-directory-with-8-million-files-but-not-with-ls/
你的意思是最大数条目在一个单一的目录,对吧?毕竟,你可以在一个目录中制作200万个硬链接到同一个文件,这会导致同样的问题。 – 2008-09-17 04:08:36