題 有沒有辦法讓ext文件系統在Linux中使用更少的空間?


我有一堆外部和內部硬盤驅動器,我在Linux系統上使用。我只有Linux系統,所以使用Linux文件系統才有意義,對吧?但是我現在到處都在使用NTFS,因為它為我提供了最有用的硬盤空間。

我現在想切換到Linux文件系統,主要是因為權限和兼容性(例如我無法讓我的LUKS加密的NTFS分區在Linux下調整大小,不斷告訴我在Windows下的chkdsk)。

然而,當我格式化那些硬盤驅動器時,我嘗試了一堆不同的文件系統和每個Linux文件系統,甚至ext2,據我所知,它沒有日誌,為自己使用了大量的空間。我不記得確切的值,但它超過100GB,NTFS讓我在2TB硬盤上獲得更多,這是很多。

所以我的問題是:有沒有辦法讓ext文件系統為自己使用更少的空間?或者是否有另一個文件系統(我已經嘗試過ext2,ext3,ext4,NTFS和vfat - 它們都沒有接近NTFS提供給我的可用空間),具有完美的Linux支持和可用空間?

我很想知道文件系統(特別是沒有日記的ext2)如何以及為什麼使用比NTFS更多的空間,我不知道還有什麼要問的。如果可能的話,我更喜歡使用ext4而不使用日記的方式以及任何耗費這麼多空間的東西。


48
2017-08-05 18:36


起源


你有沒有 看過這個帖子? - JakeGould
我有,它解釋了什麼消耗了額外的空間,但NTFS和ext之間的差異比reiserfs和ext之間的差大很多,我想知道是否有任何方法可以使它更小。例如,在1TB硬盤上,我可以使用989GB和NTFS。 ext4會給我大約909GB。 - confetti
很公平。體面的問題和答案也很有啟發性。 - JakeGould
你如何實際測量可用的空間?這很重要,因為根據您看到的值,您可能會或可能看不到5%預留的影響,例如鍊接問題中所述 - eMBee
請記住,對文件系統(如ext3和ext4)進行日記記錄是一件好事。如果它是一個USB,很容易失去外接驅動器的電源或意外拔掉它,當發生這種情況時,它通常沒什麼大不了的,因為當它開始備份時它會自動使用日誌進行治療。如果沒有這個安全網,情況會更糟。這不僅僅是更好的情況。 - Joe


答案:


默認情況下,ext2及其後繼者保留5%的文件系統供root用戶使用。這樣可以減少碎片,並使管理員或任何root擁有的守護程序不太可能無法工作。

這些保留塊阻止不以root身份運行的程序填滿磁盤。 這些考慮因素是否證明容量損失取決於文件​​系統的用途。

5%的數量是在20世紀80年代設定的,當時磁盤要小得多,但只是保持不變。如今1%可能足以保證系統穩定性。

可以使用更改預訂 -m 的選擇 tune2fs 命令:

tune2fs -m 0 /dev/sda1

這會將保留塊百分比設置為0%(0塊)。

要獲取當前值(以及其他值),請使用以下命令:

tune2fs -l <device> 

94
2017-08-05 18:44



這將完美地解釋可用空間的巨大差異(因為2TB的5%是100GB)。磁盤不會用作root或系統文件相關的任何東西,所以我認為禁用它會保存。我有一個問題:root擁有的程序如何知道有比非root程序更多的可用空間?運行 df 因為非root與root顯示沒有區別。 - confetti
@confetti:因為VFS沒有拒絕他們嘗試寫入錯誤的磁盤(直到卷為 其實 當然是完整的)。 - Ignacio Vazquez-Abrams
tune2fs -l <device> 應該給出這個價值。 5%的數量是在20世紀80年代設定的,當時磁盤要小得多,但只是保持不變。如今1%可能足以保證系統穩定性。 - harrymc
XFS保留較小的5%或8192塊(32 MiB),因此與文件系統的大小相比,保留量通常很小。 - Michael Hampton
非常感謝大家的解釋。這有助於我理解。我的磁盤以前完全填滿了它的最後一個字節,但我的系統沒有完全失敗,現在我理解為什麼。 - confetti


如果您打算存儲在其上的數據是可壓縮的,則安裝btrfs compress=zstd (要么 compress-force=zstd)probbaly會比ext *使用更少的磁盤空間

  • 這將使btrfs在將數據寫入磁盤之前透明地壓縮數據,並在讀取數據時透明地解壓縮。另外,ext4在文件系統創建時預先分配所有inode,btrfs根據需要創建它們,我想這也可能節省一些空間。

3
2017-08-06 07:57



你介意在這個答案中添加更多信息嗎? (它是如何工作的,它做了什麼,也許是一個參考,...) - confetti
@confetti是這樣的嗎? patchwork.kernel.org/patch/9817875 - hanshenrik
我真的很喜歡這個想法,但有關這將如何影響速度和性能的更多信息,這將是很好的。 - confetti
@confetti,因為你使用的是硬盤,它可能會提高性能。 CPU比硬盤驅動器快得多,因此磁盤訪問的緩慢部分是將數據打開和關閉磁盤;壓縮或解壓縮所花費的時間不會很明顯。 - Mark
另一方面,現今大多數類型的大文件(例如圖像,音頻,視頻,甚至大多數富文本文檔格式)往往已經被壓縮,並且通常不會受益於額外的壓縮。至少不是在文件系統級別執行的簡單通用類型。 - Ilmari Karonen


尚未討論的另一點是您在文件系統上保留的inode數量。

默認情況下,mkfs會創建許多inode,這樣就可以將大量非常小的文件放入文件系統中。如果您知道文件非常大並且您只在FS上放置少量文件,則可以減少inode的數量。

照顧自己!此數字(即空間與索引節點數之間的比率)只能在文件系統創建時設置。即使擴展FS,比率仍然相同。


3
2017-08-07 15:44



或者,如果您知道要存儲大量非常小的文件,則可以增加inode的數量並減小塊大小,這樣就不會浪費太多空間。 (每個文件必須至少佔用一個塊,即使它是1個字節。使用ls -ls來比較磁盤上使用的大小。) - Perkins
@Perkins你是對的,但我認為這僅適用於非常小的文件:默認塊大小為4kiB(IIRC),最小值為1 kiB。所以不是那麼贏,除了你的磁盤真的充滿了這些文件。但是,我明天可能會深入研究這個問題。 - glglgl
或者使用btrfs,根據需要創建inode。而ext4的inode是在文件系統創建時分配的,並且在創建後無法調整大小,硬限制為40億,btrfs的inode根據需要動態創建,硬限制為2 ^ 64,大約18.4 quintillion,大約46億高於極限ext4:p的硬限制的時間 - hanshenrik
讓我想起設置一個usenet線軸。 ext4將在inode本身內存儲微小的(限制在60-160字節之間,具體取決於很多東西)。 - mr.spuratic
@hanshenrik請注意,你對btrfs有相同的blockize限制(有幾種額外的解決方法)所以你仍然需要知道你將要存儲什麼類型的文件(大或小或兩者)如果要從中擠出最大存儲量,請相應地調整文件系統。如果您存儲蓬鬆的數據,自動壓縮的可用性確實有很大幫助。 - Perkins