inode枯渇とその対応方法について記録しておきたいと思います。今回はAmazon Linux 2023を用いて検証します。
inodeとその枯渇状況の確認
パーミッション、オーナー、タイムスタンプなどディレクトリの情報がメタデータとしてinodeに記録されます。以下のコマンドを打ったときにinodeを確認することができます。
[root@xxxx]# touch test.txt [root@xxxx]# ls -i 01234567 test.txt [root@xxxx]#stat test.txt File: test.txt Size: 0 Blocks: 0 IO Block: 0000 通常の空ファイル Device: 00000h/00000d Inode: 01234567 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2025-00-00 00:00:00.000000000 +0900 Modify: 2025-00-00 00:00:00.000000000 +0900 Change: 2025-00-00 00:00:00.000000000 +0900 Birth: 2025-00-00 00:00:00.000000000 +0900 [root@xxxx]#
inodeが枯渇すると、新たにファイルを作成できなくなります。もしこれがコマンド実行時であれば、枯渇したときに以下のようなエラーメッセージが出ます。
[root@xxxx]# touch file.tmp touch: 'file.tmp' に touch できません: デバイスに空き領域がありません エラー: file.tmp の作成に失敗しました (inode枯渇の可能性)。 [root@xxxx]#
以下の通り、「I残り」がゼロになっているので枯渇していると確認できます。(一部数字にダミーを用いてます。)
[root@xxxx]# df -i ファイルシス Iノード I使用 I残り I使用% マウント位置 (中略) /dev/nvme0n1p1 9876543 9876543 0 100% / (中略) [root@xxxx]#
もし上記の通りinode枯渇している場合、SSM接続しようとすると以下のエラーメッセージとなります。
Standard_Streamはファイル作成できなくてSSMが動かせないのではと推測しています。
上記について対処方法は以下の3通りが考えられるかと思います。
1,SSH接続し、不要なファイルを削除する
2,SSH接続し、EBS拡張作業をする
3,(SSH接続が難しい場合)別のインスタンスにEBSをアタッチして、EBS拡張作業をする
対応手順
1,SSH接続し、不要なファイルを削除する
不要なファイルが多いところを探し、削除できそうなものを削除していきます。
2,SSH接続し、EBS拡張作業をする
SSH接続できることを確認したら、以下2つのドキュメントにそって、EBSボリュームを増やし、次にファイルシステムを拡張します。
a,EBSボリューム増強
b,ファイルシステム拡張
3,インスタンスがプライベートサブネットにあるなど、何らかの事情でSSH接続ができない場合
EBSをデタッチし、別インスタンスを立ち上げてそちらにアタッチします。(既存の別インスタンスにアタッチも可)
次に上記2番目のSSH接続時と同様に、EBSボリュームを増強し、ファイルシステム拡張作業を行います。