それマグで!

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

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

qemu の仮想マシンのイメージのディスクサイズを変更する。

libvirtkvmでつかうqemu 用マシンのサイズを変更したい

通常のディスクであれば、ddしたイメージファイルのサイズを変えてあげれば済むのだけれど、qcow2 のイメージファイルはsparse ファイルになっています。

なので、仮想マシンから見えるディスクサイズと、実際のディスクサイズが異なります。

qcowのファイルの現在の情報をみる

qcow のファイルが実ファイルサイズと、仮想マシンからみたファイルサイズが異なるSPARSEファイルかどうか、それを確認するには次のようにします。

sudo qemu-img info  test.qcow

qcow のファイルのサイズを拡張する。

可変サイズのファイルを増やしていく時は、次のように、resize と増分を指定します。

qemu-img resize -f qcow2 test.qcow +10G

コマンドは次の通り

qemu-img resize -f タイプ  ファイル名  +増分サイズ

タイプは殆どの場合 qocw2 ですね。

ファイルサイズを縮小する。

逆に縮小するときは、--shrink オプションを付与します。

qemu-img resize --shrink  -f qcow2 test.qcow -1G

ただし、--shrink は削除していくので、データが有るとロストします。ディスクパーティションの後方から削除していくので、後方が空き領域になっている必要があります。gdisk / resize2fs や gpt GPated などで後方を開けてとかないと怖いですね。

実際にやってみる。

試しに、QCOW2 のファイルを作成してみます。

$ qemu-img create -f qcow2 test.qcow 1G
Formatting 'test.qcow', fmt=qcow2 size=1073741824 cluster_size=65536 lazy_refcounts=off refcount_bits=16

作成された仮想マシン用イメージのファイルの情報を確認します。

ホスト上の実ファイルのサイズは196Kで、仮想マシンのディスクとしてのサイズは1.0Gです。スパースファイルです。

$ sudo qemu-img info  test.qcow
image: test.qcow
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

リサイズしてみます。+1Gしてサイズを増大させます。

$ qemu-img resize -f qcow2 test.qcow +1G
Image resized.

確認します。 ちゃんと、2GBになっていて、ホストから見たサイズは200Kになっていることがわかります。

$ qemu-img info  test.qcow
image: test.qcow
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 200K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

libguestfs-tools を使う場合 / virt-resize

最近は、仮想マシンのサイズ変更については、いちいち仮想マシン内部で resize2fs や gdisk をしなくてもいいように virt-resize というツールが用意されていて、容易に仮想マシンのディスクイメージを操作できるようになっています。仮想マシン内部でパーティションがどう使われていようとも、ホスト側から操作することができます。LVM化されてても。

この後の作業

リサイズをしたあとに、resize2fs を掛けると思う。resize2fs を掛けるために仮想マシンを起動するのはナンセンスなので、nbd 経由でQcowを直接マウントしてresize2fsすると楽

qcow2をnbd経由で接続する

リサイズは容量不足で起きる→Sparseする

リサイズをするときは、殆どの場合で容量不足や無駄容量の節約である。

スパース(sprase file ) に変換して無駄容量を削減するのも一つの選択肢である

sparseにして容量削減・節約

参考資料

man qemu-img

関連資料

2022-09-04 追記

sparse / resize /nbd はペアになってないと意味がないので記述とリンクを追加