Linuxでディスク容量不足に陥った?ログをチェックしよう!

概要

  • Linuxシステムログは、大量のディスク容量を消費することがあります。
  • 通常、システムはディスク容量を節約するために古いログファイルを圧縮します。
  • journalctlまたはtail -fコマンドを使用して、ログを表示し、問題のあるプロセスを特定できます。

Linuxシステムは、スvelteであることで定評がありますが、突然ディスク容量が不足することがあります。なぜこのようなことが起こるのでしょうか?最大のヒントであり、おそらく最大の犯人は、Linuxシステムログにあります。

ログがディスク容量を大量に消費する理由

ログは、Linuxシステムを管理する上で重要な部分です。マシンの状況を確認したり、発生した問題のトラブルシューティングを行うことができます。Linuxのロギングデーモンは、Windowsのイベントビューアーに似ています。通常、ログはそれほど多くの容量を消費しません。これは、ほとんどのディストロが、ディスク上の占有量を自動的に管理するからです。

Linuxのログは、従来はプレーンテキストファイルでしたが、多くの主要なディストロがsystemdに移行したことで、systemdサービスであるjournaldによって管理されるバイナリファイルになりました。あるいは、ディストロによっては、rsyslogまたはsyslog-ngを使用しています。

古いログは関連性がなく、大きなアーカイブはスペースを占有する可能性があるため、通常、システムはログを「ローテーション」します。つまり、アーカイブ、圧縮、最終的には削除して、実際に必要なもののためのディスク容量を確保します。

ログはそれほど多くの容量を消費しないと思うかもしれませんが、誤動作しているプロセスは、システムがローテーションするよりも早くログをいっぱいにすることがあります。

ディスク容量をチェックして、突然容量が不足していることに気づき、最近大きなファイルをダウンロードしていないことを知っている場合、原因はLinuxシステムログの問題である可能性があります。システムログをいっぱいにしているものを調べて、修正する必要があります。

du -hコマンドを使用して、使用しているディスク容量を確認できます。

du -h /var/log

各サブディレクトリと、そのサブディレクトリが占有する合計容量のリストが表示されます。

ログの検索

systemdを搭載した最新のLinuxディストロを使用している場合、journalctlプログラムを使用してログを表示します。journaldは通常、ディストロに応じて、/var/log/journalまたは/run/log/journalディレクトリにログを保存します。

ログを表示するには、シェルプロンプトでjournaldコマンドを入力します。他にも便利なコマンドラインオプションがあります。ブートメッセージを表示するには、-bオプションを使用します。

journalctl -b

-fオプションを使用すると、システムのログメッセージをリアルタイムで表示できます。

ディストロでsystemdを使用していない場合、ログは/var/logディレクトリにあります。systemdを使用している場合でも、一部のプログラムは依然としてこのディレクトリにログを保存しています。これらは、lessなどのページャユーティリティで調べることができる通常のテキストファイルです。

例えば、システムログを読むには、

less /var/log/syslog

数千行ある可能性のあるログファイルの全内容が表示されます。

tailコマンドの-fオプションを使用して、リアルタイムで監視することもできます。

tail -f /var/log/syslog

Linuxがログファイルをローテーションする方法

/var/logディレクトリには、「log.N.gz」という名前で終わるファイルがあることに気づくかもしれません。ここで、Nは数字です。これは、システムが古いログをローテーションした結果です。ほとんどのディストロには、「logrotate」と呼ばれるこの操作を自動的に行うユーティリティがあります。logrotateは通常、cronジョブまたはsystemdタイマーとして実行されるように設定されています。

ほとんどのディストロでは、デフォルトでlogrotateが毎日実行されます。logrotateは、ファイル拡張子「.gz」が示すように、古いログをgzipを使用して圧縮します。これを行うためのしきい値として、年齢やファイルサイズを使用し、別のしきい値を使用して古いログファイルを最終的に削除します。

logrotateのデフォルトオプションは、ほとんどのデスクトップユーザーにとって十分です。スーパーユーザーとして/etc/logrotate.confファイルを編集したり、システムのcronまたはsystemdタイマーファイルを編集したりすることで、logrotateの動作を調整することができますが、これらの操作は実際にはサーバー管理者にのみ関連します。

ディスク容量を節約するために設定ファイルを調整するよりも、ログをいっぱいにしているものを修正した方がよいでしょう。どうしても設定を変更する必要がある場合は、logrotateのマニュアルページを読むことができます。

削除しても問題ないログはどれですか?

他の方法がすべて失敗し、ディスク容量を解放したい場合は、logrotateが実行される前に、手動で「.gz」で終わるアーカイブされたログファイルを削除することができます。rmを使用することができますが、これらのファイルはシステムに属しているため、スーパーユーザーとして実行する必要があります。

sudo rm /var/syslog/syslog.*gz

このコマンドは、「syslog.」が含まれ、「gz.」で終わるすべてのファイルを削除します。

sudo経由でコマンドを実行する際は、特にrmのような破壊的なコマンドの場合は、常に十分に注意してください。

意味を十分に理解せずにシステムディレクトリ内のファイルを削除することは通常は避けるべきですが、アーカイブされたログは欠落していても問題ありません。ただし、問題が発生した場合は、古いログを参照する必要がある場合があります。

ログをいっぱいにしているものを修正する方法

ログをいっぱいにしているものを調べる最善の方法は、journalctlまたはtail -fオプションを使用してログをたどることです。最善の方法は、エラーメッセージを繰り返すことです。

ディスク容量を節約するには、問題のあるプロセスに対処する必要があります。エラーの原因がわからない場合は、Webで検索するか、ディストロのサポートチャネルで助けを求めることができます。最終的に修正できたら、古いログを安全に削除できます。これで、はるかに多くのディスク容量が確保できるはずです。