事象
Fargateでデプロイしたら、以下のエラーが発生しました。
CannotCreateVolumeError: unable to mirror
/var/lib/two/volumes/8b081e14781e4f2885380becbbefab29/volumes/vf-4028715966 to
/var/lib/two/volumes/8b081e14781e4f2885380becbbefab29/volumes/public-files: failed to copy
existing contents to task volume: unable to copy contents from the image
/var/lib/two/volumes/8b081e14781e4f2885380becbbefab29/volumes/public-files
/var/lib/two/volumes/8b081e14781e4f2885380becbbefab29/volumes/vf-4028715966: failed to copy files: copy file range failed: no space left on device
調査
- 何回かやると成功したので、コンテナの中にログインして調べる。
コンテナにECS Execでログイン
aws ecs execute-command \
--cluster {クラスタ名} \
--task {タスク名} \
--container {コンテナ名} \
--interactive \
--command "/bin/sh"
dfコマンドで調べる
- Diskがいっぱい・・・。Railsアプリケーションの中身が多いようだ・・。
root@ip-192-168-5-22:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 30G 30G 0 100% /
tmpfs 64M 0 64M 0% /dev
shm 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/nvme0n1p1 4.9G 1.9G 3.0G 38% /dev/init
/dev/nvme1n1 30G 30G 0 100% /usr/src/rails/public
tmpfs 1.9G 0 1.9G 0% /proc/acpi
tmpfs 1.9G 0 1.9G 0% /sys/firmware
duコマンドでディレクトリ別に調べる
- うーん。5.5GBしか使っていない(dfだと30G)
root@ip-192-168-6-103:~# du -h /usr/src/rails/public | grep 'G'
1.2G /usr/src/rails/public/packs/js
1.2G /usr/src/rails/public/packs
1.6G /usr/src/rails/public/packs-test/js
1.6G /usr/src/rails/public/packs-test
2.7G /usr/src/rails/public/assets
5.5G /usr/src/rails/public
AWSサポートに問い合わせたところ、dfコマンドだと、エフェメラルストレージの使用量なので、実際の使用量と差異が発生するとのこと。
つまり、5.5GB
も使っていることが問題だった!!!
原因
-
5.5GB
使っていたのは、Railsのassets:precompileの結果をキャッシュしていて、ゴミデータまで一緒にキャッシュされていた為でした。また、それをデプロイしていたのでno space left on device
が発生しました。