Disk-Usage
通過用 999 個硬連結和 1 個文件替換 1000 個相同的 1 字節文件,我可以在 ext4 上節省多少空間?
我有一個
ext4
格式化的磁碟,其中包含數千個自動生成且需要的文件。其中幾千個只有一個字節長,有些是兩個字節。兩組小文件中的所有文件都是相同的。通過定位這些(例如 1000 個)長度為 1 字節的文件,刪除每個文件並硬連結到單個代表性文件,我可以節省多少空間?
像這樣:
# ls -l -rw-r----- 1 john john 1 Feb 25 10:29 a -rw-r----- 1 john john 1 Feb 25 10:29 b -rw-r----- 1 john john 1 Feb 25 10:29 c # du -kcs ? 4 a 4 b 4 c 12 total
嘗試鞏固:
# rm b c # ln a b # ln a c ll total 12 -rw-r----- 3 john john 1 Feb 25 10:29 a -rw-r----- 3 john john 1 Feb 25 10:29 b -rw-r----- 3 john john 1 Feb 25 10:29 c # du -kcs ? 4 a 4 total
(請注意,
du
它甚至沒有列出b
,c
我覺得很好奇)。問:如果分配塊大小為 4 KiB,真的那麼容易嗎?在我的 1000 個文件場景中可以節省 999*4 KiB 嗎?
或者,是否
ext4
有能力透明地“合併尾部”,或將小文件儲存在“目錄 inode”中(我隱約記得有些文件系統可以做到這一點)?(我知道文件分配塊可能會有所不同,並且類似的命令
tune2fs -l /dev/sda1
可以告訴我。)
儲存文件分為三個部分:用於儲存文件內容的塊、用於儲存文件元數據的 inode 以及指向該 inode 的目錄條目(或多個條目)。
當您創建多個單獨的文件時,在最常見的情況下,您支付的費用與文件數量一樣多。
使用內聯數據(如果您的文件系統是使用適當的選項創建的),如果文件足夠小,您可以保存用於儲存文件內容的塊,但您仍然需要每個文件一個 inode 和每個文件至少一個目錄條目。
使用硬連結,您可以保存用於儲存文件內容和inode 的塊:只有一個 inode、一個文件數據實例(無論是 inode 內聯還是單獨的),以及與連結一樣多的目錄條目。
鑑於您無論如何都需要儲存目錄條目,硬連結實際上是免費的。其他任何事情都將涉及更多儲存;究竟多少取決於您的文件系統的特定設置。