問題#
最近、仮想マシンでファイルを保存している際に、予約されていた 10G の仮想ディスクがいっぱいになってしまったことに気づきましたので、スペースを整理することにしました。
手順#
- ディスク使用状況を確認する
sudo df -h
/dev/sda1 のスペースがすでに 7.4G 使用されていることがわかります。これは整理後の容量です。
/dev/sda1
は Linux のブロックデバイスファイルであり、通常はハードディスクのパーティションを表すために使用されます。Linux では、ハードディスクは通常/dev/sd*
の形式で表され、*
は小文字のアルファベットで表されます。例えば、/dev/sda
、/dev/sdb
などです。
ハードディスクが複数のパーティションに分割される場合、各パーティションにはデバイスファイルが割り当てられ、パーティションを表すために使用されます。
/dev/sda1
は最初のパーティションを表し、/dev/sda2
は 2 番目のパーティションを表します。
- ディスク内の大きなファイルを確認する
sudo du -ah . | sort -rh | head -n 10
du
コマンドは、指定したディレクトリやファイルのディスク使用状況を表示します。ファイルのサイズやディレクトリのサイズなどが表示されます。-h
オプションを使用すると、人間が読みやすい形式でファイルサイズが表示されます。例えば、以下のコマンドは現在のディレクトリ内のすべてのファイルとディレクトリのサイズを表示し、サイズの大きい順に並べ替えます:
このコマンドでは、
-a
はすべてのファイルとディレクトリのサイズを表示することを意味し、-h
は人間が読みやすい形式でファイルサイズを表示することを意味します。.
は現在のディレクトリを表し、検索したいディレクトリ名に変更することができます。sort -rh
はサイズの大きい順に並べ替えることを意味し、head -n 10
は最初の 10 件の結果のみ表示することを意味します。
- コマンドを使用して大きなファイルを個別にクリーンアップする
/usr
が多く使用されていることがわかりましたが、クリーンアップ後にほとんど容量が変わらなかったため、スキップすることを検討できます。また、このディレクトリには多くのユーザーがインストールしたプログラム、ライブラリファイル、その他のリソースが含まれているため、このディレクトリをクリーンアップする際には注意が必要です。重要なファイルを誤って削除してしまい、システムに問題が発生する可能性があります。次に、コマンドの使用方法について説明します。
- 不要な言語ファイルを削除する:
sudo apt autoclean
- 不要なパッケージをすべて削除する:
sudo apt autoremove --purge
- 不要な依存関係と設定ファイルを削除する:
sudo apt clean
次に、/var
をクリーンアップします。
var
はvariable
の略であり、このディレクトリには頻繁に変更されるディレクトリが含まれています。さまざまなログファイルなどがここに保存されます。
/lib/docker/overlay2
ディレクトリは、Docker のストレージドライバ内の重要なディレクトリであり、Docker イメージとコンテナのファイルシステムレイヤーを保存するために使用されます。Docker を使用する際には、このディレクトリのサイズが徐々に増加し、大量のディスクスペースを占有する可能性があります。不要な Docker イメージやコンテナを削除するか、Docker のクリーンアップコマンドを使用して不要なデータをクリーンアップすることができます。以下に一般的な Docker クリーンアップコマンドの例を示します:
- 停止しているすべてのコンテナをリストアップする:
sudo docker ps -a -q -f status=exited
- 停止しているすべてのコンテナを削除する:
sudo docker rm $(sudo docker ps -a -q -f status=exited)
- 使用されていないすべてのイメージをリストアップする:
sudo docker images -q -f dangling=true
- 使用されていないすべてのイメージを削除する:
sudo docker rmi $(sudo docker images -q -f dangling=true)
- 使用されていないすべてのデータをクリーンアップする:
sudo docker system prune -a --volumes
Docker データをクリーンアップする際には、重要なデータを誤って削除しないように、バックアップを取ることをお勧めします。
logrotate
ツールを使用して古いログファイルを自動的にローテーションおよび削除します。logrotate
ツールは、時間、サイズ、その他の条件に基づいてログファイルをローテーションおよび削除するように構成できます。以下に一般的な logrotate
コマンドの例を示します:
- 大きなファイルを削除するには、次のコマンドを使用します:
sudo truncate -s 0 /var/log/your_large_file.log
- このコマンドは
/var/log/your_large_file.log
ファイルのサイズをゼロに切り詰め、つまりファイルを空にします。その後、logrotate
コマンドを実行して古いログファイルをローテーションおよびアーカイブします:
sudo logrotate -f /etc/logrotate.conf
-f
パラメータは、logrotate
に現在のファイルをローテーションする必要がない場合でも、即座にローテーション操作を実行することを意味します。/etc/logrotate.conf
は logrotate
のデフォルトの設定ファイルパスであり、必要に応じて異なる設定ファイルパスを使用できます。
truncate
コマンドを使用する際には、空にするファイルをバックアップすることをお勧めします。ファイルの内容を復元する必要がある場合に備えています。
journalctl
ツールを使用して古いログメッセージとデータをクリーンアップします。journalctl
ツールは、時間、優先度、ソース、キーワードなどに基づいてログメッセージをフィルタリングし、ログメッセージの数と時間範囲を制限することができます。以下に一般的な journalctl
コマンドの例を示します:
- 最新の 100 件のシステムログメッセージを表示する:
sudo journalctl -n 100
- 特定のサービスのログメッセージを表示する:
sudo journalctl -u your_service_name
- 特定の時間範囲のログメッセージを表示する:
sudo journalctl --since "2022-01-01 00:00:00" --until "2022-02-01 00:00:00"
- 特定のプロセスのログメッセージを表示する:
sudo journalctl _PID=your_process_id
古いログメッセージとデータをクリーンアップするには、次のコマンドを使用します:
sudo journalctl --vacuum-size=100M
このコマンドは、不要なログメッセージとデータをすべてクリーンアップし、ログファイルのサイズを 100M に制限します。--vacuum-size
パラメータの値を必要に応じて調整できます。このコマンドはシステムログのみをクリーンアップします。