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


9

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

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

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

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


ext4を使用していて、ほとんどが小さな型を格納することを期待している場合はmkfs.ext4 -t news、最良の結果を得るために作成する必要があります。また、テストすることをお勧めします-(lvm、またはループバックデバイスなどで)各ファイルシステムを順番に作成し、いっぱいになるまで実際のファイルのコピーを開始します。ファイルがいっぱいになったら、df -i(またはfind | wc -l)を実行して、ほとんどのファイルを保存できたファイルを見つけます。
Matija Nalis

1
@MatijaNalis、-T大文字のT。構成ファイルには、他にもいくつかの便利に見える選択肢があります
ilkkachu

@ilkkachu正解です。ありがとうございます。それはする必要がありますmkfs.ext4 -T news
マティヤナリス

ファイルはどれくらい小さいですか?
drudru

回答:


6

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

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

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


早速のお返事ありがとうございます!今のところ、XFSが最も安全な選択のようです。このiノードの使用率は動的に変更できますか?そうでない場合、どれだけ必要になるかを予測する方法はありますか?
abadys

1
あなたがそれを行うことができるはずxfs_growfs -m XX
Anthonの

3

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

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

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

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

XFS

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

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

EXT4

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

最大ファイル数:40億

XFSとBtrfs

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

今のところ、私が本当にBtrfsを必要としない限り、特にRHEL 7のデフォルトのFSなので、XFSが私の選択です。


1
これは一般的にファイルシステムに関するいくつかの良い背景情報を持っていますが、ここで言及されている小さなファイルの特定の問題を見ることはありません。
ilkkachu

@ilkkachu「大量の小さなファイル」どういう意味ですか?ファイルはすべてiノードを介して作成され、iノードはファイルシステムオブジェクトを表すために使用されるデータ構造であるため、これはすべてiノードに関するものです。だから私はすべての作者のニーズを説明したと思いますし、それに加えてファイルの最大数についても述べました。
FarazX 2016

2

私が持っている問題は、パーティション自体がiノードでいっぱいではなく、ファイルシステムのiノードの数が不足していることだと思います。ext4は、ファイルシステムの作成時にiノードを静的に予約しますが、オプションを使用しmkfs.ext4て数を設定できます

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

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

マニュアルには、FSが作成された後はinodeあたりのバイト数の比率は変更できないと明記されていますが、FSのサイズが変更されると、合計数は比率を満たすようにスケーリングされます。

各iノードのサイズを設定することもできます。「ほとんどの」ファイルシステムのデフォルトは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 block-sizeブロックのサイズ
をバイト単位で指定します。有効なブロックサイズ値は、ブロックあたり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未満の場合でも、ファイルシステムはデータを保存する最良の方法ではないかもしれませんが、データベースやアプリケーション固有のシステムなどを検討する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.