Linuxでディスクスペースがなくなった場所を追跡する
1. 序章
正常なシステムには、動作を維持するのに十分な空きディスクリソースがあるはずです。 一般に、ディスク容量の少なくとも一部がほとんどの時間空きになっていることが望ましいです。 ディスクスペースがなくなると、プログラム出力またはログファイルのデバイスにスペースが残っていませんシステムメッセージは、問題があることを示します。
この記事では、スペースがなくなった場所を追跡する方法に焦点を当てます。 これにより、最終的にはクリーニングまたはアーカイブを実行できるようになります。
いくつかの実用的な例を使用して、考えられるアプローチについて説明します。
2. 出発点
原則として、ディスクリソースは複数のパーティションで構成され、それぞれがマウントポイントディレクトリに割り当てられます。 そのため、検索を1つのパーティションまたはマウントポイントのみに絞り込むことをお勧めします。 パーティションまたはディレクトリがわかっていない限り、 df コマンドを使用して、調査するパーティションを決定できます。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 4.8G 58M 4.5G 2% /
/dev/mapper/centos-home 4.8G 925M 3.7G 20% /home
/dev/mapper/centos-var 3.2G 3.1G 122M 96% /var
上記の出力から、 /varパーティションが容量制限に近づいていることがわかります。 したがって、調査が必要な可能性があります。
3. CLIアプローチ
3.1. duコマンド
使用統計を計算して報告できる最初で最も使用されるコマンドは、 du、「ディスク使用量」の略です。 その目的は、引数として渡されたディレクトリのサイズと、そのすべてのサブディレクトリを計算して報告することです。
# du /var
ただし、オプションを指定せずにこのように実行すると、 long unsorted output が発生し、問題がどこにあるかを明確に示すことができなくなります。 むしろ、代わりに上位5つのリストを取得したいと考えています。 そのために、 du コマンドにいくつかのオプションを追加し、sortおよびtailコマンドを使用して、目的のフォームを取得できます。
## 1 2 3 4
## v v v v
# du -BM --max-depth=1 /var | sort -n | tail -n 5
73M /var/www
108M /var/lib
346M /var/cache
1860M /var/log
2387M /var
番号が付けられた各ポイントの説明は次のとおりです。
- – B オプションは、ブロックサイズの単位(この場合はメガバイト)を指定するために使用されます
- –max-depth = 1 は、サブディレクトリの第1レベルごとに計算結果を集計します
- sort ユーティリティは、 du コマンドの出力を並べ替えるために使用され、 -n オプションを使用すると、文字列を数値として扱うことができます。
- tailと-nオプションを指定すると、出力がカットされ、最後の5行だけが残ります。
/ var /logディレクトリが主な犯罪者のようであることに気づきました。 深さを増やすで詳細を確認できます。
# du -BM --max-depth=<strong>2</strong> /var | sort -n | tail -n 5
345M /var/cache/yum
346M /var/cache
<strong>637M /var/log/httpd</strong>
1861M /var/log
2388M /var
また、 / var の代わりに、より深いレベルのディレクトリ / var /logをduに渡すことができます。
# du -BM --max-depth=1 <strong>/var/log</strong> | sort -n | tail -n 5
1M /var/log/vmware-imc
4M /var/log/anaconda
34M /var/log/audit
<strong>637M /var/log/httpd</strong>
1861M /var/log
ご覧のとおり、 / var / log /httpdが消費のリーダーです。 これは、ApacheHTTPサーバーがログファイルを保持するディレクトリです。 おそらく、ログローテーションを構成するか、ログレベルを下げる必要があります。
ターゲットディレクトリと深度をさらに組み合わせることで、検索をより正確にすることができます。
3.2. findコマンド
場合によっては、どの種類のデータがディスク領域を最も消費する可能性があるかを推測できます。
たとえば、システムが大きなアーカイブファイルを作成できることはわかっています。 その場合、一般的な使用統計を収集する代わりに、ファイルサイズに直接検索することができます。 ここで、findコマンドをduの代わりに使用できます。
システムのスペースが不足している場合、いくつかの大きなファイルを見つけて削除すると、簡単に修正できます。 1億を超えるファイルを検索するとします。
そのために、-sizeオプションを-printfオプションと一緒に使用します。 以下の例では、後者のオプションはファイルサイズをバイト単位で出力し、ファイルパスを出力します。 ここでも、上記の du の例のように、出力を sort -n コマンドに渡して、ファイルサイズ順にリストを取得します。
# find /var -size +100M -printf '%s %p\n' | sort -n
104958094 /var/log/iptables.log
104958282 /var/log/kern
235536682 /var/log/secure
241433352 /var/log/httpd/ssl-error.log.20191022.gz
277761696 /var/log/messages
3.3. まだスペースを使用している削除されたファイル
特定の状況下では、システムは、削除されたファイルによって使用されたスペースをfreeとして報告しません。 その理由は、ファイル記述子がまだいくつかのプロセスによって開かれている可能性があるためです。
たとえば、アプリケーションの実行中にユーザーがアプリケーションログファイルを削除できます。 これによってファイルが物理的に削除されることはなく、アプリケーションはそのファイルへの書き込みを続行します。 ただし、ファイルはlsまたはファイルマネージャーのいずれにも表示されなくなります。
ここで、lsofユーティリティが役立ちます。 プロセスに関連付けられたファイル記述子が表示され、削除済みとマークされたファイルが報告されます。 実際のコマンド例は次のようになります。
# lsof | grep -E '^COM|deleted'
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 334 root 10w REG 182,249585 231932418 527588 /var/log/httpd/error.log (deleted)
ここでは、削除された/var/log/httpd/error.logがまだ200MBを超えるスペースを使用していることがわかります。 リリースするには、httpdプロセスを停止または再開する必要があります。
4. TUIアプローチ
上記のCLIアプローチは、ほとんどのLinuxシステムで使用できます。 最小限のシステムインストールでも、duとfindはほとんどの場合利用可能です。
ただし、システムのインストールが最小限ではない場合、または新しいソフトウェアをインストールするための管理権限が付与されている場合は、TUIアプローチが推奨される場合があります。 TUIアプリケーションでは、ショートカットとマウスを使用してターミナル画面全体を操作できるため、操作がより便利でユーザーフレンドリーになります。 以下で説明するコマンドは、多くのLinuxプラットフォームのリポジトリから入手でき、ネイティブシステムパッケージマネージャーによってインストールできます。
4.1. ミッドナイトコマンダーファイルマネージャー
mc は、すべてのLinuxディストリビューションで利用可能な最も古いファイルマネージャーの1つであり、ディスク使用量を計算するためのインバウンドオプションがあります。 1つまたは複数のフォルダーを視覚的に選択してから、 Ctrl-Space ショートカットを使用して、使用状況の概要を取得できます。 ディレクトリ名は引数として指定できます。
# mc /var
4.2. ncduコマンド
ncdu は、使いやすいビジュアルテキストインターフェイスを備えたもう1つのツールです。 上記のduの場合と同じ方法で、開始ディレクトリを指定します。
# ncdu /var
検索が完了すると、要約が降順でソートされます:
次に、矢印キーと Enter を使用して画面を操作して詳細を取得するか、dショートカットを使用してプログラムを終了せずにでファイルを削除します :
5. 結論
このチュートリアルでは、ディスク領域を解放できるように、ディスク消費ポイントを見つけるいくつかの方法を見てきました。 システムで使用可能なプログラム、およびファイルシステムのこれらのスペースを消費する要素を見つけるために必要な速度または正確さに応じて、それぞれを適用できます。