やりたいこと
以下の組み合わせで、ディスクおよびパーティションのリサイズをする方法です。
- Vagrant
- VirtualBox or libvirt
- CentOS 7(XFS)
前提条件
以下のバージョンで確認しています。
- Vagrant 2.0.2
- VirtualBox 5.2.8(macOS)
- Vagrant Box: centos/7 (virtualbox, 1802.01)
概要
- 仮想ディスクのサイズを増加
- VirtualBox: vagrant-disksizeを使用
- libvirt: Domain Specific Optionsの
machine_virtual_size
で対応可能
- 非インタラクティブにfdiskを使って、パーティションの作成
- 既存のパーティションの拡張ではなく、新規パーティション作成なのは、partprobeでエラーが出るため(後述)
- Red Hatがfdiskを使う手順を案内している。partedではできない模様。
- 通常はインタラクティブに使うfdiskだが、標準入力に渡すことで、非インタラクティブに使用する。
- 参考: partitioning - How to create and format a partition using a bash script? - Super User
- ただし、fdiskが終了コード1を返すため、
|| true
で強制的に0にしている。
- partprobeコマンドを使って、パーティションの変更を認識
- rebootする手順が多いが、partprobeで問題なく反映できた。
- PVを作成する。
- 作成したPVをVGに追加する。
- LVを拡張する。
- ファイルシステムを拡張する。
fdiskで既存のパーティションを変更すると、partprobeが使えない
以下のようなエラーが出る。リブートすれば可能だが、なるだけrebootしたくないため却下した。
Error: Partition(s) 3 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes.
手順(1809.01以前)
起動時に以下のスクリプトを流してください。 デバイス名は環境によって異なる可能性があります。KVM(libivrt)では/dev/vdaでした。
## resize disk
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk /dev/sda || true
n # add a new partition
p # primary
# default
# default
t # change a partition's system id
4 # new partition
8e # Linux LVM
w # write table to disk and exit
EOF
partprobe
## resize partition(CentOS 7, XFS)
pvcreate /dev/sda4
vgextend VolGroup00 /dev/sda4
lvextend -l +100%FREE /dev/VolGroup00/LogVol00
xfs_growfs /
手順(1809.01以降)
1809.01から、パーティション構成が変わっています。
具体的に変わったのは以下の点です。
- パーティションが1つになった
- ファイルシステムがext4になった
- スワップファイルが2GB作成された
よって、以下のようにする必要があります。
yum install -y e2fsprogs
## resize disk
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk /dev/vda || true
d # delete partition
n # add a new partition
p # primary
1 # Partition number: 1
# First sector(default)
# Last sector(default)
w # write table to disk and exit
EOF
partprobe
## resize partition(CentOS 7, ext4)
resize2fs /dev/vda1
制限事項
- vagrant-disksizeはVirtualBoxのみサポートされています。
- プライマリパーティションを使用しているため、これ以上拡張できません。
- 既存のパーティションの拡張は可能ですが、再起動が必要です。
マニュアル
- Vagrant
- CentOS
- VirtualBox
- libvirt: まだありません。