Vagrantで「空き領域がありません」のエラーが発生!ディスク容量の増やし方

MacのPC上に、Vagrant + VirtualBoxの仮想環境を構築して開発をしています。

Vagrantはboxと呼ばれるイメージから手軽に開発環境を構築できてとても便利なのですが、私が利用しているイメージはディスク容量が小さく、すぐに容量不足になってしまいます。

空き領域がありません」のエラーが発生しても、ちまちまファイルを消して対応を先延ばしにしてきましたが、重い処理の実行でエラーが頻発。根本的に対応することにしました。

とはいっても、面倒なことはしたくない。
vagrant-disksizeというプラグインを利用すると、簡単に容量を増やすことができたので、これは、その時の作業メモです。

開発環境

Vagrant: 2.0.4
プロバイダ: VirtualBox (5.2.10)
ホストOS:MacOS High Sierra (10.13.6)
ゲストOS:CentOS(7.5.1804)

対処前の状況

rootで作業しているため、/dev/mapper/centos-root が直ぐに100%になってしまい、エラーが発生します。

#df -h

ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root   8.3G  5.7G  2.7G   69% /
devtmpfs                  1.9G     0  1.9G    0% /dev
tmpfs                     1.9G     0  1.9G    0% /dev/shm
tmpfs                     1.9G  8.4M  1.9G    1% /run
tmpfs                     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1                 497M  198M  300M   40% /boot
vagrant                   466G  187G  279G   41% /vagrant
tmpfs                     380M     0  380M    0% /run/user/1000

ディスクの拡張手順

プラグインのインストール

まずは、ホストOSのMacでプラグインをインストール。

> vagrant plugin install vagrant-disksize

Vagrantfileの編集

Vagrantfileにディスクサイズの指定を追加します。

config.vm.box = “centos71”
config.disksize.size = ’30GB’ <-この行を追加

sshでディスクを確認

vagrantを起動し、sshでログイン。

> vagrant up
> vagrant ssh

fdiskの-lオプションで、マウントされているデバイスのディスクサイズとパーティション情報を確認します。

#fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000927b6

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    20479999     9726976   8e  Linux LVM
...

物理パーティションを作成

fdiskを対話モードで起動し、物理パーティションを作成します。

# fdisk /dev/sda
n ← パーティション作成
p ← primaryを選択
3 ← パティーション番号(デフォでいいならEnter)
Enter ← パーティション開始位置(デフォでいいならEnter)
Enter ← パーティション終了位置(デフォでいいならEnter)
t ← タイプ変更
3 ← パティーション番号
8e ← 拡張したいパーティションと同じになるようにfdiskで確認した文字列
w ← 保存して終了
対話モードの主なコマンド

m 対話モード用コマンドを一覧表示する
p パーティションテーブルを表示する
v パーティションテーブルを検査する
n 新しいパーティションを作成する
a ブート可能フラグを切り替える
d パーティションを削除する
w パーティションテーブルの変更を保存して終了する
q パーティションテーブルの変更を「保存せずに」終了する

disk -lでパーテーション情報を表示し、作成したパーティション「/dev/sda3」が追加されていることを確認します。

# fdisk -l
...

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    20479999     9726976   8e  Linux LVM
/dev/sda3        20480000    62914559    21217280   8e  Linux LVM
...

pvcreateコマンドで、パーティションを物理ボリュームとして登録しておきます。

# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created

※2019/12/17追記:コマンド実行で「Device /dev/sda3 not found.」のエラーとなりました。VM再起動後同じコマンド実行で成功!

ボリュームグループに新しいパーティションを追加

“centos” に /dev/sda3 を追加します。

# vgextend centos /dev/sda3
  Volume group "centos" successfully extended

ディスクの拡張

root に centos の空き領域をすべて追加します。

# lvextend -l +100%FREE /dev/mapper/centos/root
  Size of logical volume centos/root changed from 8.26 GiB (2114 extents) to 28.53 GiB (7303 extents).
  Logical volume root successfully resized

ファイルシステムの領域拡張

LV を拡張するだけでは使用できないので、ファイルシステムサイズを拡張します。

# xfs_growfs /dev/mapper/centos-root

対処後の容量確認

dfコマンドでディスクの容量を再度確認します。「/dev/mapper/centos-root」が8.3Gから29Gに増えています!
やったーーー!!

# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/mapper/centos-root    29G  3.0G   26G   11% /
devtmpfs                  1.9G     0  1.9G    0% /dev
tmpfs                     1.9G     0  1.9G    0% /dev/shm
tmpfs                     1.9G  8.4M  1.9G    1% /run
tmpfs                     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1                 497M  160M  338M   33% /boot
vagrant                   466G  181G  286G   39% /vagrant
tmpfs                     380M     0  380M    0% /run/user/1000

最後に

こちらのサイトを参考にさせていただきました。
Vagrantのディスク容量の増やし方
ホストOSがWindowsでの記事でしたが、Macでも同様の手順で無事にディスクを拡張することができました。

最初は100Gに増やしたのですが、大きすぎたと思い30Gに縮小したところ、vagrantが起動しなくなりました。
ディスク容量は増やす方向にしか変更できないようです。