2017/10/09

virsh vol-create-from を使って異なる storage pool 間でイメージをコピーする

libvirt はVMイメージの置き場として Storage Pool というものを提供しています。
Storage Pool は libvirt が操作可能な記憶領域です。
例えば、 Akatsuki による VM 貸し出しのフローは

  • テンプレート用のVMイメージをテンプレートのストレージプールから読み取る
  • 貸し出し用ストレージプールにテンプレートのVMイメージをコピー
  • 貸し出しインスタンスとしてコピーされたものを起動する
といった形式になっています。



状況

  • ストレージプール a と b がある
  • ストレージプール a に hoge.img がある
  • hoge.img をストレージプール b に fuga.img として複製したい


状況を再現するコマンド

とりあえず前提条件のストレージプール a と b を作ります。
今回のストレージプールはディレクトリタイプ。
他にも特定のデバイスをプールにするタイプなどいろいろあります。
  • # virsh pool-define-as a dir - - - - /path/to/a
  • # virsh pool-build a
  • # virsh pool-start a
  • # virsh pool-autostart a
  • # virsh pool-define-as b dir - - - - /path/to/b
  • # virsh pool-build b
  • # virsh pool-start b
  • # virsh pool-autostart b
これで2つのストレージプールができました。

そして a に hoge.img を作ります。
  • # virsh vol-create-as  --pool a hoge.img 10G
イメージができました。vol-list で確認します。

この hoge.img を b にコピーしたい。

やり方はいくつかありますが、今回は vol-create-from を使う方針でいきます。
その場合は xml が必要なので dumpxml で作っておきます。
  • # virsh vol-dumpxml  --pool a hoge.img > fuga.xml
fuga.xml  の key や path を hoge の情報から、所望の情報に変更しましょう。
今回は /path/to/b/fuga.img になるように書き換えます。

そして vol-create-from でコピー。
  • # virsh vol-create-from --inputpool a --vol hoge.img --pool b  --file fuga.xml 
再度 vol-list で確認します。

fuga.img が作成できていることが分かります。やったね。


環境

  • OS: CentOS Linux release 7.4.1708 (Core)
  • Kernel: 3.10.0-693.2.2.el7.x86_64
  • virsh: 3.2.0


参考

0 件のコメント:

コメントを投稿