2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

composer requireを実行した際にNo space left on deviceエラーが発生

Last updated at Posted at 2022-03-11

はじめに

この記事はプログラミング初学者による備忘録用の記事であり、また、少しでも他の初学者のお役に立てればと思い書いています。

今回は、LaravelでS3を扱うためにleague/flysystem-aws-s3-v3パッケージのインストールを実行すると、No space left on deviceエラーが発生し解決に時間がかかったので解決策を備忘録としてまとめておきたいと思います。
ちなみに、LaravelアプリケーションはEC2インスタンス配下でgit cloneした状態です。

間違いなどがございましたら、ご指摘のほどよろしくお願い致します。

エラー内容 : composer requireでパッケージをインストールに失敗

Laravel6.xでAmazon S3を利用するために、$ composer require league/flysystem-aws-s3-v3:^1.0を実行すると下記のようなエラーが発生しました。

$ composer require league/flysystem-aws-s3-v3:^1.0
# 略
Downloading (100%)    Failed to download aws/aws-sdk-php from dist: 
The "https://codeload.github.com/aws/aws-sdk-php/legacy.zip/ed############e7" file could not be written to /home/###/###/laravel/vendor/aws/aws-sdk-php/4#####36:
write of 8192 bytes failed with errno=28 No space left on device
Only 188416 of 3292576 bytes written, possibly out of free disk space
    Now trying to download from source
  - Installing aws/aws-sdk-php (3.212.5): Cloning ed69594b38

エラー文ではNo space left on deviceと表示されており、ホストのディスク容量が不足していると言われています。

※league/flysystem-aws-s3-v3のバージョン指定は、リンク先を参考にしてください。

今回はこのエラーに対する解決策を実行順にまとめていきます。

No space left on deviceの解決策

1.Elastic Block Store(EBS)ボリュームサイズを増やす

1-1.ディスクの容量を確認

まず初めに、エラーの原因であるディスク容量を確認するために$ df -hTコマンドを実行します。

[ec2-user ~]$ df -hT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs       devtmpfs   970M     0  970M    0% /dev
tmpfs          tmpfs      978M     0  978M    0% /dev/shm
tmpfs          tmpfs      978M   25M  953M    3% /run
tmpfs          tmpfs      978M     0  978M    0% /sys/fs/cgroup
/dev/nvme0n1p1 xfs          8G     0    8G  100% /
tmpfs          tmpfs      196M     0  196M    0% /run/user/1000

実行結果を見ると、ファイルシステム/dev/nvme0n1p1の箇所が使用率100%となっており、容量が不足した状態となっています。
従って、この状態のままパッケージをインストールしても容量不足でエラーが発生してしまうのです。

これを解決するために、利用しているAWSインスタンスのElastic Block Store(EBS)ボリュームサイズを増やします

1-2.利用しているAWSインスタンスのEBSボリュームサイズを増やす

下記の画面に移動後、アクションをクリックしてボリュームの変更を選択します。

スクリーンショット 2022-03-11 16.37.55(2).png

ボリュームの変更を選択後、特定のサイズを指定して変更を実行してください。

スクリーンショット 2022-03-11 17.24.25(2).png

2.EBSボリュームサイズを変更後、Linuxファイルシステムの拡張を行う

EBSボリュームのサイズを変更後、ファイルシステム固有のコマンドを使用して、ファイルシステムのサイズを拡張します。(ボリュームの状態が optimizing時のみ)

Linuxでファイルシステムを拡張するプロセスは以下のとおりです。

1.EBS ボリュームには、ファイルシステムとデータを含むパーティションが存在する場合があります。ボリュームのサイズを拡張しても、パーティションのサイズは拡張されません。サイズ変更されたボリュームのファイルシステムを拡張する前に、新しいサイズのボリュームに拡張する必要があるパーティションがそのボリュームにあるかどうかを確認します。
2.ファイルシステム固有のコマンドを使用して、各ファイルシステムのサイズを新しいボリューム容量に変更します。
引用:AWS docs ボリュームサイズ変更後の Linux ファイルシステムの拡張

