我有一台 Ubuntu 14.04 伺服器,無法建立超過 65,000 目錄的新目錄。我已經運行了 atune2fs -l
並可以看到該dir_nlink
標誌已設定。有誰知道還可以檢查什麼來允許這種情況發生?我有許多此伺服器配置的其他克隆,它們都超過了 65,000 個標記並且按預期工作。我比較了tune2fs -l
輸出,它們看起來是一樣的。我還有幾百萬個空閒索引節點和區塊。我已經卸載並重新安裝了檔案系統,但沒有任何變更。
答案1
Ext4目錄限制
- 傳統的近線性目錄
- 基於哈希的目錄
線性目錄的連結限制為 65,000 個,即大約可以有很多子目錄。基於哈希的目錄沒有限制。
建立新檔案系統時,預設為哈希目錄。如果您的目錄仍然是線性的,則可能是因為您升級了舊的 ext3 分割區。 (Ext3 後來獲得了基於哈希的目錄功能。)
測試目錄是幾乎線性的還是基於散列的
$ sudo debugfs /dev/partition
$ htree /
htree: Not a hash-indexed directory
轉換
- 解除安裝分割區
啟用
dir_index
(基於哈希的目錄)和dir_nlink
(無限連結)功能。sudo tune2fs -O dir_index,dir_nlink /dev/partition
所有新建立的目錄現在都能夠容納無限的子目錄。
如果要轉換現有目錄,請執行下列操作:
- 卸載分割區(對於防止資料遺失很重要)
告訴 fsck 重建目錄索引:
sudo e2fsck -f -D /dev/partition
-f
強制 fsck 檢查磁碟,即使它處於乾淨狀態
-D
告訴 e2fsck 重建索引:
此選項使 e2fsck 嘗試最佳化所有目錄,如果檔案系統支援目錄索引,則透過重新索引它們,或透過對較小目錄或使用傳統線性目錄的檔案系統進行排序和壓縮目錄。