代码之家  ›  专栏  ›  技术社区  ›  SO Stinks ennuikiller

文件名的长度如何影响磁盘上的剩余存储空间?

  •  5
  • SO Stinks ennuikiller  · 技术社区  · 14 年前

    文件名的长度如何影响磁盘上的剩余存储空间?

    我知道这依赖于文件系统。特别是我在考虑ext系列的文件系统。我不完全理解inode如何影响磁盘空间以及文件名本身是如何存储的。也很难获得这个问题的相关搜索结果。所以我才来问。在Linux上,最大文件名长度通常为255或256个字符。创建文件系统时,是否为每个文件名保留了一定的空间?换句话说,磁盘存储是否不受实际文件名的影响,因为已经使用了最大值?还是比这更复杂?

    假设我有一个名为“joe.txt”的文件,并将其重命名为“joe2.txt”。在此之后,可用磁盘空间量是否减少了?“joe_version.txt”或“joe_original_version_with_bug_that_jim_resolved.txt”这样的长名称怎么办?我担心8、16、32、64等字符的阈值。我将存储数百万个图像。我以前从来没有担心过这样的问题,所以我不完全确定这是如何工作的。

    虽然ext是我唯一使用的文件系统,但是讨论fat和其他文件系统可能对其他有类似问题的人有用。

    2 回复  |  直到 14 年前
        1
  •  2
  •   janneb    14 年前

    在Linux(或者更一般地说,UNIX类型的文件系统)中,文件名存储在目录条目inode中,其中包含目录中每个文件的(文件名、inode编号)映射列表。我的理解是,对于每个文件名,都有为名称\max字符保留的空间。实际上,在Linux上,max的名称是255。

    因此,要回答您的问题,当创建文件系统时,没有为文件名保留空间,但是一旦创建了文件名,将为文件名保留最大字节数。此外,对于目录inode,我的理解是,至少在ext2/3/4空间上,根据需要以磁盘块(4KB,除非您做了非常奇怪的事情)的粒度分配空间。例如,一个目录至少占用4kb(加上父目录inode中的一个条目),如果(文件名,inode)对的列表不适合该4kb(减去其他开销,例如目录权限),它将分配一个新的4kb块来继续列表,依此类推(ext2/3使用间接块方案,而ext4使用扩展数据块)。

        2
  •  1
  •   user82238    14 年前

    FAT16预分配。

    FAT32使用一种变通方法来提供长文件名;随着文件名变长,需要额外的目录文件块来存储额外的字符,而目录文件是常规文件,因此这会消耗额外的磁盘空间。但是,最小的分配是一个集群,因此,除非附加的文件名存储超过集群边界,否则不会从原本可以使用的磁盘空间中消耗额外的磁盘空间。

    我并不熟悉在UNIX类型的文件系统中如何处理文件名。