KVMゲストOSを止めずに、KVMゲストの稼働領域を動的サイズ拡張してみた

# 概要
KVMゲストOSの稼働領域(システム領域、物理領域)の使用率が大きくなり、仮想ディスクの拡張だけでは対応できない場合には、物理ディスクの追加が必要になるかと思います。その際、KVMゲストOSを停止することなくディスクの追加ができるか否かを検証してみました。なお、ここでの稼働領域は全体で1つのLVMで管理しているものとします。

# 検証環境
<d1>
  <dt>KVMホストOS</dt>
  <dd>稼働OS：Redhat Enterprise Linux 8.5</dd>
  <dd>ホスト名 ： localhost</dd>
  <dt>KVMゲストOS</dt>
  <dd>稼働OS：CentOS 7.0
  <dd>ホスト名：test-vm1</dd>
</d1>

# KVMゲストOSのLVM構成
* ボリューム・グループ名 = rhel-guest
```
  --- Volume group ---
  VG Name               rhel-guest
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <7.00 GiB
  PE Size               4.00 MiB
  Total PE              1791
  Alloc PE / Size       1791 / <7.00 GiB
  Free  PE / Size       0 / 0   
  VG UUID               P55ADp-oozF-zJZf-IrE0-s3C2-vPrS-aKx8D4  
```

* 論理ボリューム名 = guest
```
  --- Logical volume ---
  LV Path                /dev/rhel-guest/guest
  LV Name                guest
  VG Name                rhel-guest
  LV UUID                c4cdBv-JUul-UuwI-kk1p-i4mD-QMnm-1mhLsN
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2022-04-23 12:30:04 +0900
  LV Status              available
  # open                 0
  LV Size                <7.00 GiB
  Current LE             1791
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2
```
# 検証準備
今回、追加するディスクのパーティションは、下記の/dev/nvme0n3p1とします。
```
[root@localhost ~]# ll /dev/nvme0n3*
brw-rw----. 1 root disk 259, 5  4月 24 09:48 /dev/nvme0n3
brw-rw----. 1 root disk 259, 7  4月 24 09:48 /dev/nvme0n3p1
```
物理ボリュームの作成、及び、論理ボリュームのマウントまでは、KVMゲストOSを起動するまでに実施しておきます。現在の論理ボリュームのサイズは6.9G、使用率は36%となっています。
```
[root@localhost ~]# pvcreate /dev/nvme0n3p1
  Physical volume "/dev/nvme0n3p1" successfully created.
[root@localhost ~]# mount /dev/rhel-guest/guest /var/lib/libvirt/images/
[root@localhost ~]# df -hT
ファイルシス                  タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs                      devtmpfs   1.8G     0  1.8G    0% /dev
tmpfs                         tmpfs      1.9G     0  1.9G    0% /dev/shm
tmpfs                         tmpfs      1.9G   18M  1.8G    1% /run
tmpfs                         tmpfs      1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/rhel-root         xfs         17G   11G  6.1G   65% /
/dev/nvme0n1p1                xfs       1014M  436M  579M   43% /boot
tmpfs                         tmpfs      371M   12K  371M    1% /run/user/42
tmpfs                         tmpfs      371M  4.0K  371M    1% /run/user/1000
/dev/mapper/rhel--guest-guest ext4       6.9G  2.3G  4.2G   36% /var/lib/libvirt/images

```
# 検証実施
* KVMゲストOSの起動
```
[root@localhost ~]# virsh start test-vm1 --console
ドメイン test-vm1 が起動されました
ドメイン test-vm1 に接続しました
エスケープ文字は ^] です
：
：
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.62.1.el7.x86_64 on an x86_64

test-vm1 login:
```
* 物理ボリュームをボリューム・グループ(rhel-guest)に追加
```
[root@localhost ~]# vgextend rhel-guest /dev/nvme0n3p1
  Volume group "rhel-guest" successfully extended
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               rhel-guest
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               12.99 GiB
  PE Size               4.00 MiB
  Total PE              3326
  Alloc PE / Size       1791 / <7.00 GiB
  Free  PE / Size       1535 / <6.00 GiB
  VG UUID               P55ADp-oozF-zJZf-IrE0-s3C2-vPrS-aKx8D4
```
物理ディスク(/dev/nvme0n3p1)を追加したことで、新たにFree PE /Sizeが増えました。これを使用して論理ボリュームのサイズを拡張します。
```
[root@localhost ~]# lvresize -l +1535 /dev/rhel-guest/guest 
  Size of logical volume rhel-guest/guest changed from <7.00 GiB (1791 extents) to 12.99 GiB (3326 extents).
  Logical volume rhel-guest/guest successfully resized.
```
続けて、ファイルシステムのサイズを拡張します。
```
[root@localhost ~]# resize2fs /dev/rhel-guest/guest
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/rhel-guest/guest is mounted on /var/lib/libvirt/images; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/rhel-guest/guest is now 3405824 (4k) blocks long.
```
途中でエラーを出力することもなく、動的にサイズ拡張が実施できました。拡張されたファイルシステムのサイズを確認します。
→拡張後のファイルシステムのサイズは13G、使用率は19%と変化しています。
```
[root@localhost ~]# df -hT
ファイルシス                  タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs                      devtmpfs   1.8G     0  1.8G    0% /dev
tmpfs                         tmpfs      1.9G     0  1.9G    0% /dev/shm
tmpfs                         tmpfs      1.9G   18M  1.8G    1% /run
tmpfs                         tmpfs      1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/rhel-root         xfs         17G   11G  6.1G   65% /
/dev/nvme0n1p1                xfs       1014M  436M  579M   43% /boot
tmpfs                         tmpfs      371M   12K  371M    1% /run/user/42
tmpfs                         tmpfs      371M  4.0K  371M    1% /run/user/1000
/dev/mapper/rhel--guest-guest ext4        13G  2.3G  9.9G   19% /var/lib/libvirt/images
```
KVMゲストOSの状態も見ておきます。
```
[root@localhost ~]# virsh list --all
 Id   名前       状態
-------------------------
 1    test-vm1   実行中

[root@localhost ~]# virsh console test-vm1
ドメイン test-vm1 に接続しました
エスケープ文字は ^] です

CentOS Linux 7 (Core)
Kernel 3.10.0-1160.62.1.el7.x86_64 on an x86_64

test-vm1 login: root
パスワード:
最終ログイン: Sun Apr 24 09:55:49  ttyS0 上
[root@test-vm1 ~]# 
```
KVMゲストOSにも問題なくログオンできました。結果として、KVMゲストOSを停止することなく、KVMゲストOSの稼働領域の動的サイズ拡張ができることがわかりました。