{{tag>virsh libvirt linux}} # kvm ゲストを安全に削除する 単純に削除するのではなく、ボリューム等も含めてきれいに、且つ誤削除なんかの危険を極力減らした手順を考えてみる。 ## 割り当てボリュームの確認 まず削除対象の仮想ゲストにくっついているボリュームを確認します。 ``` virsh # domblklist dom1 Target Source ------------------------------------------------ vda /dev/vg001/dom1_lv001 vdb /dev/vg001/dom1_lv002 ``` で、うちの環境はディスクは仮想ホストの lvm ボリュームをそのまま block デバイスとして仮想ゲストに割り当てているので、virsh ではなく bash からこれらのボリュームが現在オンラインでないことを確認します。 ``` # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert dom1_lv001 vg001 -wi-a----- 20.00g dom1_lv002 vg001 -wi-a----- 32.00g ``` オンラインになっている場合は `Attr` が `-wi-ao-----` とかになっています。その場合はたぶんなにか間違っています。 ## ボリュームの削除 libvirt で pool を作っている場合だと、lvm 側でいきなり削除すると libvirt 上に消せない volume が残ってしまいますね。pool がある場合とない場合で手順が異なります。 ### pool がある場合 単純に `vol-delete` を打てばきれいに消えます。 ``` virsh # vol-delete dom1_lv001 --pool pool001 Vol dom1_lv001 deleted ``` ### pool がない場合 仮想ホスト上の lvm で、削除対象のボリュームをディアクティベートします。 ``` # lvchange -an /dev/vg001/dom1_lv001 # lvchange -an /dev/vg001/dom1_lv002 # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert dom1_lv001 vg001 -wi------- 20.00g dom1_lv002 vg001 -wi------- 32.00g ``` `Attr` から `a` が消えます。この状態にしてから `lvremove` でボリュームを削除します。 ``` # lvremove /dev/vg001/dom1_lv001 Logical volume "dom1_lv001" successfully removed # lvremove /dev/vg001/dom1_lv002 Logical volume "dom1_lv002" successfully removed ``` このとき、先の手順でボリュームのディアクティベートをやっていないと「アクティブだよ? 本当に消すの?」みたいな警告が入ります。また、ディアクティベートしてあるボリュームは /dev/vg001/ のデバイスが消えているので tab 補完とかが利きません。手打ちしましょう。 ## 仮想ゲストの削除 ここまできてから、仮想ゲストを削除します。最初にこの手順をやった方が順番的に正しい気もするんですが、そうすると紐付いていたボリュームを確認することができなくなるので、ボリューム削除がちょっと怖くなるんですよね…… ``` virsh # undefine dom1 Domain dom1 has been undefined ``` こんな感じでやると、そこそこ安全にきれいに消せるかなぁ……と。