通常、Linuxインスタンスのディスク容量は限られています。 アプリケーションがLinuxインスタンスにデプロイされている場合、アプリケーションの実行が継続され、保存されているファイルの数が増加すると、使用可能なディスク領域が減少します。 ディスク容量が不十分な場合、サービスはファイルをディスクに書き込み続けることができず、サービスの例外が発生する可能性があります。 このトピックでは、ディスク容量不足の問題をチェックする方法と、問題を解決する方法について説明します。
問題の説明
Linux ECS (Elastic Compute Service) インスタンスにファイルまたはアプリケーションを作成したときにデバイスに空き容量がありません
というエラーメッセージが返された場合、インスタンスのディスク容量が不足しています。 このトピックでは、ディスク容量不足の問題の原因とその解決方法について説明します。
考えられる原因
ほとんどの場合、ディスク容量不足の問題は次の原因で発生します。
ディスクパーティションの領域使用量は100% に達します。
ディスクパーティションのinode使用量が100% に達します。
残ったファイル (ゾンビ) が存在します。
説明削除されたファイルは、削除される前にファイルハンドルが開いていたため、ファイルが削除されたときにファイルスペースを解放できない場合があります。
マウントポイントは上書きされます。
説明例えば、多数のファイルを管理するディスクパーティションのファイルシステムをディレクトリにマウントする。 ディレクトリはマウントポイントと見なされます。 別のディスクパーティションのファイルシステムがマウントポイントにマウントされている場合、マウントポイントは新しいファイルシステムによって上書きされます。 ただし、アプリケーションは、元のファイルシステム空間からデータを読み取り、元のファイルシステム空間にデータを書き込み続ける場合があります。 この場合、ディスク容量不足の問題を示すエラーメッセージが返されることがあります。
df
またはdu
コマンドを実行してファイルおよびディレクトリのディスク領域使用量を確認した場合、情報は返されません。 これは、df
またはdu
コマンドが、現在のマウントポイントに対応するディスクパーティションの領域使用量に関する情報を返すためです。inotify腕時計の上限に達します。
説明inotify APIは、Linuxのファイルシステムイベントを監視するためのメカニズムを提供します。 inotifyを使用して、ファイルシステムのファイル変更をリアルタイムで監視できます。 このエラーは、ディスク容量不足によるものではありません。 このトピックでは、問題のトラブルシューティングに役立つエラーについて説明します。
トラブルシューティングの方法と解決策
デバイスに空き容量がありません
エラーを解決するには、問題の原因に基づいて次の操作を実行します。
問題をトラブルシューティングできるECSインスタンスに接続する必要があります。 詳細については、「ワークベンチを使用したSSH経由のLinuxインスタンスへのログイン」をご参照ください。
次の操作で, ファイルを削除してディスク領域を解放する場合は, 削除する前にファイルが不要になったことを確認してください。 これにより、データの損失やビジネスへの影響を防ぎます。 手動でファイルを削除する前に、ディスクバックアップを実行することを推奨します。 ファイルをコピーするか、スナップショットを使用してデータをバックアップできます。 スナップショットの作成方法の詳細については、「ディスクのスナップショットの作成」をご参照ください。
ディスクパーティションのスペース使用量が100%
識別方法
ディスク容量の現在の使用状況を照会し、大量のディスク容量を消費するファイルを見つけます。
次のコマンドを実行して、ディスク領域の使用状況を照会します。
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/
ディレクトリ内の大きなファイルを削除できるかどうかを確認します。
ソリューション
原因とビジネスシナリオに基づいて、次のいずれかの操作を実行します。
ビジネス要件に基づいて、大量のディスク容量を消費し、不要になったファイルまたはディレクトリを削除します。
ビジネスでディスクからファイルを削除できない場合、またはファイルを削除してディスク領域を解放できない場合は、ビジネス要件に基づいて既存のディスクのサイズを変更するか、ディスクをさらに作成します。 詳細については、「ディスクのサイズ変更の概要」、「空のデータディスクの作成」、および「データディスクのアタッチ」をご参照ください。
ディスクパーティションのinode使用率が100%
ファイルシステム内の各ファイルまたはディレクトリは、一意のinodeによって識別されます。 ディスク・パーティションがフォーマットされるとき、特定の数のiノードが、ファイルおよびディレクトリのためのディスク・パーティションに予め割り当てられる。 ただし、ディスクパーティションのファイルシステムに多数の小さなファイルまたはディレクトリが格納されている場合、inodeリソースが不足する可能性があります。 ディスクパーティションのすべてのiノードがファイルまたはディレクトリに割り当てられている場合、ディスクパーティションに空き領域があるかどうかに関係なく、ディスクパーティションに新しいファイルまたはディレクトリを作成できません。 この問題を解決するには、不要なファイルまたはディレクトリを削除してinodeをリリースするか、inodeの数を増やすことができます。
識別方法
次のコマンドを実行して、inodeの使用状況を照会します。
df -i
ソリューション
inodeの使用量が100% に達している場合、または近づいている場合は、次のいずれかの方法を使用して問題を解決します。
残ったファイル (ゾンビ) が存在する
ディスクパーティション容量とinode容量が両方とも正常である場合、システム内に多数の削除されたファイル (削除され
たファイル) が存在する可能性があります。 これらのファイルはまだシステム内のプロセスによって占有されているため、システムは対応するディスクスペースを解放できません。 これらのファイルは削除済みとしてマークされており、df
またはdu
コマンドを実行してもカウントできません。 残りのファイルの数が多すぎると、大量のディスク容量が占有されます。 次の操作を実行して、残りのファイルを照会および削除します。
識別方法
オペレーティングシステムにlsofがインストールされていない場合は、次のいずれかのコマンドを実行してlsofをインストールします。
Alibaba Cloud LinuxおよびCentOS
sudo yum install -y lsof
DebianとUbuntu
sudo apt install -y lsof
次のコマンドを実行して、残りのファイルのディスク領域使用量を照会します。
sudo lsof | grep delete | sort -k7 -rn | more
次の図に示すサンプルコマンド出力が表示されます。 削除された状態のファイルのサイズは、7列目に表示されます。 サイズの合計が予想外のディスク容量の使用量に近いかどうかを確認します。 合計が予想外の使用量に近い場合、残りのファイルはディスク容量を消費します。
ソリューション
残りのファイルが存在する場合は、次のいずれかの方法でファイルハンドルを解放し、残りのファイルを消去してディスク領域を解放します。
インスタンスの再起動
インスタンスの再起動後、システムは実行中のプロセスを終了し、削除されたファイルのハンドルを解放します。
警告インスタンスの再起動によりサービスが中断されます。 適切な期間にインスタンスを再起動することを推奨します。
killコマンドの実行
lsof
コマンドを実行すると、残りのファイルに対応する実行中のプロセスのプロセスID (PID) が通常2番目の列に表示されます。kill
コマンドでPIDを指定して、対応するプロセスを終了できます。次のコマンドを実行して、プロセスのPIDを一覧表示します。
lsof | grep delete
次のコマンドを実行して、ビジネス要件に基づいて残りのファイルに対応するプロセスを終了します。
kill <PID>
警告プロセスが終了すると、インスタンスで実行されるサービスが影響を受ける可能性があります。 作業は慎重に行ってください。
マウントポイントが上書きされる
上記の3つの原因を取り除いた後、ディスク容量不足の原因を特定できない場合は、マウントポイントが上書きされる可能性があります。 次の方法を使用して原因を見つけることができます。
識別方法
次のコマンドを実行して、データディスクのマウント情報を表示します。
mount
次のようなコマンド出力が返されると、JDKがインストールされます。
2つのデバイスが /mnt/device_vdcディレクトリにマウントされています。 マウントポイントは、ディレクトリ内で上書きされる可能性があります。
次のコマンドを実行して、パーティションに関する情報を表示します。
df -h
次のコマンド出力が返されます。
ソリューション
この問題を解決するには、ディスクパーティションをアンマウントし、元のマウントポイントの領域使用量を確認します。
この例では、/mnt/device_vdc
ファイルシステムがアンインストールされています。
inodeの数を増やすには、マウントポイントからファイルシステムをアンマウントする必要があります。 ただし、アプリケーションサービスが中断される可能性があります。 適切な期間にファイルシステムをアンマウントすることを推奨します。
sudo umount /mnt/device_vdc
ディスクパーティションのマウントをキャンセルした後、元のマウントディレクトリの領域使用量を確認し、特定の状況に応じて適切な対策を講じる必要があります。
inotify時計の上限に達しています
tail -f
などのコマンドを実行したときに、tail: cannot watch '...': No space left on device
のようなエラーメッセージが返された場合、inotify watch
の上限に達します。 この問題を解決するには、inotify時計の上限を増やすことができます。
識別方法
次のコマンドを実行して、inotify watch
の上限を表示します。
cat /proc/sys/fs/inotify/max_user_watches
ソリューション
次のコマンドを実行して、inotifyウォッチの上限を変更します。
sudo sysctl fs.inotify.max_user_watches=<New upper limit>
<New upper limit>
を、inotifyウォッチに指定する上限の値に置き換えます。
inotifyウォッチの上限を増やすと、inotifyウォッチはより多くのシステムメモリを占有する可能性があります。 inotify時計の上限を変更すると、システムのメモリとパフォーマンス、および可能性のある影響を評価します。 man 7 inotify
コマンドを実行して、inotifyウォッチと関連する設定の詳細を確認できます。
関連ドキュメント
ディスク容量が不足している場合や、データストレージの要件が増加している場合は、ビジネス要件に基づいてストレージソリューションを最適化することをお勧めします。 詳細については、以下の最適化の提案をご参照ください。
ディスク領域に画像やビデオなどの多数のファイルが保存されていて、同時実行性の高い読み取りまたは書き込み操作がディスクに対して実行されない場合は、Object Storage Service (OSS) を使用できます。 OSSは、大容量で安全で費用対効果が高く、信頼性の高いクラウドストレージサービスであり、データ量に基づいてストレージスペースを自動的に拡張できます。 ossfsを使用して、OSSバケットをECSインスタンスにマウントできます。 アプリケーションは、コードを変更することなく、オンプレミスのファイルと同じ方法でOSSバケット内のオブジェクトを管理できます。 ossfsを使用してOSSバケットをLinuxシステムのローカルディレクトリにマウントする方法については、「ossfs」をご参照ください。
ビジネスで並行性の高い読み書き操作とデータ共有が必要な場合は、Apsara File Storage NAS (NAS) を使用してファイルを保存できます。 NASは、高性能で同時実行性の高い共有ストレージを可能にするシンプルでスケーラブルなファイルシステムを提供し、ECSと一緒に使用できます。 NASは、手動操作を必要とせずに、データ量の増加に伴いストレージ容量を自動的に拡張できます。 詳細については、「Linux ECSインスタンスへのファイルシステムのマウント」をご参照ください。
大量のログファイルをディスクに保存する場合は、ログファイルをSimple log Serviceに転送できます。 これにより、ログクエリが容易になり、ディスク使用量が削減されます。 詳細については、「入門」をご参照ください。