Linuxシンプルアプリケーションサーバーでファイルまたはアプリケーションを作成するときにエラーメッセージNo space left on deviceが表示された場合は、サーバーのディスク容量が不足しています。ディスク使用量が予期しない値である場合は、このトピックで提供されている方法を使用して、問題の原因を特定し、問題を解決できます。
ディスク使用量が予期したとおりである場合は、シンプルアプリケーションサーバーのアップグレード、データディスクの接続、または既存のデータディスクの拡張によって問題を解決できます。詳細については、シンプルアプリケーションサーバーのアップグレード、データディスクの接続、またはデータディスクの拡張を参照してください。
考えられる原因
ほとんどの場合、ディスク容量不足の問題は次の原因で発生します。
ディスクパーティションの容量使用率が100%に達している。
ディスクパーティションのinode使用率が100%に達している。
残存ファイル(ゾンビ)が存在する。
説明削除されたファイルは、削除前にファイルハンドルが開いていた場合、削除時にファイル容量を解放できないことがあります。
マウントポイントが上書きされている。
説明たとえば、多数のファイルを管理するディスクパーティションのファイルシステムがディレクトリにマウントされているとします。このディレクトリはマウントポイントとみなされます。別のディスクパーティションのファイルシステムがマウントポイントにマウントされると、マウントポイントは新しいファイルシステムによって上書きされます。ただし、アプリケーションは元のファイルシステム容量からデータの読み取りと書き込みを続行することがあります。この場合、ディスク容量不足の問題を示すエラーメッセージが返されることがあります。
dfコマンドまたはduコマンドを実行してファイルとディレクトリのディスク容量使用率を確認しても、情報は返されません。これは、dfコマンドまたはduコマンドが現在のマウントポイントに対応するディスクパーティションの容量使用率に関する情報を返すためです。inotifyウォッチの上限に達している。
説明inotify APIは、Linuxでファイルシステムイベントを監視するためのメカニズムを提供します。inotifyを使用して、ファイルシステム内のファイルの変更をリアルタイムで監視できます。このエラーは、ディスク容量不足が原因ではありません。このトピックでは、トラブルシューティングに役立つエラーについて説明します。
1. ディスクパーティションの容量使用率が100%に達している。
大量の容量を占有しているファイルまたはディレクトリをクリアする
レスキュー機能を使用してLinuxシンプルアプリケーションサーバーに接続します。詳細については、レスキュー機能を使用してLinuxサーバーに接続するを参照してください。
次のコマンドを実行して、ディスク容量の使用率をクエリします。
df -h次のコマンド出力が返されます。この例では、
/dev/vda3パーティションの使用率が100%に達しています。
次のコマンドを実行してルートディレクトリに移動し、どのディレクトリが最大のディスク容量を消費しているかを特定します。
sudo du -sh /* | sort -rh | head -n 10次のコマンド出力が返されます。図に示すように、
/homeディレクトリが最大の容量を消費しています。したがって、/homeディレクトリ内のどのファイルまたはディレクトリが最大の容量を占有しているかを確認します。実際のシナリオに基づいて次の操作を実行します。
次のコマンドを実行して、どのディレクトリが最大のディスク容量を消費しているかを特定します。
たとえば、前のコマンド出力は、
/homeディレクトリが最大のディスク容量を消費していることを示しています。次に、/homeディレクトリ内のどのファイルまたはディレクトリが最大のディスク容量を消費しているかをさらに特定する必要があります。sudo du -sh /home/* | sort -rh | head -n 10次のコマンド出力が返されます。
ecs-userディレクトリが最大の容量を消費しています。ecs-userディレクトリ下の特定のファイルまたはサブディレクトリをさらにチェックして、どの項目がより大きな容量を消費しているかを判断できます。
/home/ecs-user/ディレクトリにある大きなファイルを削除できるかどうかを確認します。
シンプルアプリケーションサーバーのアップグレード、既存のデータディスクの拡張、またはデータディスクの接続
ファイルをクリアしても容量を解放できない場合は、シンプルアプリケーションサーバーのアップグレード、データディスクの拡張、またはデータディスクの接続によって問題を解決できます。詳細については、シンプルアプリケーションサーバーのアップグレード、データディスクの接続、またはデータディスクの拡張を参照してください。
2. ディスクパーティションのinode使用率が100%に達している。
inode使用率のクエリ
レスキュー機能を使用してLinuxシンプルアプリケーションサーバーに接続します。詳細については、レスキュー機能を使用してLinuxサーバーに接続するを参照してください。
inode使用率が100%に達しているか、100%に達しようとしている場合は、次のいずれかの操作を実行します。
inode使用率の高いファイルまたはディレクトリをクリアする
次のコマンドを実行して、ルートディレクトリの各サブディレクトリに存在するファイル数をクエリします。
for i in /*; do echo $i; sudo find $i | wc -l; done次の図に示すサンプルコマンド出力が表示されます。コマンド出力は、
/mntディレクトリに最大の数のファイルがあることを示しています。次に、/mntディレクトリ内のどのディレクトリに最大の数のファイルがあるかを特定する必要があります。inode使用率は、ファイル数が増えるにつれて増加します。実際のシナリオに基づいて次の操作を実行します。
次のコマンドを実行して、
inode使用率が最も高い/mntディレクトリ内のどのファイルまたはディレクトリのinode使用率が最も高いかを確認します。
inode使用率が最も高いファイルまたはディレクトリを見つけて、容量をクリーンアップできます。
inode数を増やす
ディスクのinode数を増やすには、ディスクをフォーマットする必要があります。この場合、ディスクに保存されているデータは削除されます。ディスクをフォーマットする前に、データをバックアップする必要があります。ファイルのコピーまたはスナップショットの作成によってデータをバックアップできます。スナップショットの作成方法の詳細については、「スナップショットの管理」トピックのスナップショットの作成セクションを参照してください。
inode数を増やすには、マウントポイントからファイルシステムをアンマウントする必要があります。ただし、これによりアプリケーションサービスが中断される可能性があります。適切な期間中にファイルシステムをアンマウントすることをお勧めします。
3. 残存ファイル(ゾンビ)が存在する。
レスキュー機能を使用してLinuxシンプルアプリケーションサーバーに接続します。詳細については、レスキュー機能を使用してLinuxサーバーに接続するを参照してください。
次のコマンドを実行して、残存ファイルのディスク容量使用率をクエリします。
sudo lsof | grep delete | sort -k7 -rn | more次の図に示すサンプルコマンド出力が表示されます。削除状態のファイルのサイズは7番目の列に表示されます。サイズの合計が予期しないディスク容量の使用率に近いかどうかを確認します。合計が予期しない使用率に近い場合、残存ファイルがディスク容量を消費しています。

4. マウントポイントが上書きされている。

