ext4 Ubuntu 18.04ファイルシステムエラー「構造をクリーンアップする必要があります」

ext4 Ubuntu 18.04ファイルシステムエラー「構造をクリーンアップする必要があります」

1つのディレクトリに多数のディレクトリとファイルを収容できるように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ファイルシステムはそれほど大きな構造を持つほど強力ではありませんか?大容量ファイルを処理するためにext4の代わりにxfsを使用する方法についていくつかのページを読んだ。これは本当ですか?

ファイル操作中にシステムに停電やクラッシュが発生していないことがわかります。すべてが正常だったとき、そのような行動を期待していませんでした。

- 追加情報用に編集済み: -

ディスクの 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すでにUse Modernで有効になっており、デフォルトで有効になっていますmke2fsdir_nlink外部4ファイルシステムタイプ。

マニュアルmke2fs.conf(5)ページでは、「mke2fs.confユーザーとファイルの両方がデフォルトのファイルシステムタイプを指定しない限り、デフォルトのファイルmke2fsシステムタイプが使用されます。外部3コマンドラインオプションでログが要求された場合、または外部2そうでなければ。 」

ドキュメントによると、/etc/mke2fs.confこのオプションはオプション-T newsのみを指定し、他のものは指定しません。したがって、通常のフォームの代わりにフォームをinode_ratio = 4096使用しない限り、おそらくmkfs.ext4mke2fs外部2平均サイズが4kB以下のファイルに合わせて調整されたファイルシステムです。

Debianはセクションfs_type =[defaults]指定されておらず、コマンドのオプションはmke2fs.conf含まれていません。したがって、UbuntuのオプションがDebianのオプションと同じ場合(通常はそうです)、コマンドを使用するとおそらく24TBが提供されます。-jmke2fsmke2fs.conf外部2ファイルシステムでは、誰も特にテストしていない可能性があります。

マニュアルページには、ファイルシステム機能が必要に応じて自動的に設定されていることがext4(5)示されています。これらのツールがエラーを報告しない理由を説明できます。また、ext2ファイルシステムはこの機能を無視すると64bit言います。dir_index

マルチテラバイトのファイルシステムの過去の経験に基づいて、ext3ファイルシステムの作成と確認に時間がかかります。ユースケースによっては、この機能の有無によってdir_indexアプリケーションのパフォーマンスが向上または中断されることがあります。

tune2fs -l /dev/sdb1実際の結果を元の質問に編集して、何が起こったのか、何が起こっていないのかを推測する必要はありませんか?

EUCLEAN「構造を整理する必要がある」は、カーネルエラーコードに対応するデフォルトのテキストとして表示されます。これは、ファイルシステムが破損してファイルシステムチェックが必要であることを示します。このサイズのファイルシステムでは、かなりの時間とRAMが必要です。もちろん、ファイルシステムの確認中にマウントを解除する必要があります。

答え2

実際、多くのテストを経た後、私はext4がそのようなこと(単一のディレクトリに何十億ものファイルを保存すること)を実行できないようです。 Linuxでこれを行う方法の私の研究に基づいた結果(実際の実際のテスト)は、この場合ext4の代わりにXFSを使用する必要があることを示唆しました。 ext4は実際にこの作業のために構築されたためです。

関連情報