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

Dr.*_* II 5 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和其他可能对其他有类似问题的人有用.

jan*_*neb 5

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

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