KVM上の仮想マシンのディスクサイズの増やし方(LVM)

最近はコンテナ主流ですが、まだまだホスト型の仮想マシンも利用します。(主に検証用)
適当に作った仮想マシンを再利用とかしていると、ディスク容量が足りなくなることがよくあるので、増やし方をメモしておきます。

まずは仮想マシンの作り方

virt-install --connect=qemu:///system -n Fedora30 -r 4096 --disk path=/var/lib/libvirt/qemu/fedora30.img,size=32,format=qcow2 --vcpus=4 --os-type linux --network network=default --nographics --extra-args=--extra-args='ks=file:/fedora-ks.cfg console=tty0 console=ttyS0,115200n8' --location /data/Resource/Fedora-Server-dvd-x86_64-30-1.2.iso

こんな感じでテキストインストールです。 普通にやると、 /dev/mapper/fedora-rootが/にマウントされており、この/を拡張可能となります。

ディスク/パーティションサイズの増やし方

  1. 仮想マシンのシャットダウン(省略)
  2. QEMUイメージの拡張
  3. 仮想マシン起動(省略)
  4. パーティションサイズ拡張
  5. LVM物理ボリューム拡張
  6. LVM論理ボリューム拡張

の流れです

QEMUイメージの拡張
# qemu-img info /var/lib/libvirt/qemu/fedora30.img
image: /var/lib/libvirt/qemu/fedora30.img
file format: qcow2
virtual size: 64G (68719476736 bytes)
disk size: 29G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
# file /var/lib/libvirt/qemu/fedora30.img
/var/lib/libvirt/qemu/fedora30.img: QEMU QCOW Image (v3), 68719476736 bytes

拡張

# qemu-img resize /var/lib/libvirt/qemu/fedora30.img +5G
Image resized.
# qemu-img info /var/lib/libvirt/qemu/fedora30.img
image: /var/lib/libvirt/qemu/fedora30.img
file format: qcow2
virtual size: 69G (74088185856 bytes)
disk size: 29G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true

これで、ディスクの拡張ができました。この増やした分のサイズを仮想マシンに適用していきます。

パーティションサイズ拡張

まずはディスクのパーティションの拡張です。

# parted /dev/sda
(parted) p
モデル: ATA QEMU HARDDISK (scsi)
ディスク /dev/sda: 74.1GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  1075MB  1074MB  primary  ext4              boot
 2    1075MB  68.0GB  66.9GB  primary                    lvm
(parted) resizepart 2 100%
(parted) p
番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  1075MB  1074MB  primary  ext4              boot
 2    1075MB  74.1GB  73.0GB  primary                    lvm
LVM物理ボリューム拡張

パーティションが拡張されたので、その上のLVM物理ボリュームの拡張です

# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               fedora
  PV Size               <62.33 GiB / not usable 3.85 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              15955
  Free PE               0
  Allocated PE          15955
  PV UUID               Yq9YcH-V4rM-QHFf-5gyR-tUh8-0PmE-y4Vwt3

# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda2  fedora lvm2 a--  62.32g    0
# pvresize /dev/sda2
  Physical volume "/dev/sda2" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  fedora lvm2 a--  <68.00g 5.67g
# pvsisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               fedora
  PV Size               <68.00 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              17407
  Free PE               1452
  Allocated PE          15955
  PV UUID               Yq9YcH-V4rM-QHFf-5gyR-tUh8-0PmE-y4Vwt3

Freeのところを増やすことができました。

LVM論理ボリューム拡張

拡張した物理ボリューム上の論理ボリュームの拡張です。今回はrootしか切ってないので全部利用します

# lvdisplay
  --- Logical volume ---
  LV Path                /dev/fedora/swap
  LV Name                swap
  VG Name                fedora
  LV UUID                CrBKUg-42Pr-l3PM-g0w8-atOG-CgvK-WPI7r6
  LV Write Access        read/write
  LV Creation host, time localhost, 2019-06-03 15:55:13 +0900
  LV Status              available
  # open                 2
  LV Size                3.20 GiB
  Current LE             820
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/fedora/root
  LV Name                root
  VG Name                fedora
  LV UUID                QBQwNS-q36Z-Rg2Y-9kTh-uwRA-2Nfn-llxArG
  LV Write Access        read/write
  LV Creation host, time localhost, 2019-06-03 15:55:13 +0900
  LV Status              available
  # open                 1
  LV Size                59.12 GiB
  Current LE             15135
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
# lvextend -l +100%FREE /dev/sda2fedrora/root
 Size of logical volume fedora/root changed from 59.12 GiB (15135 extents) to 64.79 GiB (16587extents).
 Logical volume fedora/root successfully resized.
# lvdisplay
  --- Logical volume ---
  LV Path                /dev/fedora/swap
  LV Name                swap
  VG Name                fedora
  LV UUID                CrBKUg-42Pr-l3PM-g0w8-atOG-CgvK-WPI7r6
  LV Write Access        read/write
  LV Creation host, time localhost, 2019-06-03 15:55:13 +0900
  LV Status              available
  # open                 2
  LV Size                3.20 GiB
  Current LE             820
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/fedora/root
  LV Name                root
  VG Name                fedora
  LV UUID                QBQwNS-q36Z-Rg2Y-9kTh-uwRA-2Nfn-llxArG
  LV Write Access        read/write
  LV Creation host, time localhost, 2019-06-03 15:55:13 +0900
  LV Status              available
  # open                 1
  LV Size                64.79 GiB
  Current LE             16587
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

論理ボリュームも拡張できました。ただこの状態でdfでチェックしても増えていません。 ファイルシステムも拡張してあげる必要があります。 今回はxfsのため、以下のコマンドです

# xfs_growfs /
meta-data=/dev/mapper/fedora-root isize=512    agcount=16, agsize=983040 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=15498240, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 15498240 to 16985088
# df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/fedora-root    65G   28G   38G   42% /

これで無事に拡張できたのではないかと思います。正直結構面倒ではありますが、kernelとか大きいビルドをするときは、割とディスク容量が足りなくなることがあるので、メモっておくと使う機会は割りとあります。