エンジニアを目指す日常ブログ

日々勉強したことのメモ。独学ですので間違っていたらコメント等で教えてください。

Ubuntu + Vagrant + VirtualBox環境でディスク容量を拡張した

はじめに

VirtualBoxで突然以下のようなエラーが発生。

npm ERR! code ENOSPC
npm ERR! syscall write
npm ERR! errno -28
npm ERR! nospc ENOSPC: no space left on device, write
npm ERR! nospc There appears to be insufficient space on your system to finish.
npm ERR! nospc Clear up some disk space and try again.

不要ファイルを削除してお茶を濁してみたが、いよいよ壊れ始めたので、仮想環境のディスク容量拡張に挑戦した。

Qiitaを探すとCentOSのやり方がヒットするのだが、Ubuntuの場合やり方が若干違うようだ。

最後は自己流になってしまうなど、かなり苦労した。

前提

  • Windows環境の上に、VirtualBox + Vagrant で構築したLinux環境を利用。
  • React.jsのGatsbyモジュールを使ったアプリを開発していた時に起こった。
  • OSはubuntuを利用。
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.4 LTS
Release:        18.04
Codename:       bionic

エラー原因の確認:ディスク容量不足

このエラー発生時は、ディスク容量が足りない可能性が高い。 参考にした記事では、innodeが足りなかったとのこと。

参考: No space left on device とエラーが出るときの対処法 - Qiita 自分の環境でたたいてみると、ディスク容量が足りないことが分かった。

$ df -hP
Filesystem              Size  Used Avail Use% Mounted on
udev                    1.5G     0  1.5G   0% /dev
tmpfs                   299M  640K  299M   1% /run
/dev/sda1               9.7G  9.7G     0 100% /
tmpfs                   1.5G     0  1.5G   0% /dev/shm
tmpfs                   5.0M     0  5.0M   0% /run/lock
tmpfs                   1.5G     0  1.5G   0% /sys/fs/cgroup
vagrant                 238G  199G   39G  84% /vagrant
home_vagrant_workspace  238G  199G   39G  84% /home/vagrant/workspace
tmpfs                   299M     0  299M   0% /run/user/1000

/dev/sda1というのは、10GBであることからおそらくVirtualBoxのメインストレージ。

VirtualBoxマネージャー画面
VirtualBoxマネージャー画面

ディスク拡張のやりかた

ディスク拡張プラグインのインストール

ホストOS(Windows)上で、vagrant-disksizeプラグインをインストールする。

> vagrant plugin install vagrant-disksize

Vagrantfile追記

Vagrantfileに以下を追記する。

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"0
  config.disksize.size = "20GB"   # この行を追記
end

VagrantFile全体は以下のようになる。

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.disksize.size = "20GB"
  config.vm.network "forwarded_port", guest: 8000, host: 8000
  config.vm.network "forwarded_port", guest: 3000, host: 3000
  config.vm.synced_folder "./workspace", "/home/vagrant/workspace"
  config.vm.provider :virtualbox do |vb|
    vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/home/vagrant/workspace","1"]
  end

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
  end

end

Vagrantを再起動する

Vagrantを再起動する。

> vagrant halt
> vagrant up

再起動時、以下のようなログが出ていれば成功。

==> default: Resized disk: old 10240 MB, req 20480 MB, new 20480 MB

ディスク容量の確認

VirtualBoxマネージャーの表示は変わっている。

VirtualBoxマネージャー
VirtualBoxマネージャー

パーティションを管理するfdiskというコマンドを使うと、

$ sudo fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x20027de7

Device     Boot Start      End  Sectors Size Id Type
/dev/sda1  *     2048 20971486 20969439  10G 83 Linux

ディスク容量はDisk /dev/sda: 20 GiBと増えているが、パーティションの領域は

Device     Boot Start      End  Sectors Size Id Type
/dev/sda1  *     2048 20971486 20969439  10G 83 Linux

であり、増えていないことがわかる。

dfコマンドで確認しても増えていなかった。

$ df -hP
Filesystem              Size  Used Avail Use% Mounted on
udev                    984M     0  984M   0% /dev
tmpfs                   200M  5.6M  194M   3% /run
/dev/sda1               9.7G  9.7G     0 100% /   ★まだ変わっていない
tmpfs                   997M     0  997M   0% /dev/shm
tmpfs                   5.0M     0  5.0M   0% /run/lock
tmpfs                   997M     0  997M   0% /sys/fs/cgroup
vagrant                 238G  200G   38G  85% /vagrant
home_vagrant_workspace  238G  200G   38G  85% /home/vagrant/workspace
tmpfs                   200M     0  200M   0% /run/user/1000

パーティションの領域拡張

partedというコマンドを使う。fdiskと同じくパーティションを追加したり削除したりするコマンド。

$ sudo parted

と入力し、

print free

と入力すると現在の状況を確認できる。

(parted) print free
Model: VBOX HARDDISK (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
        32.3kB  1049kB  1016kB           Free Space
 1      1049kB  10.7GB  10.7GB  primary  ext4         boot
        10.7GB  21.5GB  10.7GB           Free Space

Number1のパーテーション(おそらく、/dev/sda1に対応する)の後ろがFree Spaceとなっているため、1番を後ろに拡張できそう。

パーティションを拡張するイメージ
パーティションを拡張するイメージ

そこで、

resizepart 1

と入力し、

Warning: Partition /dev/sda1 is being used. Are you sure you want to continue?
Yes/No? y

「使っているけど続行する?」の問いにはyを回答する。

次に容量を聞かれるので、21.5GBと入力する。

End?  [10.7GB]? 21.5GB

ここまで行ったらpartedを抜けてよい。

(parted) ^C

Vagrant再起動、容量の確認

Vagrantを再起動して、容量を確認すると

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            984M     0  984M   0% /dev
tmpfs           200M  620K  199M   1% /run
/dev/sda1        20G  9.7G  9.7G  50% /   ★できた!!
tmpfs           997M     0  997M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           997M     0  997M   0% /sys/fs/cgroup
tmpfs           200M     0  200M   0% /run/user/1000

容量が20GBになっていることが確認できた。

ファイルシステムの拡張が必要な場合がある?

参考文献では、resize2fsコマンドを利用してファイルシステムを拡張していた。

sudo resize2fs /dev/sda1

今回は不要だったが、念のためメモしておく。

参考資料

www.xenos.jp

参考:試してみてダメだった方法

最初は、以下ページを参考に、

  • パーティション新規作成
  • 物理ボリューム作成
  • 物理ボリュームを既存のボリュームグループに割り当てる
  • ボリュームグループに対応する論理ボリュームを拡張
  • ファイルシステムの拡張

という手順を実行しようと試みた。

VagrantのCentOSのディスク容量を増やす手順 - Qiita

物理ボリューム、ボリュームグループ、論理ボリュームの概念は以下を参照。

suzuki-kengo.net

ただ、そもそも私の環境にはボリュームグループというものが存在せず、新規作成した物理ボリュームをマウントする方法がわからなかった。

以下ページによると、UbuntuではCentOSと違い、LVMが利用されていないらしい。

技術メモメモ: Ubuntu 20.04でシステム領域のディスク容量の拡張を行う

おわりに

UbuntuVagrantVirtualBoxの環境で、ディスク容量を拡張することができた。 Linuxの勉強をまったくできておらず、パーティションの概念も初めて知った。勉強不足がつらい。