Linux KVM仮想マシンのバックアップとリストアの方法

5 May 2024

Linux KVM仮想マシンのバックアップとリストアの方法

仮想化における仮想マシンのバックアップは非常に簡単に出来るためやった方が良いと思う。

特にバックアップサーバーとして別マシンへのゲストOSとしてもバックアップ・リストア出来るためサーバー管理者にとっては非常に都合が良いと思う。

作業ユーザーは、KVMの管理コマンドvirshの実行権限を持っている事を前提として説明する。通常はrootユーザー。

■ 今回は以下の環境を前提条件として説明する。

実行環境はUbuntu20.04TLSとする。

項目                         値

VMイメージファイル格納先       /var/lib/libvirt

VMイメージファイル名          debian12.img

VM設定ファイル格納先         /etc/libvirt/qemu

VM設定ファイル名            debian12.xml

1.バックアップ

KVM仮想マシンのバックアップを行う。

作業としては、VMのイメージファイルのコピーとVMの設定ファイルをDUMP出力してそれをファイルに保存する。

1)バックアップ対象の確認

バックアップ対象のVMの状態を確認

VMが停止してることを確認する。サーバーを稼働させたままでは、バックアップ出来ない(というよりしてはNG)なのでKVMの管理コマンドで確認する。

下記のコマンドで出力されるのは、現在稼働中のサーバーのみ。

root@UbuntuPC:~# virsh list

出力結果の見本

Id  Name      State

--------------------------

1  fileserver    running

2  debian12    running

3  freebsd13    running

バックアップターゲットとするVMが動いてたらシャットダウンする。

root@UbuntuPC:~# virsh shutdown debian12

2)バックアップを取得

事前確認が終了したらバックアップを取得していく。

今回は、上記の確認結果のid3のdebian12仮想マシンのバックアップを取得する。

3)バックアップ格納ディレクトリを作成

バックアップデータを格納しておくディレクトリを作成しておく。自分は128GBのUSBメモリーを用意してそれにバックアップを行った。

余談だが、USBメモリーにバックアップするときはメディアのフォーマットはNTFSにした方が良いだろう。

root@UbuntuPC:# mkdir -pv ~/kvm-backup

4)KVM設定ファイルバックアップ

KVMの管理コマンドvirshを使ってVMの設定ファイルのバックアップを取得する。

root@UbuntuPC:# virsh dumpxml debian12 > ~/kvm-backup/debian12.xml

VM本体のデータのバックアップを取得する。

こちらは、専用コマンドはなく純粋に対象のVMのイメージファイルのコピーを取得する。

KVMの仮想マシンのイメージファイルのデフォルト格納先は、/var/lib/libvirtになる。

root@UbuntuPC:# cp -ivp /var/lib/libvirt/debian12.img ~/kvm-backup/debian12.img

以上でKVM仮想マシンのバックアップが完了となる。

このままバックアップデータとして保管しておくことも、別のKVMホストサーバーへ送りそちらでこのデータをリストアして別のKVMホストサーバーのVMとして稼働させることも可能(別のKVMホストサーバーへ送るときはネットワーク上をFTPとかSCOPYで転送するよりUSBメモリーで移動したほうが安全だと思う)。

2.リストア

バックアップを取得しておいた仮想マシンのリストア作業を説明します。

その際ホストのOSとハードウェア(私の経験的にCPUが多い)の相違によりVM設定ファイルの一部を修正する必要があります。

今回は、割愛します。

1) リストア環境の確認

リストア環境のVMの状態を確認

リストアを行うKVMホストサーバー上にリストアするVMと同じ名前の仮想マシンがないことを確認します。

root@UbuntuPC:# virsh list --all

出力結果の見本

Id  Name      State

--------------------------

1  fileserver    running

2  ad1        running

-  web        running

-  freebsd13    running

2)リストアデータの配置

リストア環境に同じ名前のVMがないことを確認したらバックアップしておいたデータを各々配置していきます。

配置先は、バックアップを取得した環境と同一のディレクトリに格納してください。

別の場所に格納する場合は、バックアップしておいたVMの設定ファイルのイメージファイルの格納先設定を書き換えなくてはなりません。

■VM設定ファイルの配置

バックアップ時とは、異なり設定ファイルも純粋にファイルをディレクトリへコピー(または、移動)するだけになります。

root@UbuntuPC:# cp -p ~/kvm-backup/debian12.xml /etc/libvirt/qemu/debian12.xml

■仮想マシンイメージファイルの配置

こちらも同様にバックアップしておいたイメージファイルを所定のディレクトリへコピー(または、移動)するだけです。

root@UbuntuPC:# cp -p ~/backup/kvm-backup/debian12.img /var/lib/libvirt/images/debian12.img

■VMのリストア(設定の適用)

設定ファイルとVMイメージファイルの配置が完了したらvirshコマンドを使ってKVMホストサーバーに設定を適用します。

root@UbuntuPC:# virsh define /etc/libvirt/qemu/debian12.xml

■仮想マシン一覧を確認してリストアできているかを確認する。

root@UbuntuPC:# virsh list --all

出力結果の見本

Id    Name     State

--------------------------

1   fileserver    running

2   ad1        running

-   web        running

-   freebsd13    running

-   debian12     running

VM一覧に新しくdebian12という仮想マシンが出てきた。

リストア自体は、以上で完了となる。

仮想マシンを実際に起動してみてエラーが出る場合は、設定ファイルを見直すようにする。