
我也問過Linux 的一個兄弟問題。
在 Windows 中(我剛剛測試過):
- 空資料夾的大小為 0 位元組
- 空檔案的大小為 0 位元組
然而,文件和資料夾顯然有名稱,必須儲存在某個地方。
- 它們大致儲存在哪裡?
- 可用於儲存這些資料的最大記憶體是預先定義的數字還是取決於磁碟中的可用空間?
- 具有短名稱的空文件是否比具有較大名稱的空文件佔用更少的空間? (或者也許儲存這些名稱的資料結構對於每個檔案都有固定的位元組數,這可能會用 填充剩餘的位元組
\0
?) - 名稱短的空資料夾是否比名稱大的空資料夾佔用的空間更少?
- 名為 的空資料夾
foobar
比名為 的空檔案佔用更少的空間、相同的空間還是更多的空間foobar
? - 空文件 at
C:\empty.txt
佔用的空間比空文件 at 佔用的空間更少、相同還是更多C:\long\nested\path\until\the\empty\file\is\reached\empty.txt
?
答案1
我還問了一個關於 Linux 的兄弟問題。
差異(如果有的話)不是 Windows 和 Linux 之間的差異(您真的要對 macOS、Solaris 等提出同樣的問題嗎?),而是實際的差異之間的差異。檔案系統用於在磁碟上儲存檔案。
然而,雖然每個作業系統都有其首選的檔案系統,但 Windows 上的 FAT32 的行為仍然與 Linux 上的 FAT32 相同。 Linux 上的 NTFS 運作方式與 Windows 上的 NTFS 相同;等等。同時,同一作業系統上的各種檔案系統的行為可能彼此非常不同 - Ext4 和 Btrfs(或 FAT32 和 NTFS)是英哩即使它們位於同一作業系統上也是如此。
空檔案的大小為 0 位元組
在所有情況下,報告的檔案大小為總是只是實際內容,而不是元資料。實際上,當今使用的所有檔案系統都會將它們視為兩個獨立的事物 - 如果您想像一個檔案由其名稱和附加在一起的資料組成,不,通常不是這樣做的。
通常儲存檔案的名稱在其父目錄中(它還允許硬鏈接,即一個檔案具有多個名稱)。太長的檔名可能會使父目錄看起來更大。
其餘與檔案相關的元資料可能位於名稱附近,或更常見的是位於單獨的區域(例如索引節點表)。
可用於儲存這些資料的最大記憶體是預先定義的數字還是取決於磁碟中的可用空間?
它有所不同。每種檔案系統都有自己的限制-有些有固定的最大值,有些則限制在磁碟的一定百分比等。
例如,在FAT中,每個目錄可以有一定最大數量的「目錄條目」(MS-DOS樣式8.3檔名每個佔據一個條目,但長檔名佔據多個條目)。這不適用於 NTFS,儘管兩者都在 Windows 上。
在 Ext2/Ext4 中,整個檔案系統僅限於一定數量的「索引節點」(每個檔案或目錄一個),它儲存為固定大小記錄列表,並且該區域始終設定為磁碟的固定百分比空間。 Ext4 磁碟上的 inode 耗盡的情況並非聞所未聞。這不適用於 XFS 或 Btrfs,它們都使用動態資料結構(通常是 B 樹)並且只會按需成長。
名稱短的空資料夾是否比名稱大的空資料夾佔用的空間更少? (或者也許儲存這些名稱的資料結構對於每個檔案都有固定的位元組數,這可能會用 \0 填充剩餘的位元組?)
它有所不同。對於某些(大多數?)檔案系統,是的,名稱是可變長度的。
對於某些其他檔案系統,僅在特定閾值下。 FAT/exFAT 和 UFS 及其固定大小的目錄槽就是例子 - 如果一個槽被佔用,那麼它就被佔用,無論它存儲的是用空字節填充的 1 字節文件名還是 16 字節文件名。
名為 foobar 的空資料夾比名為 foobar 的空檔案佔用更少的空間、相同的空間還是更多的空間?
同樣,這取決於檔案系統。
在FAT中,如果我理解正確的話,它們是相同的。在 NTFS 中,我有點懷疑資料夾會更大,但目前我只是猜測。
C:\empty.txt 中的空白檔案比C:\long\nested\path\until\the\empty\file\is\reached\empty.txt 中的空檔案佔用更少的空間、相同的空間還是更多的空間?
文件本身,始終相同,因為檔案不知道其完整路徑 - 作業系統透過向下遍歷父目錄來找到它。這可能是所有檔案系統通用的。
不過,這些資料夾會佔用一些非零空間。