0
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 5 years have passed since last update.

Vagrant provision でディスク容量を拡張する(CentOS7)

Posted at

Vagrant provision によりゲストOS(CentOS7)のディスク容量を拡張する方法です。

確認環境

Windows10
VirtualBox 5.2
Vagrant 2.2.0
ゲストOS CentOS 7.2

経緯

Vagrant でディスク容量を拡張する方法を調べていて以下の記事を見つけました。
Vagrantで初期にディスク拡張を自動化するプロビジョニングコードを作ってみた(制約あり)

この記事では作業途中にOS再起動を挟むため改善点として、OS再起動後に残りの処理を1回だけ自動実行する案が示されています。
さらに調べたところ以下の記事でOS起動時に1回だけ自動実行する方法がありました。

CentOS 7起動時にプログラムを1回だけ自動実行する(RunOnceのように)

この2つの記事の方法を組み合わせて1回のprovisionでディスク容量を拡張できるようにしてみました。

方法

準備

Vagrantを実行できる環境があること。
vagrant-disksize プラグインがインストール済みであること。
Vagrantfileと同じフォルダに以下のファイルを用意する。(内容は後述)

  • resize.sh OS再起動後に行う処理スクリプト
  • resize.service OS起動時にresize.shを実行するためのservice

スクリプトの内容

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "centos7"
  config.vm.network "private_network", ip: "192.168.33.16" 
  config.vm.hostname = "green"
  config.disksize.size = '100GB'
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "1024"
    vb.cpus = 2
  end
  config.vm.provision "file", source: "resize.sh", destination: "/tmp/resize.sh"
  config.vm.provision "file", source: "resize.service", destination: "/tmp/resize.service"
  config.vm.provision "shell", inline: <<-SHELL

  START=$(parted -l /dev/sda | grep lvm | head -1 | awk '{ print $3 }' || exit 1)
  parted -s -a optimal /dev/sda -- mkpart primary ext4 $START 100G

  chmod +x /tmp/resize.sh
  cp /tmp/resize.service /etc/systemd/system/
  systemctl enable resize.service

  reboot
  exit 0

SHELL
end

config.disksize.size = '100GB' でディスクサイズを指定する。今回の例では100GB。
config.vm.provision "file" でプロビジョン時にゲストOSに resize.sh resize.service を送り込む。
parted でパーティションの処理。
次回、OS起動時にresize.sh が実行されるように resize.service を設定する。
OS再起動。

resize.sh
# !/bin/bash

pvcreate /dev/sda3
vgextend centos /dev/sda3
lvextend -l +100%FREE /dev/mapper/centos-root
xfs_growfs /dev/mapper/centos-root

OS再起動後にファイルシステムの拡張などを行う。

resize.service
[Unit]
After=network-online.target

[Service]
User=root
ExecStart=/bin/bash -c "/tmp/resize.sh \
        && /usr/bin/systemctl disable resize.service \
        && rm -f /etc/systemd/system/resize.service"

[Install]
WantedBy=multi-user.target

OS起動時にresize.shを起動する。その後、再度実行されないようにdisableにし、ファイルも削除する。(/tmp 配下の resize.sh などは削除していない)

実行

vagrant up
するだけ。一度、OS再起動が入るので少し待つ。

ゲストOSにログインして確認してみる。

[root@green ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   92G  1.5G   91G   2% /
devtmpfs                 488M     0  488M   0% /dev
.....

参考

本文中にも書きましたが以下の記事を参考というかベースにさせていただきました。
Vagrantで初期にディスク拡張を自動化するプロビジョニングコードを作ってみた(制約あり)
CentOS 7起動時にプログラムを1回だけ自動実行する(RunOnceのように)

0
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
0
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?