※ファイルシステムを拡張する際は、NVMe EBS ボリュームEBS ボリュームどちらかのファイルシステムを拡張します。
各自、該当するボリュームのファイルシステムを拡張して下さい。
今回は、NVMe EBS ボリュームのファイルシステムを拡張する手順を下記でまとめておきます。

・Linuxファイルシステムの拡張手順

1.AWSインスタンスにssh接続する

2.拡張前のボリュームのファイルシステムを確認するために、$ df -hTコマンドを実行する

[ec2-user ~]$ df -hT
Filesystem      Type  Size  Used Avail Use% Mounted on
/dev/nvme0n1p1  xfs   8.0G  8.0G    0G 100% /
...

今回は、使用率100%であるFilesystem[/dev/nvme0n1p1]のサイズを拡張します。


3.$ lsblkコマンドでインスタンスにアタッチされているNVMeブロックデバイスに関する情報を表示する
ボリュームに拡張が必要なパーティションがあるかどうかを確認するには、lsblkコマンドを使用して、インスタンスにアタッチされている NVMe ブロックデバイスに関する情報を表示します。

[ec2-user ~]$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0  20G  0 disk
├─nvme0n1p1   259:1    0   8G  0 part /
└─nvme0n1p128 259:2    0   1M  0 part

ルートボリュームである/dev/nvme0n1には、パーティション/dev/nvme0n1p1があります。ルートボリュームのサイズに新しいサイズ(20 GB) が反映されている場合、パーティション(nvme0n1p1)のサイズは元のサイズ (8 GB)のままであるため、ファイルシステムを拡張する前にパーティション(nvme0n1p1)を拡張する必要があります。


4.growpartコマンドを使用してパーティションを拡張する
先ほどlsblkコマンドで確認したパーティション(nvme0n1p1)を、下記コマンドを実行してサイズ変更後のEBSボリュームサイズまで拡張させます。

[ec2-user ~]$ sudo growpart /dev/nvme0n1 1

growpartコマンドを実行後、lsblkコマンドで増加分のボリュームサイズがパーティションに反映されていることを確認します。

[ec2-user ~]$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1       259:0    0  20G  0 disk
├─nvme0n1p1   259:1    0  20G  0 part /
└─nvme0n1p128 259:2    0   1M  0 part

5.パーティションを拡張後、ファイルシステムを拡張する
各ボリュームでファイルシステムを拡張するには、下記のように利用しているのファイルシステムに適したコマンドを使用します。
今回は、XFSファイルシステムの拡張を実行しています。
ファイルシステムの種類を確認する際は、リンク先等をご確認ください。

XFS file system (XFS ファイルシステム)を拡張するには、xfs_growfsコマンドを使用します。
下記コマンドの//dataは、$ df -hTの出力で示されているボリュームのマウント位置です。

[ec2-user ~]$ sudo xfs_growfs -d /
[ec2-user ~]$ sudo xfs_growfs -d /data

このコマンドを実行することで、ファイルシステムを拡張することができます。


6.最後にサイズ変更後のボリュームサイズが各ファイルシステムに反映されていることを確認します

[ec2-user@ip-172-16-10-10 ~]$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         970M     0  970M    0% /dev
tmpfs            978M     0  978M    0% /dev/shm
tmpfs            978M   25M  953M    3% /run
tmpfs            978M     0  978M    0% /sys/fs/cgroup
/dev/nvme0n1p1    20G     0     0    0% /
tmpfs            196M     0  196M    0% /run/user/1000

上記のように、/dev/nvme0n1p1のサイズがAWSインスタンスのEBSボリュームサイズと同じになっていればファイルシステムの拡張は成功です。

まとめ

上記の手順を踏むことで、エラーを解決できると思います。

今回、Linuxのファイルシステム等を拡張する作業は初めて行ったので、もしかしたら間違っている可能性もあるのでご注意下さい。

参考文献

ボリュームサイズ変更後の Linux ファイルシステムの拡張
Amazon EBS ボリュームの種類

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?