Files

我的小文件究竟佔用了多少空間?

  • November 13, 2019

我的印像是 tar 不壓縮文件。想像一下,當我壓縮一百萬個小文件(du -h~4.2G)並且生成的 tar 是大小的四分之一(ls -lh mytar.tar~1.3G)時,我會感到驚訝!

顯然,這些小文件佔用的空間超出了它們報告的大小,對另一個問題的回答表明,每個非空文件至少佔用1KB,無論其大小如何。但是這 1KB 是從哪裡來的,它在不同的文件系統(這是 ext4)之間是否有所不同,一個 1.01 KB 的文件是否佔用 2KB?

簡而言之,我如何測量真實的文件大小,尤其是目錄中的許多文件?我試過du --apparent-size -h了,我只得到了 437M,所以我對這三個截然不同的數字感到很困惑。

正如克里斯托弗指出的那樣,這個問題非常類似於為什麼一個文本文件佔用至少 4kB,即使其中只有一個字節的文本?

我不確定我個人是否將其歸類為重複。

但是這1KB是從哪裡來的

這更常見的是 4KB

文件系統以字節塊(AKA 分配單元)而不是單個字節分配。因此,要將單個字節儲存在文件中,該文件將需要一個完整的塊。這意味著該塊的其餘部分留空,但沒有其他文件可以使用它。

這個數字的來源尚不清楚,但它與許多東西相符。例如,在低級別,不可能將單個字節寫入磁碟,您只能寫入其中的一個塊。現代 HD 甚至 SSD 通常都有 4KB 的限制。這意味著如果要寫入一個字節,則必須先載入 4KB,更改該 1 個字節並將整個塊寫回。如果您嘗試寫入整個塊,則無需讀取其原始內容。因此,符合硬體限制的文件系統效率更高。

正如 Stephen Kitt 所指出的,4KB 是許多核心支持 ext3 的最大塊大小。(也在這裡討論)。一般來說,較大的塊大小具有更有效的訪問時間,這意味著“更大的塊更好”。

它在文件系統之間是否不同(這是 ext4)

曾經,512 是一個常見的塊大小,這個數字仍然偶爾會作為預設值出現。Tar 文件非常舊,並且具有相同的 512 字節塊大小(可能是為了與文件系統和硬體保持一致,從而使磁碟寫入非常快)。因此,對於非常小的文件(<512 字節),tar 文件仍然非常浪費

現在擁有 4KB 對齊(而不是 1KB)的文件系統更為常見。

是的,當您格式化文件系統以使用不同的塊大小時,可以配置文件系統。不同的文件系統有不同的限制,但大多數都可以配置。

一個 1.01 KB 的文件會佔用 2KB 嗎?

假設塊大小為 1KB,是的,這是正確的。

引用自:https://unix.stackexchange.com/questions/551771