web-dev-qa-db-ja.com

ext4ファイルシステムのiノードの数を増やすにはどうすればよいですか?

先週、私は(私にとって)問題を抱えていました。私はext4(Fedora 15)ファイルシステムを持っています。サーバーで実行されているアプリケーションが突然停止しました。最初は問題を見つけられませんでした。

dfは50%の使用可能スペースを示しました。約1時間検索した後、その人がdf -i。このオプションは、iノードの使用状況を探します。システムのiノードが不足していたため、私が認識していなかった単純な問題でした。パーティションには3.2Mのiノードしかありませんでした。

さて、私の質問は次のとおりです。システムにiノードを追加することはできますか?ディスクをフォーマットするときに設定する必要がありますか? 3.2Mのiノードでは、いくつのファイルを作成できますか?

61
piovisqui

通常の予想よりも多くのファイルがあるようです。

Iノードテーブルのサイズを動的に変更する解決策があるかどうかはわかりません。データをバックアップし、新しいファイルシステムを作成して、データを復元する必要があると思います。

このような巨大なiノードテーブルで新しいファイルシステムを作成するには、mke2fs(8)の '-N'オプションを使用する必要があります。

Iノードの推定数を取得できるように、最初に「-n」オプションを使用することをお勧めします(fsは作成されませんが、役立つ情報が表示されます)。次に、必要に応じて、「-N」を使用して、特定のiノード番号でファイルシステムを作成します。

35
cinsk

320万個のiノードを使用すると、合計320万個のファイルとディレクトリを使用できます(ただし、ファイルへの複数のハードリンクは1つのiノードのみを使用します)。

はい、パーティションにファイルシステムを作成するときに設定できます。オプション-T usage-type-N number-of-inodes、または-i bytes-per-inodeはすべて、iノードの数を設定できます。私は通常、-idu -sの出力を同様のファイルコレクションと比較し、多少の余裕を持たせた後、find | wc -lを使用します。

いいえ、既存のファイルシステムでインプレースで変更することはできません。しかしながら:

  • LVMを実行している場合、またはファイルシステムがSANのLUNにある場合(直接LUNにあるか、またはLUNの最後のパーティションとしてある場合)、またはパーティションの後にディスクに空のスペースがある場合は、パーティションを拡大してから、ファイルシステムを拡張するには、resize2fsを使用します。これにより、おおまかに追加されたスペースに比例してiノードが追加されます。将来のファイルの平均サイズがほぼ同じであると想定して、スペースの前にiノードが不足しないようにしたい場合は、tune2fs -mを使用して、十分に高い予約ブロック率を設定します。
  • 十分なスペースがあり、ファイルシステムをオフラインにできる場合は、オフラインにして、より多くのiノードを持つ新しいファイルシステムを作成し、すべてのファイルをコピーします。
  • ファイルのサブセットだけが多くのiノードを使用していて、十分な空き領域がある場合は、ファイルシステム上のファイルを基にするループデバイス上にファイルシステムを作成し、より多くのiノード(およびおそらく小さいブロックも)を持つファイルシステムを作成します。その上で、問題のあるディレクトリをその中に移動します。それはおそらくパフォーマンスへの影響とメンテナンスの面倒ですが、それは代替手段です。
  • そしてもちろん、不要なファイルをたくさん削除できるのであれば、それも役に立ちます。
13
david

別の回避策として、ファイルの膨大なコレクションを非圧縮(!)tarアーカイブにパックし、archivemountを使用してファイルシステムとしてマウントすることを検討することをお勧めします。 tarアーカイブはファイルシステムイメージよりも共有に適し、クラウドや別のストレージにバックアップするときに同様のパフォーマンスを提供します。


コレクションが読み取り専用であると想定されている場合、squashfsはオプションである可能性がありますが、カーネルで有効になっている特定のオプションが必要であり、xz圧縮はtarでも同じパフォーマンスで使用できます。

12
tijagi

この状況には別の解決策があります。 10Gのパーティションに1000のiノードがあるとします。ただし、iノードの制限により、パーティションのすべてのスペースを使用するとは限りません。ただし、このソリューションでは、formattingなしでpartitionの残りのスペースを使用できます。

$ df -i  # see list ( I need just one free inode here so move just one file into other PARTITION)
/dev/part1  1000 999 1 99.9%     /data

$ dd if=/dev/zero of=/data/new_data
$ mkfs.ext4 /data/new_data
$ mkdir /data1
$ mount /data/new_data /data1

恒久的な取り付け用

$ echo "/data/new_data /data1 ext4 defaults 0 1" >> /etc/fstab
7
SANJEET

最近、aptまたはaptitudeアップグレードを使用しているときにこの問題が発生しました。

df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  5.1G  2.3G  70% /

df -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 521497   2791  100% /

発行されたコマンド:

du /|sort -k1 -n

ほとんどのファイルが、以下のカーネルバージョンのサブフォルダーにあることが明らかになりました。

/usr/src/linux-headers

それらのサブフォルダーを削除し、inodeの問題を修正しました。

df -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 104986 419302   21% /
6
kph0x1

du -s --inodes * 2>/dev/null |sort -g出力の最後のディレクトリにcdして、繰り返します。

完全な開示:すべてのOSのサポートではない--inodes duコマンドのフラグ(私のMac OSにはありません)ですが、多くのLinux OSにはあります。

2
Otto Leichliter