環境
方式図
前提
・移行元マシンと移行先マシンのホスト名は同一とする。
※図では表現できていないが、実際はハードウェアは1台しかなく、OSから丸ごと入れ替えている。
・移行先マシンへのCentOS8のインストール手順は割愛する。
・移行先マシンのOS設定はKVM関連のみ記載する。
操作
移行元マシンでの作業
ゲストマシンを停止する。
[root@kvm01 ~]# virsh list --all Id 名前 状態 ---------------------------------------------------- 1 guest01 実行中 2 guest02 実行中 3 guest03 実行中 - guest04 シャットオフ - guest05 シャットオフ
[root@kvm01 ~]# for id in $(virsh list --all | awk '{print $1}' | grep -v Id | grep -v "-" | grep -v "^$") > do > virsh shutdown $id > done ドメイン 1 はシャットダウン中です ドメイン 2 はシャットダウン中です ドメイン 3 はシャットダウン中です
[root@kvm01 ~]# virsh list --all Id 名前 状態 ---------------------------------------------------- - guest01 シャットオフ - guest02 シャットオフ - guest03 シャットオフ - guest04 シャットオフ - guest05 シャットオフ
データ移行用にNASを使用することとする。
[root@kvm01 ~]# df -t nfs ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 file012:/nfs 3876309120 3017697280 858611840 78% /nfs
ゲストマシンの定義ファイルをバックアップする。
[root@kvm01 ~]# cd /etc/libvirt/ [root@kvm01 libvirt]# ls -l 合計 196 drwxr-xr-x 2 root root 6 3月 17 22:52 hooks -rw-r--r-- 1 root root 450 2月 5 02:02 libvirt-admin.conf -rw-r--r-- 1 root root 547 2月 5 02:02 libvirt.conf -rw-r--r-- 1 root root 16529 3月 17 22:51 libvirtd.conf -rw-r--r-- 1 root root 1175 2月 5 02:02 lxc.conf drwx------ 2 root root 4096 3月 17 22:41 nwfilter -rw------- 1 root root 12288 3月 17 22:51 passwd.db drwx------ 4 root root 4096 3月 20 07:00 qemu -rw-r--r-- 1 root root 2169 2月 5 02:02 qemu-lockd.conf -rw-r--r-- 1 root root 2465 3月 17 22:51 qemu-sanlock.conf -rw-r--r-- 1 root root 30306 3月 17 22:51 qemu.conf drwx------ 2 root root 6 3月 12 01:41 secrets drwxr-xr-x 3 root root 4096 3月 14 09:23 storage -rw-r--r-- 1 root root 3202 2月 5 02:02 virtlockd.conf -rw-r--r-- 1 root root 3247 2月 5 02:02 virtlogd.conf
[root@kvm01 libvirt]# ls -l qemu 合計 80 drwxr-xr-x 2 root root 113 3月 18 23:44 autostart -rw------- 1 root root 3700 3月 12 22:52 guest01.xml -rw------- 1 root root 3700 3月 13 00:07 guest02.xml -rw------- 1 root root 3700 3月 12 22:52 guest03.xml -rw------- 1 root root 3700 3月 17 23:24 guest04.xml -rw------- 1 root root 3818 3月 12 22:57 guest05.xml drwx------ 3 root root 42 3月 14 09:19 networks
[root@kvm01 libvirt]# tar czvf /nfs/_etc_libvirtd_qemu.tgz qemu qemu/ qemu/networks/ qemu/networks/autostart/ qemu/networks/default.xml qemu/autostart/ qemu/autostart/guest03.xml qemu/autostart/guest02.xml qemu/autostart/guest01.xml qemu/guest05.xml qemu/guest03.xml qemu/guest01.xml qemu/guest02.xml qemu/guest04.xml
[root@kvm01 libvirt]# ls -l /nfs/_etc_libvirtd_qemu.tgz -rw-r--r-- 1 root root 4569 3月 25 00:55 /nfs/_etc_libvirtd_qemu.tgz
ゲストマシンのイメージをバックアップする。
[root@kvm01 libvirt]# cd /var/lib/libvirt/images/
[root@kvm01 images]# ls -l 合計 68723664 -rw------- 1 root root 1783431168 3月 25 00:51 guest01.img -rw------- 1 qemu qemu 2277572608 3月 13 02:00 guest02.img -rw------- 1 root root 3178430464 3月 25 00:51 guest03.img -rw------- 1 root root 3168796672 3月 25 00:51 guest04.img -rw------- 1 root root 1756889088 3月 25 00:51 guest05.img
# なぜrootとqemuが混在しているんだ・・・
[root@kvm01 images]# cp -p *.img /nfs/
[root@kvm01 images]# for node in $(ls *.img); do ls -l $node /nfs/$node; done -rw------- 1 root root 1783431168 3月 25 00:51 /nfs/guest01.img -rw------- 1 root root 1783431168 3月 25 00:51 guest01.img -rw------- 1 qemu qemu 2277572608 3月 13 02:00 /nfs/guest02.img -rw------- 1 qemu qemu 2277572608 3月 13 02:00 guest02.img -rw------- 1 root root 3178430464 3月 25 00:51 /nfs/guest03.img -rw------- 1 root root 3178430464 3月 25 00:51 guest03.img -rw------- 1 root root 3168796672 3月 25 00:51 /nfs/guest04.img -rw------- 1 root root 3168796672 3月 25 00:51 guest04.img -rw------- 1 root root 1756889088 3月 25 00:51 /nfs/guest05.img -rw------- 1 root root 1756889088 3月 25 00:51 guest05.img
今さらながらバージョン確認。
[root@kvm01 images]# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core)
さらば!
[root@kvm01 images]# systemctl poweroff
移行先マシンでの作業
CentOS8をインストールする。
※手順は割愛
バージョン確認。
[root@kvm01 ~]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core)
パッケージを最新化する。
[root@kvm01 ~]# dnf -y update
QEMU/KVM、libvirt、virt-installをインストールする。
[root@kvm01 ~]# dnf -y install qemu-kvm libvirt virt-install
サービスを起動しつつ、自動起動を有効化する。
[root@kvm01 ~]# systemctl status libvirtd.service ● libvirtd.service - Virtualization daemon Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled) Active: inactive (dead) Docs: man:libvirtd(8) https://libvirt.org [root@kvm01 ~]# systemctl enable --now libvirtd [root@kvm01 ~]# systemctl status libvirtd.service --no-pager ● libvirtd.service - Virtualization daemon Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-03-25 02:36:26 JST; 10s ago Docs: man:libvirtd(8) https://libvirt.org Main PID: 4135 (libvirtd) Tasks: 19 (limit: 32768) Memory: 22.2M CGroup: /system.slice/libvirtd.service tq4135 /usr/sbin/libvirtd tq4341 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/ … mq4342 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/ … 3月 25 02:36:27 kvm01.tmpdomain.local dnsmasq-dhcp[4341]: DHCP, sockets bound exclusively to interface virbr0 3月 25 02:36:27 kvm01.tmpdomain.local dnsmasq[4341]: reading /etc/resolv.conf 3月 25 02:36:27 kvm01.tmpdomain.local dnsmasq[4341]: using nameserver 2404:1a8:7f01:b::3#53 3月 25 02:36:27 kvm01.tmpdomain.local dnsmasq[4341]: using nameserver 2404:1a8:7f01:a::3#53 3月 25 02:36:27 kvm01.tmpdomain.local dnsmasq[4341]: using nameserver 172.16.0.2#53 3月 25 02:36:27 kvm01.tmpdomain.local dnsmasq[4341]: using nameserver 172.16.0.1#53 3月 25 02:36:27 kvm01.tmpdomain.local dnsmasq[4341]: using nameserver 10.0.0.254#53 3月 25 02:36:27 kvm01.tmpdomain.local dnsmasq[4341]: read /etc/hosts - 2 addresses 3月 25 02:36:27 kvm01.tmpdomain.local dnsmasq[4341]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses 3月 25 02:36:27 kvm01.tmpdomain.local dnsmasq-dhcp[4341]: read /var/lib/libvirt/dnsmasq/default.hostsfile Hint: Some lines were ellipsized, use -l to show in full.
データ移行用NASをマウントした。
[root@kvm01 ~]# df -t nfs ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 file012:/nfs 3876309120 3086422400 789886720 80% /nfs
ゲストマシンのイメージをリストアする。
[root@kvm01 ~]# cd /var/lib/libvirt/images/ [root@kvm01 images]# ls -l 合計 0 [root@kvm01 images]# cp -p /nfs/*.img ./
[root@kvm01 images]# for node in $(ls *.img); do ls -l $node /nfs/$node; done -rw-------. 1 root root 1783431168 3月 25 00:51 /nfs/guest01.img -rw-------. 1 root root 1783431168 3月 25 00:51 guest01.img -rw-------. 1 qemu qemu 2277572608 3月 13 02:00 /nfs/guest02.img -rw-------. 1 qemu qemu 2277572608 3月 13 02:00 guest02.img -rw-------. 1 root root 3178430464 3月 25 00:51 /nfs/guest03.img -rw-------. 1 root root 3178430464 3月 25 00:51 guest03.img -rw-------. 1 root root 3168796672 3月 25 00:51 /nfs/guest04.img -rw-------. 1 root root 3168796672 3月 25 00:51 guest04.img -rw-------. 1 root root 1756889088 3月 25 00:51 /nfs/guest05.img -rw-------. 1 root root 1756889088 3月 25 00:51 guest05.img
ゲストマシンの定義ファイルをリストアする。
[root@kvm01 images]# cd /etc/libvirt/ [root@kvm01 libvirt]# ls -l 合計 76 -rw-r--r--. 1 root root 450 2月 5 07:06 libvirt-admin.conf -rw-r--r--. 1 root root 547 2月 5 07:06 libvirt.conf -rw-r--r--. 1 root root 16529 2月 5 07:06 libvirtd.conf drwx------. 2 root root 4096 3月 25 02:36 nwfilter drwx------. 3 root root 22 3月 25 02:33 qemu -rw-r--r--. 1 root root 2169 2月 5 07:06 qemu-lockd.conf -rw-r--r--. 1 root root 30294 2月 5 07:06 qemu.conf drwx------. 2 root root 6 3月 25 02:36 secrets -rw-r--r--. 1 root root 3202 2月 5 07:06 virtlockd.conf -rw-r--r--. 1 root root 3247 2月 5 07:06 virtlogd.conf
[root@kvm01 libvirt]# ls -lR qemu qemu: 合計 0 drwx------. 3 root root 42 3月 25 02:36 networks qemu/networks: 合計 4 drwx------. 2 root root 25 3月 25 02:33 autostart -rw-------. 1 root root 576 3月 25 02:36 default.xml qemu/networks/autostart: 合計 0 lrwxrwxrwx. 1 root root 14 3月 25 02:33 default.xml -> ../default.xml
[root@kvm01 libvirt]# tar zxvf /nfs/_etc_libvirtd_qemu.tgz qemu -bash: tar: コマンドが見つかりません
え?どうしてそういうことするのCentOS8・・・
[root@kvm01 libvirt]# dnf -y install tar
[root@kvm01 libvirt]# tar zxvf /nfs/_etc_libvirtd_qemu.tgz qemu qemu/ qemu/networks/ qemu/networks/autostart/ qemu/networks/default.xml qemu/autostart/ qemu/autostart/guest03.xml qemu/autostart/guest02.xml qemu/autostart/guest01.xml qemu/guest05.xml qemu/guest03.xml qemu/guest01.xml qemu/guest02.xml qemu/guest04.xml
[root@kvm01 libvirt]# ls -lR qemu qemu: 合計 80 drwxr-xr-x. 2 root root 113 3月 18 23:44 autostart -rw-------. 1 root root 3700 3月 12 22:52 guest01.xml -rw-------. 1 root root 3700 3月 13 00:07 guest02.xml -rw-------. 1 root root 3700 3月 12 22:52 guest03.xml -rw-------. 1 root root 3700 3月 17 23:24 guest04.xml drwx------. 3 root root 42 3月 14 09:19 networks qemu/autostart: 合計 0 lrwxrwxrwx. 1 root root 27 2月 29 00:40 guest01.xml -> /etc/libvirt/qemu/guest01.xml lrwxrwxrwx. 1 root root 27 2月 29 01:19 guest03.xml -> /etc/libvirt/qemu/guest03.xml lrwxrwxrwx. 1 root root 27 2月 29 00:40 guest05.xml -> /etc/libvirt/qemu/guest02.xml qemu/networks: 合計 4 drwx------. 2 root root 25 3月 13 23:54 autostart -rw-------. 1 root root 576 3月 14 09:19 default.xml qemu/networks/autostart: 合計 0 lrwxrwxrwx. 1 root root 14 3月 25 02:33 default.xml -> ../default.xml
[root@kvm01 libvirt]# virsh list --all Id 名前 状態 ----------------------------------------------------
[root@kvm01 libvirt]# cd qemu
ゲストマシンを再定義する。
[root@kvm01 qemu]# for node in $(ls *.xml); do virsh define $node; done ドメイン guest01 が guest01.xml から定義されました ドメイン guest02 が guest02.xml から定義されました ドメイン guest03 が guest03.xml から定義されました ドメイン guest04 が guest04.xml から定義されました ドメイン guest05 が guest05.xml から定義されました
[root@kvm01 qemu]# virsh list --all Id 名前 状態 ---------------------------------------------------- - guest01 シャットオフ - guest02 シャットオフ - guest03 シャットオフ - guest04 シャットオフ - guest05 シャットオフ
テスト起動。1台だけ。
移行前後でネットワークインターフェースの名称を変えていたりすると起動に失敗する。
[root@kvm01 qemu]# virsh start guest01 ドメイン guest01 が起動されました
[root@kvm01 qemu]# virsh list Id 名前 状態 ---------------------------------------------------- 2 guest01 実行中
[root@kvm01 qemu]# virsh console guest01 ドメイン guest01 に接続しました エスケープ文字は ^] です [ OK ] Started firewalld - dynamic firewall daemon. ・・・ CentOS Linux 8 (Core) Kernel 4.18.0-147.5.1.el8_1.x86_64 on an x86_64 guest01 login: [root@kvm01 qemu]#
あ、libvirt関連の設定ファイル移行し忘れてた。仕方ないので再設定する。
[root@kvm01 qemu]# cp -p /etc/sysconfig/libvirt-guests{,_$(date +%Y%m%d)} [root@kvm01 qemu]# ls -l /etc/sysconfig/libvirt-guests* -rw-r--r--. 1 root root 2297 2月 5 07:06 /etc/sysconfig/libvirt-guests -rw-r--r--. 1 root root 2297 2月 5 07:06 /etc/sysconfig/libvirt-guests_20200325
[root@kvm01 qemu]# vi /etc/sysconfig/libvirt-guests 割愛。変更箇所はdiff結果を参照。
[root@kvm01 qemu]# diff /etc/sysconfig/libvirt-guests{,_$(date +%Y%m%d)} 15c15 < START_DELAY=30 --- > #START_DELAY=0 25c25 < ON_SHUTDOWN=shutdown --- > #ON_SHUTDOWN=suspend 31c31 < PARALLEL_SHUTDOWN=0 --- > #PARALLEL_SHUTDOWN=0 38c38 < SHUTDOWN_TIMEOUT=60 --- > #SHUTDOWN_TIMEOUT=300
設定値は肌感覚。
反映。
[root@kvm01 qemu]# systemctl restart libvirtd
最後に、ゲストマシンの自動起動設定の移行確認。ホストマシンをリブートする。
[root@kvm01 qemu]# systemctl reboot
リブート完了後、再ログインしてゲストマシンの状態を確認。
[root@kvm01 ~]# virsh list --all Id 名前 状態 ---------------------------------------------------- 1 guest01 実行中 2 guest02 実行中 3 guest03 実行中 - guest04 シャットオフ - guest05 シャットオフ
OK!
メモ
バージョン確認方法。
[root@kvm01 ~]# virsh version コンパイル時に使用したライブラリ: libvirt 4.5.0 使用中のライブラリ: libvirt 4.5.0 使用中の API: QEMU 4.5.0 実行中のハイパーバイザー: QEMU 2.12.0
[root@kvm01 ~]# virsh version --daemon コンパイル時に使用したライブラリ: libvirt 4.5.0 使用中のライブラリ: libvirt 4.5.0 使用中の API: QEMU 4.5.0 実行中のハイパーバイザー: QEMU 2.12.0 デーモンに対して実行中: 4.5.0