web-dev-qa-db-ja.com

iノードの使用を解放する方法

Iノードの使用率が100%(df -iコマンドを使用)のディスクドライブがあります。ただし、ファイルを大幅に削除した後も、使用率は100%のままです。

それをするための正しい方法は何ですか?

ディスク容量の使用量が少ないディスクドライブの方が、ディスク容量の使用量が多いディスクドライブよりもiノードの使用量が多くなる可能性がありますか。

私は多くのファイルを圧縮することで、使用されるinode数を減らすことができるでしょうか。

228
neversaint

ディスクがいっぱいでなくても、ディスクで大量の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_$$
150
paxdiablo

あなたが非常に不運であるならば、あなたはすべてのinodeのおよそ100%を使い、そしてsciptを作成できません。これはdf -ihで確認できます。

それから、このbashコマンドはあなたを助けるかもしれません:

Sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

はい、これには時間がかかりますが、ほとんどのファイルを含むディレクトリを見つけることができます。

181
simon

私の状況は、私が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% /
63
LNamba

私の解決策:

これが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

これで私の問題は解決した。

42
dardarlt

私は同じ問題を抱えていた、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)でした

9
Anyone_ph

最近同様の問題に直面しました。プロセスが削除されたファイルを参照している場合、iノードは解放されないので、lsof /を確認し、プロセスをkill/restartするとiノードが解放されます。

ここで間違いがあれば訂正してください。

1
Razal

前述したように、小さなファイルがたくさんあると、ファイルシステムのiノードが不足する可能性があります。私はここでほとんどのファイル を含むディレクトリを見つけるためのいくつかの手段を提供しました

1
jarno

eacceleratorはPHPをブロックにコンパイルするため、問題を引き起こしている可能性があります...負荷の高いサイトのAmazon AWSサーバーでこの問題が発生しました。問題が解決しない場合は、/ var/cache/eaccelerator内のeacceleratorキャッシュを削除して、iノードを解放してください。

rm -rf /var/cache/eaccelerator/*

(またはあなたのキャッシュディレクトリに関係なく)

1
supershwa

RSYNCを使用して多数のファイルを削除できます

rsync -a --delete blanktest/ test/

その中に0個のファイルを持つ空のテストフォルダを作成すれば、コマンドはあなたのテストフォルダを多数のファイルと同期させるでしょう(私はこの方法を使って5M近くのファイルを削除しました)。

ありがとう http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux

1
VIGNESH

スパム攻撃の後、HostGatorアカウント(すべてのホスティングをinode制限する)でこれを経験しました。 /root/.cpanel/cometに膨大な数のキューレコードが残っていました。これが起こり、あなたが空きinodeを持っていないと気付いた場合、あなたはShellを通してこのcpanelユーティリティを実行することができます。

/usr/local/cpanel/bin/purge_dead_comet_files
1
designgroop

Dockerを使用している場合は、すべての画像を削除してください。彼らはたくさんのスペースを使いました…。

すべてのコンテナを停止します

docker stop $(docker ps -a -q)

すべてのコンテナを削除する

docker rm $(docker ps -a -q)

すべての画像を削除

docker rmi $(docker images -q)

私に働きます

0
Pankaj Shinde