WordPress (Lightsail)での「No space left on device」エラーの解決
WordPressサイトの運用中に「Failed to open stream: No space left on device」というエラーに遭遇し、サイトが「このサイトで重大なエラーが発生しました。」という表示になってしまうことがあります。
この記事では、この問題の原因と解決方法について説明します。
この記事での解決方法は、以下の環境で確認されています:
- Amazon Lightsail上のWordPress(Bitnami)
- キャッシュプラグイン(W3 Total Cache、WP Super Cache等)を使用している環境
※環境やプラグインの構成によって、問題の原因や解決方法が異なる可能性があります。
🔧 エラーの原因
管理画面ではログインできるが例えば、プラグインの更新を行うと「No space left on device」が発生しています。
このエラーは一見するとディスク容量不足のように見えますが、実際にはinodeの枯渇が原因であることが多いです。特に、キャッシュプラグインを使用している環境では、大量の小さなキャッシュファイルが生成され、inodeを消費する可能性があります。
以下のコマンドでディスク使用状況を確認すると:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p1 40G 21G 18G 54% /
ディスク容量自体は十分(54%使用)であるにもかかわらず、inode の使用状況を確認すると:
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/nvme0n1p1 2613248 2613248 0 100% /
inodeが100%使用されていることがわかります。
問題の箇所を特定するために、以下のコマンドで各ディレクトリのinode使用状況を確認します:
$ for d in /*; do echo -n "$d "; find $d -xdev -printf '%i\n' 2>/dev/null | sort -u | wc -l; done
/bin 1
/bitnami 272537
/boot 629
/dev 287
/etc 1264
/home 13
/lib 1
/lib32 1
/lib64 1
/libx32 1
/lost+found 1
/media 1
/mnt 2
/opt 18068
/proc 38027
/root 1
/run 417
/sbin 1
/srv 1
/sys 10942
/tmp 6
/usr 40702
/var 2657
Bitnami WordPressでキャッシュプラグインを使用している場合、特に/opt/bitnami/wordpress/wp-content/cache
ディレクトリに大量のキャッシュファイルが蓄積されていることが多いです。
🩹 解決方法
1. キャッシュディレクトリの削除
以下のコマンドでキャッシュを削除します:(消せないものもあります)
$ sudo rm -r /opt/bitnami/wordpress/wp-content/cache/*
rm: cannot remove '/opt/bitnami/wordpress/wp-content/cache/object/term-queries': Directory not empty
rm: cannot remove '/opt/bitnami/wordpress/wp-content/cache/object/post-queries': Directory not empty
rm: cannot remove '/opt/bitnami/wordpress/wp-content/cache/object/terms': Directory not empty
rm: cannot remove '/opt/bitnami/wordpress/wp-content/cache/object/posts': Directory not empty
rm: cannot remove '/opt/bitnami/wordpress/wp-content/cache/object/post_tag_relationships': Directory not empty
このコマンドを実行することで、inode不足が解消され、サイトが復旧します。
※キャッシュプラグインを使用していない環境では、この方法が適用できない場合があります。その場合は、df -i
の結果を基に、どのディレクトリでinodeが多く使用されているかを調査する必要があります。
2. 確認
再度inodeの使用状況を確認:
$ df -i
使用率が下がっていることを確認できます。
まとめ
「No space left on device」エラーは、実際のディスク容量ではなくinodeの枯渇が原因であることが多いです。特にキャッシュプラグインを使用している環境では、キャッシュファイルの適切な管理と定期的なモニタリングが必要になります。
なお、この解決方法は特定の環境とプラグイン構成に基づいています。異なる環境や構成では、問題の原因や最適な解決方法が異なる可能性がありますので、ご注意ください。