ディスク容量問題の診断

LinuxBeginner
オンラインで実践に進む

はじめに

ディスク容量の枯渇は、システム管理者や開発者にとってよくある問題です。ディスクが一杯になると、アプリケーションが失敗したり、システムが不安定になったりする可能性があります。これらの問題を迅速に診断し、解決する方法を知っておくことは極めて重要なスキルです。

この実験(Lab)では、ディスク容量不足のアラートを受け取ったシステム管理者の役割を担います。容量を消費しているものを特定し、安全に容量を回復するための体系的なアプローチを学びます。標準的な Linux コマンドラインツールである dfdufindtruncate を使用します。この実験を終える頃には、基本的なディスク容量の緊急事態に対処する能力に自信が持てるようになるでしょう。

ディスク使用量の確認

このステップでは、マウントされているすべてのファイルシステムにわたるディスク容量使用量の全体像を把握することから調査を開始します。この作業に最適なツールは df (disk free) コマンドです。

df コマンドは、ファイルシステムの使用済みおよび利用可能なディスク容量を報告します。-h (human-readable: 人間が読みやすい形式) フラグを付けて使用すると、サイズが 1024 のべき乗(例:キロバイト、メガバイト、ギガバイト)で表示されるため、出力が格段に読みやすくなります。

現在のディスク使用量を確認するために、ターミナルで次のコマンドを実行してください。

df -h

以下のような出力が表示されます。特にルートファイルシステム(/ にマウントされているもの)の Use% 列に注意してください。この値が高いパーセンテージを示している場合、問題が発生している可能性があります。

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda3        40G   38.5G  1.5G  96% /
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs          1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vdb1        20G  1.2G   19G   6% /home/labex/project
...

上記の出力例から、ルートファイルシステム(/dev/vda3/ にマウント)が容量の 96% に達していることがわかります。これにより、対処が必要なディスク容量の問題があることが確認されました。

大きなファイルの検索

このステップでは、ディスクが一杯になっていることを特定した後、次にどのディレクトリが最も容量を消費しているかを見つけ出す必要があります。これには du (disk usage) コマンドが最適です。これはファイルスペースの使用量を推定します。

以下のオプションを使用して du を実行します。

  • -s: (summarize: 要約) 各引数について合計のみを表示します。
  • -h: (human-readable: 人間が読みやすい形式) サイズをより読みやすい形式(例:1K、234M、2G)で出力します。

project ディレクトリ内のコンテンツのサイズを確認してみましょう。現在の作業ディレクトリは ~/project なので、相対パスを使用できます。

~/project ディレクトリ内の各ファイルとサブディレクトリのサイズを確認するために、次のコマンドを実行します。

