- サイト制作のノウハウと最適化を目指して-

2018.9.22AWSで容量が空いてるのに[No space left on device]になる原因はinodeの枯渇

AWSで容量が空いてるのに[No space left on device]になる原因はinodeの枯渇

rsyncでデプロイをしようとした時に突如現れたエラーコード、リリース直前に発生し焦りましたが無事解決したので手順含め紹介します。

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

原因調査

ファイル作成をしてみる

No space left on device

ディスク容量が無く作れないとのエラーメッセージ

ディスク容量

$ df -m
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/sda1          55308 37191     15303  71% /

ディスクの空きを確認しても容量にはまだ余裕があります。

inode

$ df -i
Filesystem        Inodes   IUsed     IFree IUse% Mounted on
/dev/sda1        3604480 3604480   0   100% /

ということでinodeを確認するとinodeが圧迫されていることが確認されました。

容量食いつぶし

inodeを増やしてみよう

そもそもinodeって?

inode はユニックスやPCユニックスのファイルシステムで使われている機能のひとつ。そのディスクの中に保存されているファイルの名前、大きさ、所有者、更新情報などを記録している。
(参照元:NTT PC COMMUNICATIONS

要するにファイルのメタ情報やディレクトリ階層を保存するファイルがinodeになります。

何故枯渇する

inodeと総数とinode用に予約された領域はファイルシステムが最初に作成されるときに設定されます。

inode領域を動的に変更することはできないため、すべてのファイルシステムにはinodeが必要なため枯渇が発生します。

ファイルシステムが枯渇することが珍しいですが、次の理由によって枯渇することがあるでしょう。

大量のディレクトリ、シンボリッック、小さなファイルを作成している。
ファイルシステムの破損
一時ファイルが大量に存在している状態で正常にシャットダウンせずに再起動する

inode枯渇の対応

inodeを拡張

inode枯渇問題を解決する方法としてファイルを削除することも1つですが、再発する恐れがあるのでinodeの領域を拡張します。

ディスク領域の10%を割り当てる例です。

xfs_growfs -m 10 /dev/sda1

ディスク領域以外にinodeってものがあると覚えていると何かあったときに対処できるようになるでしょう。