それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

qcow2 のディスクをリサイズ(拡大)

qcow2 のディスクをリサイズ(拡大)

お急ぎの場合

DISK=/var/lib/libvirt/images/ubuntu-2404.qcow2
qemu-img info $DISK 
qemu-img resize -f qcow2 $DISK +10G
virt-sparsify --in-place $DISK

nbdを使ってgidks で処理すると確実です。

nbdを使う。

はじめに、qcow2 をリサイズ。

DISK=/var/lib/libvirt/images/ubuntu-2404.qcow2
qemu-img info $DISK 
qemu-img resize -f qcow2 $DISK +10G

nbd をロードする。

sudo modprobe nbd max_part=8

nbd 二接続する

sudo qemu-nbd  --connect=/dev/nbd0 $DISK

必要に応じて、GPTを再構成

ディスクのサイズ変更が反映されないときは、gidks を起動して何もせずにWを書く。

または、GPTを再構成する。

sudo gidisk /dev/nbd0

GPTの再構成をしないとqcow2 のサイズ変更が反映されない。(USBメモリでDDしたときと同じ)

nbd を確認する。

takuya@:~$ lsblk /dev/nbd0
NAME                       SIZE FSAVAIL FSUSE% FSTYPE
nbd0                        30G
├─nbd0p1                     1M
├─nbd0p2                   1.8G                ext4
└─nbd0p3                   8.2G                LVM2_member
  └─ubuntu--vg-ubuntu--lv  8.2G                ext4

パーティションを操作する

LVMにはメタデータが含まれる

LVMのパーティションサイズ=実サイズ+LVMメタデータサイズ

メタデータのサイズを確認する

sudo pvck /dev/nbd0p3
  Found label on /dev/nbd0p3, sector 1, type=LVM2 001
  Found text metadata area: offset=4096, size=1044480

メタデータがsize=1044480であるとわかる。

20GB確保するなら次の通り LVMはPEで設定するので、PE(4x10242)になるので、20GBはPE幾つ分かをみておきます ちなみに、1PE=4Mib です。

20*1024**3/(4*1024*1024)=5120PE

PEのサイズが5120である。

現在のPEサイズを確認すると、2111PEだとわかる。

takuya@:~$ sudo pvdisplay /dev/nbd0p3
  --- Physical volume ---
  PV Name               /dev/nbd0p3
  VG Name               ubuntu-vg
  PV Size               <8.25 GiB / not usable 0
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              2111
  Free PE               0
  Allocated PE          2111

反映する。

sudo pvck /dev/nbd0p3

あとは、通常のリサイズと同じ

sudo vgs ubuntu-vg
sudo lvresize ubuntu-vg/ubuntu-lv  --resizefs  -l +100%FREE
sudo lvs 

後片付け

sudo dmsetup ls 
sudo dmsetup remove ubuntu--vg-ubuntu--lv
sudo qemu-nbd  --disconnect /dev/nbd0 
sudo lsblk
sudo modprobe nbd max_part=8

再起動

sudo virtsh start $NAME --console