libvirtのkvmでつかう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すると楽
リサイズは容量不足で起きる→Sparseする
リサイズをするときは、殆どの場合で容量不足や無駄容量の節約である。
スパース(sprase file ) に変換して無駄容量を削減するのも一つの選択肢である
参考資料
man qemu-img
関連資料
2022-09-04 追記
sparse / resize /nbd はペアになってないと意味がないので記述とリンクを追加