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

时间:2010-09-23 02:39:20

标签: filesystems filenames diskspace ext3 ext4

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

我意识到这是依赖于文件系统的。特别是我在考虑EXT系列文件系统。我不完全了解inode如何影响磁盘空间以及文件名本身的存储方式。很难获得这个问题的相关搜索结果。这就是我在这里问的原因。在linux上,最大文件名长度通常为255或256个字符。创建文件系统时,每个文件名的“保留”空间量是多少?换句话说,磁盘存储是否不受实际文件名的影响,因为已经使用了最大值?还是比这更复杂?

假设我有一个名为“joe.txt”的文件并将其重命名为“joe2.txt”。此后可用磁盘空间量是否减少了?那些更长的名字如“joe_version.txt”或“joe_original_version_with_bug_that_Jim_solved.txt”呢?我担心8,16,32,64等字符的阈值。我将存储数百万张图片。我之前从未担心过这样的问题,所以我不能完全确定它是如何工作的。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

FAT16预先分配。

FAT32使用解决方法来提供长文件名;随着文件名变长,需要额外的目录文件块来存储额外的字符 - 目录文件是常规文件,因此这会占用额外的磁盘空间。但是,最小的分配是一个群集,因此除非额外的文件名存储超出群集边界,否则不会消耗额外的磁盘空间。否则,您将无法使用它。

我并不习惯熟悉UNIX类型文件系统中文件名的处理方式。