iノードの使用率が100%(df -i
コマンドを使用)のディスクドライブがあります。ただし、ファイルを大幅に削除した後も、使用率は100%のままです。
それを行う正しい方法は何ですか?
ディスクスペースの使用率が低いディスクドライブが、ディスクスペースの使用率が高いディスクドライブよりもInodeの使用率が高くなる可能性があるのはなぜですか。
多くのファイルを圧縮すると、使用されるiノード数が減る可能性はありますか?
iノードの使用率が100%(df -i
コマンドを使用)のディスクドライブがあります。ただし、ファイルを大幅に削除した後も、使用率は100%のままです。
それを行う正しい方法は何ですか?
ディスクスペースの使用率が低いディスクドライブが、ディスクスペースの使用率が高いディスクドライブよりもInodeの使用率が高くなる可能性があるのはなぜですか。
多くのファイルを圧縮すると、使用されるiノード数が減る可能性はありますか?
回答:
ディスクがいっぱいになっていなくても、ディスクで多数のiノードを使用するのは非常に簡単です。
iノードはファイルに割り当てられるので、億単位のファイルがあり、すべて1バイトの場合、ディスクが不足する前にiノードが不足します。
ファイルに複数のハードリンクがある場合、ファイルを削除してもiノード数が減らない可能性もあります。すでに述べたように、iノードはディレクトリエントリではなくファイルに属しています。ファイルに2つのディレクトリエントリがリンクされている場合、1つを削除してもiノードは解放されません。
さらに、ディレクトリエントリを削除することもできますが、実行中のプロセスがまだファイルを開いている場合は、iノードは解放されません。
私の最初のアドバイスは、すべてのファイルを削除してからボックスを再起動して、ファイルを開いたままのプロセスが残っていないことを確認することです。
それでも問題が解決しない場合は、お知らせください。
ちなみに、多くのファイルを含むディレクトリを探している場合、このスクリプトが役立つことがあります。
#!/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_$$
>/tmp/count_em_$$
スペースがある場合にのみ機能します...その場合は、@ simonの回答を参照してください。
/tmp
ことは他のファイルシステムに影響を与えません。
ls -A
代わりにあなたが欲しいと思いますls -a
。なぜあなたは数えたいのですか?そして..?
非常に運が悪い場合は、すべてのiノードの約100%を使用しており、sciptを作成できません。これはで確認できdf -ih
ます。
次に、このbashコマンドが役立ちます。
sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
はい、これには時間がかかりますが、ファイルが最も多いディレクトリを見つけることができます。
awk
は、膨大な数の行を一意化したり並べ替えたりせずに、ディレクトリのハッシュとファイルの数を保持できます。そうは言っても、おそらくここに改善がありますfind . -maxdepth 1 -type d | grep -v '^\.$' | xargs -n 1 -i{} find {} -xdev -type f | cut -d "/" -f 2 | uniq -c | sort -n
。—これは最後のリストのみをソートします。
sort
、一時ファイルの書き込みに自動的にフォールバックしようとするため、失敗する可能性もあります。明らかに失敗するプロセス...
sort
私にとっては失敗しましたが、--buffer-size=10G
うまくいったものを与えることができました。
私の状況では、iノードがなくなり、できることはすべて削除してしまいました。
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 942080 507361 11 100% /
私はubuntu 12.04LTSを使用していて、パッケージが見つからないためにaptが壊れたため、約400,000のiノードを使用していた古いLinuxカーネルを削除できませんでした。そして、iノードが足りなくなってスタックしてしまったため、新しいパッケージをインストールできませんでした。
いくつかの古いLinuxカーネルを手動で削除して、約10,000のiノードを解放しました
$ 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% /
sudo rm -rf /usr/src/linux-headers-3.2.0-2*
ですか:そのカーネルを使用していないと確信している場合?
$ sudo apt-get autoremove
一人で電話して、私のためにトリックをしました。
私の解決策:
これが次の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
これは私の問題を解決しました。
SpamAssasin-Temp
。find /var/spool/MailScanner/incoming/SpamAssassin-Temp -mtime +1 -print | xargs rm -f
仕事をしました:)ありがとう!
for i in /usr/src/*; do echo -en "$i\t"; find $i 2>/dev/null |wc -l; done
for i in /src/*; do echo "$i, `find $i |wc -l`"; done|sort -nrk 2|head -10
トップ10の最大のディレクトリを披露
私は同じ問題を抱えていました、phpのディレクトリセッションを削除して修正しました
rm -rf /var/lib/php/sessions/
/var/lib/php5
古いバージョンのphpを使用している場合は、下にある可能性があります。
次の権限で再作成してください
mkdir /var/lib/php/sessions/ && chmod 1733 /var/lib/php/sessions/
Debianのディレクトリのデフォルトのパーミッションが表示されましたdrwx-wx-wt
(1733)
rm -rf /var/lib/php/sessions/*
おそらくより良いコマンドでしょう-それはセッションディレクトリを削除するのではなく、そのコンテンツを削除します...その後、それを再作成することを心配する必要はありません
RSYNCを使用して多数のファイルを削除できます
rsync -a --delete blanktest/ test/
0個のファイルが入ったblanktestフォルダーを作成します。コマンドを実行すると、テストフォルダーが多数のファイルと同期されます(この方法を使用して5M近くのファイルを削除しました)。
http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linuxのおかげで
rm *
、ワイルドカードを展開して各引数を渡し/処理するため、これは多くのファイルよりも高速ですが、多くのファイルを含むフォルダーをrm test/
削除するのに適していtest/
ます。
遅い答え:私の場合、それは私のセッションファイルでした
/var/lib/php/sessions
Inodesを使用していた。
私は自分のcrontabを開くことも、削除操作をトリガーするだけでなく、新しいディレクトリを作成することもできませんでした。私はPHPを使用しているため、このガイドでは、例1からコードをコピーし、cronjobを設定してコードのその部分を実行します。
<?php
// Note: This script should be executed by the same user of web server
process.
// Need active session to initialize session data storage access.
session_start();
// Executes GC immediately
session_gc();
// Clean up session ID created by session_gc()
session_destroy();
?>
私がどうやって私のcrontabを開いたのか疑問に思っているのなら、CLIを使用して一部のセッションを手動で削除しました。
お役に立てれば!
dockerを使用している場合は、すべての画像を削除します。彼らは多くのスペースを使いました...
すべてのコンテナを停止します
docker stop $(docker ps -a -q)
すべてのコンテナを削除
docker rm $(docker ps -a -q)
すべての画像を削除
docker rmi $(docker images -q)
私に働きます