2010-09-23 35 views
3

文件名的長度如何影響磁盤上剩餘的存儲空間?文件名的長度如何影響磁盤上剩餘的存儲空間?

我意識到這是依賴於文件系統。特別是我正在考慮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和其他文件系統可能對有類似問題的其他人有用。

回答

1

在Linux(或更一般地說,Unix類型文件系統)文件名稱存儲在目錄條目inode中,其中包含目錄中每個文件的(filename,inode number)映射列表。我的理解是,對於每個文件名,都會爲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使用extent)。

+0

我希望更多的人最終能評論你的答案並加以確認。我認爲這是正確的,但我仍然不知道100%。 – 2011-04-28 19:15:09

0

FAT16預先分配。

FAT32使用解決方法來提供長文件名;隨着文件名變長,需要額外的目錄文件塊來存儲額外的字符 - 而目錄文件是常規文件,所以這消耗了額外的磁盤空間。但是,最小的分配是一個集羣,因此,除非額外的文件名存儲超出集羣邊界,否則不會消耗其他磁盤空間。

我並不直接熟悉如何在UNIX類型的文件系統中處理文件名。

相關問題