web-dev-qa-db-ja.com

多くの小さなファイル(xfs、btrfs、ext4)のiノード、消費済みスペースの比較

Ext4パーティション(VM上のLVM)に大量の小さなファイルがあり、3〜4か月ごとに拡張する必要があります。

Iノードによって使用されるスペースの量について。

Xfs、btrfs、またはext4ファイルシステムのいずれかが使用するスペースは少なくなりますか?

言い換えると、btrfsまたはxfsに切り替えると、パーティションがiノードでいっぱいになるのがext4で遅くなりますか?

9
abadys

最初の質問から始めましょう:はい、これらのファイルシステムの1つはより少ないスペースを使用します。それ以上の詳細がなくても、実装が異なる場合、それらすべてがまったく同じ量のスペースを使用することはまずありません。したがって、1つは他のすべてのスペースよりも少ないスペースを使用する必要があります。

Btrfsには動的なiノード割り当てがあるため、ext4のiノードテーブル(ext4ファイルシステムの作成時に設定されるサイズ)のようにいっぱいになることはありません。

XFSも同様に動的ですが、制限(inodeに使用できるファイルシステムのパーセンテージ)があるため、inodeの許容量を埋めるかどうかは、設定​​されたパーセンテージとファイル数/ファイルサイズに依存します。

5
Anthon

はい、そしてすべてがあなたのニーズに依存することに注意してください:

Btrfs(バターFS、ベターFS、またはBツリーFSと発音)

btrfsが複数のハードドライブにまたがることができることを考えると、ext4の16倍のドライブスペースをサポートできることは非常に優れています。 btrfsファイルシステムの最大パーティションサイズは16エクスビバイトで、最大ファイルサイズも16エクスビバイトです。

最大ファイル数:2 ** 64

XFS

[〜#〜] xfs [〜#〜]は、高性能の64ビットジャーナリングファイルシステムです。 XFSは、64ビットファイルシステムの最大ファイルシステムサイズ8エクスビバイトをサポートします。 RHEL 7.は、/bootパーティションにXFSを使用するためのサポートを含め、XFSをデフォルトのファイルシステムとして使用します。

最大ファイル数:2 ** 64

EXT4

ext4は、ext3に比べて速度が向上しているため、よく知られています。 ext4にはいくつかの制限があります。最大ファイルサイズは16テビバイト(約17.6テラバイト)です。 ext4で使用できる最大のボリューム/パーティションは1エクスビバイトです。最新のファイルシステムと同様に、これはジャーナリングファイルシステムであり、ファイルが主にディスク上のどこにあるか、およびディスクに発生したその他の変更に関するジャーナルを保持します。すべての機能に関係なく、透過的な圧縮、透過的な暗号化、またはデータ重複排除はサポートされていません。スナップショットは技術的にサポートされていますが、そのような機能は実験的なものです。

最大ファイル数:40億

XFSとBtrfs

XFSにはRAIDがありませんが、Btrfs RAIDはまだ完全に安定しておらず、初期の段階です。 [〜#〜] xfs [〜#〜]Btrfsよりもますます成熟していますが、Btrfsが強力でファイルシステムの成長が優れていることは否定できません。

今のところ、XFSが私の選択です-特にRHEL 7のデフォルトFS)なので、本当にBtrfsが本当に必要な場合を除きます。

3
FarazX

あなたが抱えている問題は、パーティション自体がiノードでいっぱいではなく、ファイルシステムのiノードの数が不足していることだと思います。 ext4は、ファイルシステムの作成時にiノードを静的に予約しますが、 options to mkfs.ext4

-iバイト/ iノード
バイト/ inode比を指定します。 mke2fsは、ディスク上のinodeバイトあたりのスペースのバイトごとにiノードを作成します。 iノードあたりのバイト数の比率が大きいほど、作成されるiノードの数は少なくなります。

-Nの数
ファイルシステム用に予約する必要があるiノード数のデフォルトの計算を上書きします(これは、ブロック数とバイト/ iノード比に基づいています)。これにより、ユーザーは目的のiノードの数を直接指定できます。

マニュアルでは、FSが作成された後はiノードあたりのバイト数の比率を変更できないことを明示していますが、FSサイズが変更されます。

各iノードのsizeを設定することもできます。 「ほとんどの」ファイルシステムのデフォルトは256バイトですが、128(「小さい」ファイルシステムのデフォルト)に減らすことができます。余分なスペースは拡張属性(SELinuxラベルなど)を格納するために使用されるため、それらが必要ない場合は、サイズを最小にしても安全です。

-i inode-size
各iノードのサイズをバイト単位で指定します。 inode-sizeの値は、128以上の2の累乗でなければなりません。

df -iは、割り当てられて使用されているiノードの数を示します。デフォルトのオプションでは、私が調べた1つの30 GBパーティションには16 kBごとに1つのiノードがありましたが、ファイルが非常に小さい場合は、たとえば-i 4096システム上のすべてのデータブロックに対して1つのiノードを持つ。

ファイルが4096より小さい場合は、ファイルシステムのブロックサイズも小さくする必要がある場合があります。これは、通常のファイルはすべて、とにかく1つの完全なデータブロックを必要とするためです。 (つまり、ext4では、他の現在のファイルシステムが小さなファイルのパッキングを行うかどうかはわかりません。)

-bブロックサイズ
ブロックのサイズをバイト単位で指定します。有効なブロックサイズ値は、ブロックあたり1024、2048、4096バイトです。省略した場合、ブロックサイズはファイルシステムのサイズとファイルシステムの予想される使用法(-Tオプションを参照)によって発見的に決定されます。

mkfs.ext4には-T <type>オプション。これらの一部またはすべての省略形として使用できます。設定は/etc/mke2fs.conf、これは私のDebianで作成されます。 mkfs.ext4 -T small に相当

mkfs.ext4 -b 1024 -I 128 -i 4096

これは、多くの小さなファイル(およびxattrsなし)のオプションの悪いセットではないかもしれません。

ファイルが1 KB未満の場合でも、ファイルシステムはデータを保存するための最良の方法ではない可能性がありますが、データベースやアプリケーション固有のシステムなどを検討する必要があります。

2
ilkkachu