du -sh ~/project/*

このコマンドは、各項目のサイズを示す出力を生成します。実験のセットアップ中に作成された大きなファイルが表示されるはずです。

3.0G /home/labex/project/large_data_archive.dat

この出力は、プロジェクトディレクトリ内の large_data_archive.dat というファイルが 3.0GB の容量を占めていることを示しています。これは容量消費の一因ですが、前のステップの df の出力は、ホームディレクトリの外側に存在する可能性のある、より大きな問題を示唆していました。

大きなログファイルの特定

このステップでは、ディスク容量の問題のもう一つの一般的な原因である大容量ログファイルを調査します。システムログやアプリケーションログは、/var/log ディレクトリに保存されていることがよくあります。適切に管理されていない場合、これらのファイルは際限なく増大する可能性があります。

find コマンドは、ファイルやディレクトリを検索するための強力なユーティリティです。名前、タイプ、サイズなど、さまざまな基準に基づいてファイルを検索するために使用できます。

/var/log ディレクトリ内で、ファイル(-type f)であり、かつ 10 メガバイト(+10M)より大きいものを検索するために find を使用します。/var/log ディレクトリは root ユーザーが所有しているため、すべてのファイルを検査するために管理者権限を付与する sudo を使用する必要があります。

ターミナルで次のコマンドを実行してください。

sudo find /var/log -type f -size +10M

このコマンドは指定されたディレクトリをスキャンし、基準に一致するすべてのファイルのパスを出力します。出力には複数のファイルが表示される場合があります。

/var/log/syslog
/var/log/journal/deaaf690a67544aaaa83c02167a202c6/user-6000@0005fc8f16f7df1a-7ea5bde2c8c33f92.journal~

出力は、/var/log/syslog が 10MB より大きいことを明確に示しています。ジャーナルログのような他の大きなファイルが存在する場合もありますが、この実験では syslog に焦点を当てます。これで、ディスク容量の問題に寄与している特定の大きなログファイルを特定できました。

ログファイルのクリーンアップ

このステップでは、大きなログファイルを特定したので、それが消費している容量を解放する必要があります。サービスがファイルにアクティブに書き込んでいる場合、rm でファイルを削除すると問題が発生することがあります。より安全な方法は、ファイル自体を削除せずにその内容を空にすることです。

truncate コマンドはこの目的のために設計されています。指定されたサイズにファイルのサイズを縮小または拡張できます。サイズをゼロに設定することで、実質的にファイルを空にします。

システムファイルを変更するため、ここでも sudo が必要になります。サイズを 0 バイトに設定する -s 0 オプションを使用して truncate を使用します。

syslog の内容を消去するために、以下のコマンドを実行します。

sudo truncate -s 0 /var/log/syslog

truncate コマンドが成功した場合、出力はありません。機能したことを確認するには、ls -lh コマンドを使用してファイルの新しいサイズを確認できます。

ls -lh /var/log/syslog

出力には、ファイルサイズが 0 になっているはずです。

-rw-r----- 1 syslog adm 0 Oct 22 15:31 /var/log/syslog

これで、大きなログファイルを安全かつ正常に消去し、ディスク容量を解放しました。

修正の検証

このステップでは、最後にして最も重要なアクション、つまり、行った作業がディスク容量の問題を解決したことを検証します。最初のステップで行ったのと同じように、df -h コマンドを再度使用します。

新しい出力を元の出力と比較することで、ディスク容量が解放されたことを確認できます。

もう一度 df -h コマンドを実行します。

df -h

ルートファイルシステム(/)の Use% がステップ 1 のときよりも低くなっている出力が表示されるはずです。

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda3        40G   37G  3.0G  92% /
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs          1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vdb1        20G  1.2G   19G   6% /home/labex/project
...

使用率が 96% から 92% に低下し、ログファイルを切り詰める(truncate)ことが機能したことを確認できました。クリーンアップを完了するために、プロジェクトディレクトリで見つけた大きなデータファイルも削除できます。

rm ~/project/large_data_archive.dat

すべてのクリーンアップアクションの最終結果を確認するために、もう一度 df -h を実行します。利用可能な容量はさらに増加しているはずです。これにより、ディスク容量の問題を正常に診断し、解決したことが確認できました。

まとめ

この実験(Lab)の完了、おめでとうございます!Linux システムにおける一般的なディスク容量の問題を正常に診断し、解決しました。

この実験(Lab)では、実用的なステップバイステップのワークフローを学びました。

  1. df -h を使用してディスク使用量の全体像を把握し、問題を確認しました。
  2. du -sh を使用して特定のディレクトリのサイズを調査し、大きなファイルを特定しました。
  3. find を使用して、サイズなどの特定の基準に基づいてファイルを検索し、大きなログファイルを特定しました。
  4. ファイルを削除せずに空にする安全な方法として truncate -s 0 の使用方法を学びました。
  5. 最後に、df -h を再実行して解放された容量を確認することで、修正を検証しました。

これらのコマンドは、すべての Linux ユーザーやシステム管理者にとって不可欠なツールです。この知識があれば、システムをスムーズに稼働させ続けるための準備が整いました。