inode 使用率が 100% のディスク ドライブがあります (df -i
コマンドを使用)。ただし、ファイルを大幅に削除した後、使用率は 100% のままです。
その場合どうするのが正しいのでしょうか?
ディスク スペースの使用量が少ないディスク ドライブが、ディスク スペースの使用量が多いディスク ドライブよりも I ノードの使用量が多い可能性があるのはなぜですか?
大量のファイルを圧縮すると、使用inode
回数が減る可能性はありますか?
inode 使用率が 100% のディスク ドライブがあります (df -i
コマンドを使用)。ただし、ファイルを大幅に削除した後、使用率は 100% のままです。
その場合どうするのが正しいのでしょうか?
ディスク スペースの使用量が少ないディスク ドライブが、ディスク スペースの使用量が多いディスク ドライブよりも I ノードの使用量が多い可能性があるのはなぜですか?
大量のファイルを圧縮すると、使用inode
回数が減る可能性はありますか?
運が悪ければ、すべての inode の約 100% を使用していて、scipt を作成できません。で確認できますdf -ih
。
次に、この bash コマンドが役立つ場合があります。
sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
はい、これには時間がかかりますが、ファイルが最も多いディレクトリを見つけることができます。
ディスクが満杯でない場合でも、ディスクに多数の inode が使用されるのは非常に簡単です。
i ノードはファイルに割り当てられるため、膨大な数のファイルがあり、それぞれがすべて 1 バイトである場合、ディスクがなくなるずっと前に inode が不足してしまいます。
ファイルに複数のハード リンクがある場合、ファイルを削除しても inode 数が減らない可能性もあります。前述したように、inodeはディレクトリ エントリではなく、ファイルに属します。ファイルに 2 つのディレクトリ エントリがリンクされている場合、1 つを削除しても inode は解放されません。
さらに、ディレクトリ エントリを削除できますが、実行中のプロセスがまだファイルを開いている場合、inode は解放されません。
私の最初のアドバイスは、できる限りすべてのファイルを削除してから、ボックスを再起動して、ファイルを開いたままにするプロセスが残っていないことを確認することです。
それでも問題が解決しない場合は、お知らせください。
ところで、大量のファイルを含むディレクトリを探している場合は、次のスクリプトが役立ちます。
#!/bin/bash
# count_em - count files in all subdirectories under current directory.
echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$
chmod 700 /tmp/count_em_$$
find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n
rm -f /tmp/count_em_$$
私の状況は、iノードが不足していて、できる限りすべてをすでに削除していたというものでした。
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 11 100% /
私はubuntu 12.04LTSを使用していますが、パッケージが見つからないためにaptが壊れていたため、約400,000のinodeを占有していた古いLinuxカーネルを削除できませんでした。また、inode が不足していたため、新しいパッケージをインストールできず、立ち往生していました。
手動でいくつかの古い Linux カーネルを削除して、約 10,000 の inode を解放しました。
$ sudo rm -rf /usr/src/linux-headers-3.2.0-2*
これで、不足しているパッケージをインストールして apt を修正するのに十分でした
$ sudo apt-get install linux-headers-3.2.0-76-generic-pae
そして、残りの古い Linux カーネルを apt で削除します
$ sudo apt-get autoremove
物事は今ではずっと良くなっています
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 434719 54% /
私の解決策:
これが i ノードの問題であるかどうかを確認してください。
df -ih
i ノード数が多いルート フォルダを探します。
for i in /*; do echo $i; find $i |wc -l; done
特定のフォルダーを検索してみてください。
for i in /src/*; do echo $i; find $i |wc -l; done
これが Linux ヘッダーの場合は、次の方法で最も古いものを削除してみてください。
sudo apt-get autoremove linux-headers-3.13.0-24
個人的には、それらをマウントされたフォルダーに移動し(最後のコマンドが失敗したため)、最新のものを次のようにインストールしました。
sudo apt-get autoremove -f
これで私の問題は解決しました。
これは、HostGator アカウント (すべてのホスティングに inode 制限を設定している) で、スパム攻撃後に発生しました。/root/.cpanel/comet に膨大な数のキュー レコードが残っていました。これが発生し、空いている inode がないことがわかった場合は、シェルから次の cpanel ユーティリティを実行できます。
/usr/local/cpanel/bin/purge_dead_comet_files
前に述べたように、小さなファイルがたくさんある場合、ファイルシステムは inode を使い果たす可能性があります。ここで、ほとんどのファイルを含むディレクトリを見つける手段をいくつか提供しました。
eaccelerator は PHP をブロックにコンパイルするため、問題を引き起こしている可能性があります...負荷の高いサイトの Amazon AWS サーバーでこの問題が発生しました。問題が解決しない場合は、/var/cache/eaccelerator の eaccelerator キャッシュを削除して、I ノードを解放してください。
rm -rf /var/cache/eaccelerator/*
(またはあなたのキャッシュディレクトリは何でも)
最近、同様の問題に直面しました。プロセスが削除されたファイルを参照する場合、inode は解放されないため、lsof / を確認し、プロセスを強制終了/再起動すると inode が解放されます。
ここで間違っている場合は修正してください。