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を使ってgdiks で処理すると確実です。
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
MBR の場合
私はOpenWrt のMBRも使っている。なのでLVMやGPT以外にMBRの場合もメモが必要なので残しておく。
ディスクの準備とext4 のクリーンアップ
DISK=/var/lib/libvirt/images/openwrt-23.05-x86-64-combined-ext4.qcow2.back sudo modprobe nbd max_part=8 sudo qemu-nbd --connect=/dev/nbd0 $DISK sudo e2fsck -f /dev/nbd0p2
ディスクのリサイズ
sudo qemu-nbd -d /dev/nbd0 qemu-img resize -f qcow2 $DISK +40M
パーティションのリサイズの準備
sudo qemu-nbd --connect=/dev/nbd0 $DISK sudo e2fsck -f /dev/nbd0p2
sudo fdisk /dev/nbd0
パーティションの変更は、通常通りだけど、OpenWrt の場合、セクタサイズが自動で整わないので注意
また既存のEXT4 フラグを削除しないように配慮
最初に、セクタのSTARTをちゃんと見ておく (33792)
takuya@livaz:~$ sudo fdisk /dev/nbd0 Command (m for help): p Device Boot Start End Sectors Size Id Type /dev/nbd0p1 * 512 33279 32768 16M 83 Linux /dev/nbd0p2 33792 369663 335872 164M 83 Linux
パーティションを作り直して
Command (m for help): d Command (m for help): p Device Boot Start End Sectors Size Id Type /dev/nbd0p1 * 512 33279 32768 16M 83 Linux Command (m for help): n ... First sector (33280-451583, default 34816): 33792 ... Partition #2 contains a ext4 signature. Do you want to remove the signature? [Y]es/[N]o:No ... Command (m for help): p Device Boot Start End Sectors Size Id Type /dev/nbd0p1 * 512 33279 32768 16M 83 Linux /dev/nbd0p2 33792 451583 417792 204M 83 Linux
特に次の場所で、スタート位置が変わらないように注意する(fdisk 暗黙の提案と8セクタのズレがあったので、STARTに留意する。)
First sector (33280-451583, default 34816): 33792
また、既存のext4 フォーマットを削除しないよう十分に注意。
Do you want to remove the signature? [Y]es/[N]o:No
リサイズを実行して
$ sudo e2fsck -f /dev/nbd0p2 e2fsck 1.46.5 (30-Dec-2021) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information rootfs: 6408/13312 files (0.3% non-contiguous), 41144/41984 blocks $ sudo resize2fs /dev/nbd0p2 resize2fs 1.46.5 (30-Dec-2021) Resizing the filesystem on /dev/nbd0p2 to 52224 (4k) blocks. The filesystem on /dev/nbd0p2 is now 52224 (4k) blocks long.
確認する。
$ sudo mount /dev/nbd0p2 /mnt $ df -h /mnt/ Filesystem Size Used Avail Use% Mounted on /dev/nbd0p2 201M 158M 40M 81% /mnt $ sudo umount /mnt
後始末する
$ sudo qemu-nbd -d /dev/nbd0
/dev/nbd0 disconnected
$ sudo rmmod nbd
最後にSparseにしておく(拡張した領域をすぐに使うわけでもないので)
$ sudo virt-sparsify --in-place $DISK 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00 [ 10.4] Trimming /dev/sda1 [ 10.7] Trimming /dev/sda2 [ 11.0] Sparsify in-place operation completed with no errors
拡大は楽だわ。
更新履歴
2025/10/09 MBRとfdisk の場合の例を追加