6

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

我意识到这取决于文件系统。特别是我正在考虑 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 和其他文件系统可能对其他有类似问题的人有用。

4

2 回答 2

4

在 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 使用范围)。

于 2010-10-21T13:39:00.307 回答
1

FAT16 预分配。

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

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

于 2010-10-21T13:06:55.737 回答