私が持っている問題は、パーティション自体が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未満の場合でも、ファイルシステムはデータを保存する最良の方法ではないかもしれませんが、データベースやアプリケーション固有のシステムなどを検討する必要があります。
mkfs.ext4 -t news
、最良の結果を得るために作成する必要があります。また、テストすることをお勧めします-(lvm、またはループバックデバイスなどで)各ファイルシステムを順番に作成し、いっぱいになるまで実際のファイルのコピーを開始します。ファイルがいっぱいになったら、df -i
(またはfind | wc -l
)を実行して、ほとんどのファイルを保存できたファイルを見つけます。