先週、私は(私にとって)問題を抱えていました。私はext4(Fedora 15)ファイルシステムを持っています。サーバーで実行されているアプリケーションが突然停止しました。最初は問題を見つけられませんでした。
df
は50%の使用可能スペースを示しました。約1時間検索した後、その人がdf -i
。このオプションは、iノードの使用状況を探します。システムのiノードが不足していたため、私が認識していなかった単純な問題でした。パーティションには3.2Mのiノードしかありませんでした。
さて、私の質問は次のとおりです。システムにiノードを追加することはできますか?ディスクをフォーマットするときに設定する必要がありますか? 3.2Mのiノードでは、いくつのファイルを作成できますか?
通常の予想よりも多くのファイルがあるようです。
Iノードテーブルのサイズを動的に変更する解決策があるかどうかはわかりません。データをバックアップし、新しいファイルシステムを作成して、データを復元する必要があると思います。
このような巨大なiノードテーブルで新しいファイルシステムを作成するには、mke2fs(8)の '-N'オプションを使用する必要があります。
Iノードの推定数を取得できるように、最初に「-n」オプションを使用することをお勧めします(fsは作成されませんが、役立つ情報が表示されます)。次に、必要に応じて、「-N」を使用して、特定のiノード番号でファイルシステムを作成します。
320万個のiノードを使用すると、合計320万個のファイルとディレクトリを使用できます(ただし、ファイルへの複数のハードリンクは1つのiノードのみを使用します)。
はい、パーティションにファイルシステムを作成するときに設定できます。オプション-T usage-type
、-N number-of-inodes
、または-i bytes-per-inode
はすべて、iノードの数を設定できます。私は通常、-i
とdu -s
の出力を同様のファイルコレクションと比較し、多少の余裕を持たせた後、find | wc -l
を使用します。
いいえ、既存のファイルシステムでインプレースで変更することはできません。しかしながら:
resize2fs
を使用します。これにより、おおまかに追加されたスペースに比例してiノードが追加されます。将来のファイルの平均サイズがほぼ同じであると想定して、スペースの前にiノードが不足しないようにしたい場合は、tune2fs -m
を使用して、十分に高い予約ブロック率を設定します。別の回避策として、ファイルの膨大なコレクションを非圧縮(!)tar
アーカイブにパックし、archivemount
を使用してファイルシステムとしてマウントすることを検討することをお勧めします。 tarアーカイブはファイルシステムイメージよりも共有に適し、クラウドや別のストレージにバックアップするときに同様のパフォーマンスを提供します。
コレクションが読み取り専用であると想定されている場合、squashfs
はオプションである可能性がありますが、カーネルで有効になっている特定のオプションが必要であり、xz
圧縮はtarでも同じパフォーマンスで使用できます。
この状況には別の解決策があります。 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
最近、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% /
du -s --inodes * 2>/dev/null |sort -g
出力の最後のディレクトリにcdして、繰り返します。
完全な開示:すべてのOSのサポートではない--inodes
duコマンドのフラグ(私のMac OSにはありません)ですが、多くのLinux OSにはあります。