私の解決策:
これが 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
これで問題は解決しました。
私の状況は、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 が不足していたため、新しいパッケージをインストールできず、立ち往生していました。
約 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
そして、残りの古い Linux カーネルを apt で削除します
$ sudo apt-get autoremove
今はずっと良くなっています
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 434719 54% /
ディスクが満杯でない場合でも、ディスクが多数の inode を使用するのは非常に簡単です。
i ノードはファイルに割り当てられるため、膨大な数のファイルがあり、それぞれがすべて 1 バイトである場合、ディスクがなくなるずっと前に i ノードが不足してしまいます。
ファイルに複数のハード リンクがある場合、ファイルを削除しても 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_$$
非常に不運な場合は、すべての inode の約 100% を使用しており、scipt を作成できません。これは df -ih
で確認できます。 .
次に、この bash コマンドが役立ちます:
sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
はい、これには時間がかかりますが、ファイルが最も多いディレクトリを見つけることができます。