2011-02-02 58 views
2

我需要创建几百到几千个临时硬盘或符号链接,这些链接将在创建后立即删除。为我的目的,这两种类型的链接将工作(即目标不是目录,它始终存在于同一个文件系统)创建/删除多个硬链接的缺点?

据我了解,符号链接创建一个小文件,其中包含原始文件的路径。硬链接创建对同一个inode中的数据的引用。所以也许如果我要创建/删除成千上万的这些链接,创建和删除数以千计的小文件(符号链接)还是成千上万的这些引用(硬链接)会更好?看起来像一个税收硬盘驱动器(可能是碎片),而另一个可能会对文件系统本身税收? inode引用存储在哪里。我是否会通过创建如此多的硬链接来破坏文件系统?速度怎么样?

感谢您的专业知识!

这是一个解决方法,可以使用ffmpeg从目录中的任意图像子集中编码电影。由于ffmpeg要求文件被正确命名(例如frame%04d.jpg),我意识到我只需创建指向文件子集的hard/sym链接,并恰当地命名链接即可。这避免了重命名原始文件并且不得不实际复制数据。它工作的很好,但它需要反复创建和删除成千上万的链接。

排序地址的这个问题太相信: convert image sequence using ffmpeg

回答

3

如果此活动破坏您的文件系统,那么您的文件系统出现故障,而不是您。文件系统通常非常可靠,所以不用担心。

这两个选项都需要在目录中添加一个条目。符号链接也需要创建一个文件。访问文件时,硬链接直接跳转到内容,而访问符号链接需要找到符号链接文件,读取它,找到包含内容的目录,找到内容的位置,然后访问它。因此符号链接对于文件系统来说是更多的工作。

但是,与实际读取文件中的数据的工作相比,差别很小。因此,我不会担心它,只要用最好的方式给你提供你想要的语义。

3

既然你是不是想创造数十万个到同一个文件,硬链接是稍好一点的表演。

但是,/ tmp if/tmp中的符号链接是tmpfs的性能更好。

哦,符号链接太小,导致碎片问题。

1

这两个选项都要求在目录inode中添加一个文件条目,通过分配新块可以增加目录结构。

但是,符号链接需要分配inode,而文件系统对inode有限制。您的成千上万符号链接可能会达到此限制,您可能会获得“文件没有足够空间”错误消息,即使有千兆字节空闲。

默认情况下,文件系统创建工具根据物理分区大小选择最大数量的inode。例如,对于Linux ext2/3/4,mkfs.ext3使用的bytes-per-inode比率可以在/etc/mke2fs.conf中找到。

对于现有的文件系统,这里是一个命令获得的inode信息:

# dumpe2fs /dev/sda1 | grep -i inode | less 

Inode count:    979200 
Free inodes:    742304 
Inodes per group:   16320 
Inode blocks per group: 510 
First inode:    11 
Inode size:    128 
Journal inode:   8 
First orphan inode:  441066 
Journal backup:   inode blocks 

作为一个结论,你应该喜欢硬链接主要用于在磁盘上的资源消耗和内存(VFS结构高速缓存)。

另一个建议是:不要在同一目录下创建的文件太多,2'000文件是一个合理的限制,以避免出现性能问题。