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で有効になっており、デフォルトで有効になっていますmke2fs
。dir_nlink
外部4ファイルシステムタイプ。
マニュアルmke2fs.conf(5)
ページでは、「mke2fs.conf
ユーザーとファイルの両方がデフォルトのファイルシステムタイプを指定しない限り、デフォルトのファイルmke2fs
システムタイプが使用されます。外部3コマンドラインオプションでログが要求された場合、または外部2そうでなければ。 」
ドキュメントによると、/etc/mke2fs.conf
このオプションはオプション-T news
のみを指定し、他のものは指定しません。したがって、通常のフォームの代わりにフォームをinode_ratio = 4096
使用しない限り、おそらくmkfs.ext4
mke2fs
外部2平均サイズが4kB以下のファイルに合わせて調整されたファイルシステムです。
Debianはセクションfs_type =
に[defaults]
指定されておらず、コマンドのオプションはmke2fs.conf
含まれていません。したがって、UbuntuのオプションがDebianのオプションと同じ場合(通常はそうです)、コマンドを使用するとおそらく24TBが提供されます。-j
mke2fs
mke2fs.conf
外部2ファイルシステムでは、誰も特にテストしていない可能性があります。
マニュアルページには、ファイルシステム機能が必要に応じて自動的に設定されていることがext4(5)
示されています。これらのツールがエラーを報告しない理由を説明できます。また、ext2ファイルシステムはこの機能を無視すると64bit
言います。dir_index
マルチテラバイトのファイルシステムの過去の経験に基づいて、ext3
ファイルシステムの作成と確認に時間がかかります。ユースケースによっては、この機能の有無によってdir_index
アプリケーションのパフォーマンスが向上または中断されることがあります。
tune2fs -l /dev/sdb1
実際の結果を元の質問に編集して、何が起こったのか、何が起こっていないのかを推測する必要はありませんか?
EUCLEAN
「構造を整理する必要がある」は、カーネルエラーコードに対応するデフォルトのテキストとして表示されます。これは、ファイルシステムが破損してファイルシステムチェックが必要であることを示します。このサイズのファイルシステムでは、かなりの時間とRAMが必要です。もちろん、ファイルシステムの確認中にマウントを解除する必要があります。
答え2
実際、多くのテストを経た後、私はext4がそのようなこと(単一のディレクトリに何十億ものファイルを保存すること)を実行できないようです。 Linuxでこれを行う方法の私の研究に基づいた結果(実際の実際のテスト)は、この場合ext4の代わりにXFSを使用する必要があることを示唆しました。 ext4は実際にこの作業のために構築されたためです。