Linux

EXT4“設備上沒有剩餘空間 (28)”不正確

  • February 18, 2022

我已經完成了有關 inode 使用、安裝問題和其他問題的其他問題/答案,但這些問題似乎都不適用……

df -h

/dev/sdd1 931G 100G 785G 12% /media/teradik

df -ih

/dev/sdd1 59M 12M 47M 21% /media/teradik

基本上,我有一個 1TB 大小的 EXT4 格式化驅動器,並且正在將大約 1200 萬(12201106)個文件寫入一個目錄。我找不到關於 EXT4 的每個目錄的文件限制的任何文件,但文件系統報告沒有剩餘空間。

奇怪的是,我仍然可以在驅動器和目標文件夾上創建新文件,但是在執行大型 cp/rsync 時,呼叫mkstemprename報告設備上沒有剩餘空間。

rsync:mkstemp“/media/teradisk/files/f.xml.No79k5”失敗:設備上沒有剩餘空間(28)

rsync:重命名“/media/teradisk/files/f.xml.No79k5”->“files/f.xml”:設備上沒有剩餘空間 (28)

我知道出於很多原因不建議將這麼多文件儲存在一個目錄中,但除非我能提供幫助,否則我不希望將它們分開。

tmpfs、設備和其他一切的 Inode 和空間使用情況看起來都很好。對原因有任何想法嗎?

XFS 文件系統將是您現在嘗試做的更受支持(長期)的解決方案。大文件數目錄對於 XFS 來說不是問題。當然,在應用程序級別解決這個問題也會有所幫助……

看來您正在達到目錄大小限制。目錄本身是某種特殊文件,其中包含所有文件的名稱(+ inode 編號,可能還有其他一些元數據)。而且不能大於2G。

無論如何,在一個目錄中包含數千個以上的文件並不是一個好主意:按文件名搜尋會非常慢,並且使用 ls、rm 等標準工具會遇到很多問題。

更新:

啊哈!

http://old.nabble.com/re:The-maximum-number-of-files-under-a-folder-td16033098.html

2008 年 3 月 13 日 13:23 -0400,Theodore Ts’o 寫道:

> > 文件夾中的文件數量沒有限制,除了目錄本身不能大於 2GB 以及整個文件系統可用的 inode 數量。當然,如果您沒有打開目錄索引,您可能不喜歡進行目錄查找的性能,但那是另一回事。 > > >

目前的 ext3 htree 程式碼也有一個限制,只有 2 級深。除了 2GB 的限制,您還會遇到大約 15M 文件的問題,具體取決於文件​​名的長度。

引用自:https://serverfault.com/questions/384541