症状
Railsチュートリアルをやっていたら、下記エラーが表示されてファイルが更新できなくなってしまいました。Failed to write to '更新対象のファイルの中身'. ENOSPC: no space left on device, write .
翻訳すると、「書き込みに失敗しました。デバイスにスペースが残っていません」
容量が足りなくて、ファイルの更新ができなくっていると推測。
前半で作った「hello_app」「toy_app 」は既に削除していたので、EBS ボリューム(Amazon Elastic Block Storage)を増やしていこうと考えました。
念のため、df -h コマンドで、現在の容量をチェックし、100%になっていることを確認しました。
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 9.7G 9.7G 0 100% /
解決策
Railsチュートリアルの2. EBS ボリュームを増やす方法を確認しながらEBSボリュームを増やして、ファイルを更新できるようにしました。Railsチュートリアルの手順を下記に引用し、実際にやっていきます。
1.Amazon EC2 コンソールを開きます。
2.「ボリューム」を選択し、変更するボリュームを選択します。(複数あって分からない場合は、「インスタンス」の「実行中のインスタンス」の中からaws-cloud9から始まる Name のインスタンス ID をコピーし、ボリューム内で検索するとよいでしょう。)
3.上部にある「アクション」ボタンから「ボリュームの変更」を選択し、サイズを AWS が定める最大無料枠に設定し、変更します。(執筆時点では 30 でしたが、念のため確認しておくことをオススメします)
4.「インスタンス」にいき、該当のインスタンスを選択後、画面上部にある「アクション」ボタンから「インスタンスの状態」→「再起動(停止中なら開始)」をします。
5「Cloud9」に戻り、ターミナルからボリュームの拡張をします。現在のインスタンスに割り当てられているブロックデバイスの情報を確認するには、lsblkコマンドで表示します。ルートボリュームである/dev/xvdaは拡張されていますが、/dev/xvda1はまだ元のままです。
1から3でコンソールを対象のボリュームを選択し、アクションを押したの下記です。
4.「インスタンス」に行き、街頭のインスタンスを再起動しました。
lsblk
xvda 202:0 0 30G 0 disk
└─xvda1 202:1 0 10G 0 part /
5のコマンドを打とうとすると、「容量が足りないよ」と怒られてしまいました。
容量が足りないから増やそうとしているのに、その命令が出せないというパラドックス状態に。。。
sudo resize2fs /dev/xvda
sudo: unable to resolve host ip-ホスト名: Resource temporarily unavailable
resize2fs 1.44.1 (24-Mar-2018)
resize2fs: Device or resource busy while trying to open /dev/xvda
Couldn't find valid filesystem superblock.
詰んだと思って放置して、後日確認したらボリュームが追加されていました。
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 30G 9.2G 20G 32% /
おそらくですが、ボリュームが変更ほやほやだったため、状態が黄色状態でうまくボリュームの変更が未完了できていなかったようです。
とりあえず、cloud9でボリューム追加できました!
参考
困ったときのヒント集-Railsチュートリアル https://railstutorial.jp/help#volume-up-aws-ebsNo space left on deviceで、Volume増やしたけど、growpartコマンドすら実行できない状況を解決(docker containerを削除した)
https://qiita.com/gymnstcs/items/f535bdf8f85513580577