Linuxで「デバイスに空き容量がありません」というエラーを効果的に解決する方法
「デバイスに空き容量がありません」というエラーメッセージに遭遇すると、本当にイライラします。特にディスクがまだかなり空っぽに見える場合はなおさらです。Linuxはこういう奇妙な挙動をすることがあるんです。空き容量が十分にあるかどうかではなく、裏で何か別の問題が起きている可能性があります。原因としては、削除されたファイルをまだ保持しているプロセス、inodeの枯渇、あるいはハードウェアの故障などが考えられます。どれが問題なのかを突き止めれば、頭を悩ませる手間が大幅に省けます。ここでは、頭を悩ませることなくトラブルシューティングと修正を行う方法をご紹介します。
Linuxで「デバイスに空き容量がありません」というエラーを修正する方法
実際にスペースがあるか確認する(duとdfで確認)
これがステップ1です。Linuxでは、ディスクが実際にはいっぱいでないのに、空き容量がないと表示されることがあるためです。ターミナルで以下のコマンドを実行してください。
sudo du -sh /
ルートディレクトリのディスク使用量の簡単な概要が表示されます。出力は少し長くなりますが、一番上の合計に注目してください。その後、次のコマンドでマウントの空き容量を確認してください。
sudo df -h
これは、マウントされたファイルシステム全体で利用可能なスペースの量を示します。これらの出力を比較することで、本当にスペースが不足しているのか、それとも他の何かがエラーの原因になっているのかを確認できます。プロセスが巨大なファイルを削除したにもかかわらず、そのファイルがまだ開いているためスペースが解放されていない場合があります。そのため、Linuxでは空きスペースがあっても、スペースがいっぱいと表示されます。
修正1: 削除されたファイルを保持しているプロセスを強制終了する
これはよくあるケースです。プロセスが削除済みのファイルをロックしている場合があり、技術的にはまだ「使用中」であるため、Linux はその領域を解放できません。次の手順に従ってください。
sudo lsof / | grep deleted
このコマンドは、ファイルを削除したにもかかわらず開いたままになっているプロセスを一覧表示します。なぜ機能するのかは不明ですが、一部のマシンではこのコマンドが問題のファイルを見つけるのに役立ちます。この領域を解放するには、プロセスを再起動してください。
sudo systemctl restart your-service-name
正確なサービスがわからない場合、またはサービスが複数ある場合は、次のコマンドですべてのシステム依存関係を再読み込みできます。
sudo systemctl daemon-reload
注:再起動またはリロードすると、これらのプロセスが保持していたファイル領域が解放されるはずです。通常、これで問題はすぐに解決します。ただし、設定によっては、特に多くのサービスが関係している場合は、完全な効果を確認するために再起動が必要になる場合があります。
修正2: inodeが不足していないか確認する
これはあまり目立たない原因です。inodeは、各ファイルのための小さなメタデータコンテナのようなものです。小さなファイルが大量に保存されている場合、ディスクがいっぱいになる前にinodeの制限に達してしまう可能性があります。確認するには、次のコマンドを実行してください。
sudo df -i
このコマンドは、inodeの総数、使用済み、空き容量を表示します。システムの空きinodeが0個の場合、それが原因です。不要な小さなファイルを削除したり、キャッシュをクリアしたりすることで、inodeを解放できる場合があります。ディスク容量とは異なり、inodeはドライブのフォーマット時に設定されるため、新たに生成することはできません。
修正3: ドライブ上の不良セクタをマークする
ハードウェアの摩耗や劣化により、不良セクタ(ディスクの物理的に損傷した領域)が発生する可能性があります。これらの領域は空き領域として表示されるものの、実際にはデータの書き込みや読み取りはできません。この問題を解決するには、ライブ環境から起動し、ファイルシステムチェックを実行する必要があります。
sudo fsck -vcck /dev/sda
ドライブの実際のデバイスパスに置き換えてください/dev/sda。このコマンドは不良セクタをスキャンし、使用不可としてマークすることで、データ書き込み時のエラーを防止します。ただし、このコマンドは魔法のように空き容量を増やすわけではなく、ファイルシステムを破損から保護するだけなので注意してください。不良セクタが頻繁に発生する場合は、クリーンアップやハードウェアの交換が必要になる場合があります。
試してみる価値のある他のヒント
- 膨れ上がった可能性のあるログやキャッシュフォルダをクリアしましょう。/var/logや/tmpなどが考えられます。
- ディスク クリーンアップ ルーチンを見直してください。古いカーネルやデバイスのスナップショットがギガバイト単位の容量を消費している場合があります。
- 特定のボリュームを使用している場合は、そのクォータを確認してください。制限が予想よりも低く設定されている可能性があります。
「空き容量がありません」というエラーの原因となっているバグを特定するには、多少の試行錯誤が必要になる場合があります。しかし、ほとんどの場合、削除されたファイルを保持しているプロセスやinodeの枯渇が原因として考えられます。ただし、ハードウェアの問題は全く別の問題であり、ハードウェアの診断や交換が必要になる場合があることを覚えておいてください。
まとめ
- スペースの問題を確認するには、 sudo du -sh /とsudo df -h を実行します。
- 削除されたファイルをロックしているプロセスを識別するには、 sudo lsof / | grep deletedを使用します。
- 問題のあるサービスまたはプロセスを再起動してスペースを解放します。
- sudo df -iでinodeの可用性を確認します。必要に応じて小さなファイルを削除します。
- 不良セクタが疑われる場合は、sudo fsck -vcck /dev/sdaでファイルシステム チェックを実行します。
まとめ
この問題の原因は、ほとんどの場合、残存プロセスやinode制限です。これらを解消すれば、ディスク容量は再び正常に動作するはずです。場合によっては、少しの調査と忍耐が必要ですが、これらの手順で大抵の問題は解決できます。これで、誰かのイライラが少しでも軽減されることを願っています。
関連記事
この記事は役に立ちましたか?