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ボリュームを増強し、ファイルシステム拡張作業を行います。