ext4 Ubuntu 18.04 檔案系統錯誤“結構需要清理”

ext4 Ubuntu 18.04 檔案系統錯誤“結構需要清理”

我想要準備一個 24TB 的磁碟,能夠在一個目錄中包含大量的目錄和文件(請不要告訴我改變這個策略,它是一個軟體使用的結構,對我們來說是一個黑盒子所以我們無法改變這種方法)。據我充分研究,ext4 文件系統有能力在一個目錄中儲存數十億個文件,但應該使用一些特殊的標誌和參數來準備。這是我根據我的研究使用的:

sudo mke2fs -T news /dev/sdb1
sudo tune2fs -O dir_index /dev/sdb1
sudo tune2fs -O large_dir /dev/sdb1
sudo tune2fs -O dir_nlink /dev/sdb1


sudo mkdir /hdd
sudo gedit /etc/fstab

- add following to the end of the file:
/dev/sdb1    /hdd    ext4    defaults,noatime    0    0

sudo mount /hdd

為了測試結構,我準備了 bash 腳本,在單一目錄中建立目錄和檔案。像這樣的東西:

for ((i = 1000000; i <= 200000000; i++))
do
  sudo mkdir "/hdd/largedir/$i" -p
  sudo cp "sample-file.jpg" "/hdd/largedir/$i"
  if (( $i % 1000 == 0 ));
  then
    echo "$i created";
  fi;
done

經過幾個小時的工作後,當我檢查系統時,它會列印以下錯誤:

Structure needs cleaning

在我的測試中,它不是為所有文件和目錄列印此錯誤。例如,我可以建立名為「10000」的目錄,但無法建立名為「1000」的目錄。我還使用以下命令更改了哈希演算法:

sudo tune2fs -E "hash_alg=tea" /dev/sdb1

並重新啟動並重新安裝系統,但問題仍然存在。有誰知道問題是什麼以及為什麼檔案系統上會出現這種情況? ext4 檔案系統是否不夠強大,無法擁有如此大的結構?我在一些頁面上讀到有關使用 xfs 而不是 ext4 來處理大量文件的內容。這是真的嗎?

可以看到,在文件操作過程中,系統沒有出現斷電、當機的情況。當一切正常的時候我沒想到會有這樣的行為。

-- 已編輯以取得更多資訊:--

磁碟的inode資訊如下:

Filesystem        Inodes     IUsed     IFree IUse% Mounted on
/dev/sdb1      421216256 183643803 237572453   44% /hdd

空間資訊如下:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        26T  3.1T   21T  13% /hdd

我檢查了檔案系統,它是 ext4(如各種工具所示)。例如,gparted 將分割區檔案系統顯示為 ext4。關於功能,我的 ubuntu 18.04 LTS 上預設未啟用上述功能。我在先前的測試中遇到了幾個錯誤,最後達到了這個目的。

答案1

使用該命令,sudo mke2fs -T news /dev/sdb1您不一定要建立 ext4 檔案系統,而是建立一個外部2文件系統。

假設您的 Ubuntu 18.04 具有/etc/mke2fs.conf與我的 Debian 10 基本相同的文件,那麼dir_index已經啟用作為使用現代 .NET 創建的所有 ext2/3/4 文件系統的當前基本功能集mke2fs。並且dir_nlink預設啟用外部4文件系統類型。

手冊mke2fs.conf(5)頁說:「如果使用者和mke2fs.conf檔案都沒有指定預設檔案系統類型,mke2fs則將使用預設檔案系統類型外部3如果透過命令列選項請求日誌,或者外部2如果不。

根據該/etc/mke2fs.conf文件,該-T news選項只指定了inode_ratio = 4096選項,沒有其他任何內容。因此,除非您使用mkfs.ext4表單而不是普通表單mke2fs,否則您可能會得到一個外部2專為平均大小為 4 kB 或更小的檔案而客製化的檔案系統。

Debian 沒有fs_type =[defaults]部分中指定mke2fs.conf,而且您沒有包含命令-j的選項mke2fs,因此如果 Ubuntu 的選項mke2fs.conf與 Debian 的選項相同(通常如此),您的命令可能會為您提供 24 TB外部2文件系統,這可能還沒有經過任何人的特別測試。

手冊ext4(5)頁說64bit文件系統功能將根據需要自動設置,這可能解釋了為什麼這些工具沒有報告任何錯誤。它也表示dir_indexext2 檔案系統會忽略該功能。

根據過去使用多 TBext3檔案系統的經驗,我預期檔案系統的建立和檢查時間會很大。對於您的用例,該功能的存在或不存在dir_index可能會影響或破壞您的應用程式效能。

您能否將實際tune2fs -l /dev/sdb1輸出編輯為您原來的問題,以便我們無需猜測可能發生或可能未發生的情況?

「結構需要清理」似乎是與EUCLEAN核心錯誤代碼相對應的預設文本,這表明檔案系統已損壞,需要進行檔案系統檢查。在這種大小的檔案系統上,這將需要相當多的時間和 RAM。當然,在檢查檔案系統時需要將其卸載。

答案2

實際上,經過大量測試後,我發現 ext4 似乎沒有能力做這樣的事情(在一個目錄中保存數十億個檔案)。根據我對如何在 Linux 中執行此操作的研究,結果(實際上也是我的實際測試)表明,對於這種情況,我應該使用 XFS 而不是 ext4,因為 ext4 確實是為了完成此任務而構建的。

相關內容