Iノードの使用率が100%(df -i
コマンドを使用)のディスクドライブがあります。ただし、ファイルを大幅に削除した後も、使用率は100%のままです。
それをするための正しい方法は何ですか?
ディスク容量の使用量が少ないディスクドライブの方が、ディスク容量の使用量が多いディスクドライブよりもiノードの使用量が多くなる可能性がありますか。
私は多くのファイルを圧縮することで、使用されるinode数を減らすことができるでしょうか。
ディスクがいっぱいでなくても、ディスクで大量のiノードを使用するのは非常に簡単です。
Iノードはファイルに割り当てられているので、1バイトずつ全部のファイルがあると、ディスクがなくなるずっと前にiノードが不足することになります。
ファイルに複数のハードリンクがある場合、ファイルを削除してもiノード数が減少しない可能性もあります。私が言ったように、iノードはファイルに属しています。ディレクトリエントリではありません。ファイルにリンクされた2つのディレクトリエントリがある場合、1つを削除してもiノードは解放されません。
さらに、ディレクトリエントリを削除することもできますが、実行中のプロセスがまだファイルを開いている場合、iノードは解放されません。
私の最初のアドバイスはあなたができるすべてのファイルを削除してからファイルを開いたままにしているプロセスが残っていないことを確認するためにボックスを再起動することです。
それでも問題が解決しない場合は、Googleまでお知らせください。
ところで、たくさんのファイルを含むディレクトリを探しているなら、このスクリプトは役に立つかもしれません:
#!/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_$$
あなたが非常に不運であるならば、あなたはすべてのinodeのおよそ100%を使い、そしてsciptを作成できません。これはdf -ih
で確認できます。
それから、このbashコマンドはあなたを助けるかもしれません:
Sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
はい、これには時間がかかりますが、ほとんどのファイルを含むディレクトリを見つけることができます。
私の状況は、私がinodeを使い果たしていて、私ができることすべてについてすでに削除したということでした。
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 11 100% /
私はubuntu 12.04LTSを使用していて、aptがパッケージの欠落のために壊れていたために約400,000のiノードを占めていた古いLinuxカーネルを削除できませんでした。 iノードが不足していたので、新しいパッケージをインストールできませんでした。
私は約10,000のinodeを解放するために手でいくつかの古いLinuxカーネルを削除することになった
$ Sudo rm -rf /usr/src/linux-headers-3.2.0-2*
これで足りないパッケージをインストールしてaptを修正することができました
$ Sudo apt-get install linux-headers-3.2.0-76-generic-pae
そしてaptで残りの古いLinuxカーネルを削除します。
$ 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
これで私の問題は解決した。
私は同じ問題を抱えていた、phpのディレクトリセッションを削除することでそれを修正しました
rm -rf /var/lib/php/sessions/
古いバージョンのphpを使用している場合は/var/lib/php5
の下にあるかもしれません。
以下の権限で再作成してください。
mkdir /var/lib/php/sessions/ && chmod 1733 /var/lib/php/sessions/
Debianのディレクトリに対するデフォルトのパーミッションはdrwx-wx-wt
(1733)でした
最近同様の問題に直面しました。プロセスが削除されたファイルを参照している場合、iノードは解放されないので、lsof /を確認し、プロセスをkill/restartするとiノードが解放されます。
ここで間違いがあれば訂正してください。
前述したように、小さなファイルがたくさんあると、ファイルシステムのiノードが不足する可能性があります。私はここでほとんどのファイル を含むディレクトリを見つけるためのいくつかの手段を提供しました 。
eacceleratorはPHPをブロックにコンパイルするため、問題を引き起こしている可能性があります...負荷の高いサイトのAmazon AWSサーバーでこの問題が発生しました。問題が解決しない場合は、/ var/cache/eaccelerator内のeacceleratorキャッシュを削除して、iノードを解放してください。
rm -rf /var/cache/eaccelerator/*
(またはあなたのキャッシュディレクトリに関係なく)
RSYNCを使用して多数のファイルを削除できます
rsync -a --delete blanktest/ test/
その中に0個のファイルを持つ空のテストフォルダを作成すれば、コマンドはあなたのテストフォルダを多数のファイルと同期させるでしょう(私はこの方法を使って5M近くのファイルを削除しました)。
ありがとう http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux
スパム攻撃の後、HostGatorアカウント(すべてのホスティングをinode制限する)でこれを経験しました。 /root/.cpanel/cometに膨大な数のキューレコードが残っていました。これが起こり、あなたが空きinodeを持っていないと気付いた場合、あなたはShellを通してこのcpanelユーティリティを実行することができます。
/usr/local/cpanel/bin/purge_dead_comet_files
Dockerを使用している場合は、すべての画像を削除してください。彼らはたくさんのスペースを使いました…。
すべてのコンテナを停止します
docker stop $(docker ps -a -q)
すべてのコンテナを削除する
docker rm $(docker ps -a -q)
すべての画像を削除
docker rmi $(docker images -q)
私に働きます