なにかの技術メモ置き場

@インフラエンジニア

KVM環境の移行

概要

CentOS7上に構築したKVM環境をCentOS8上に移行する。

環境

用途 ホスト名 OS QEMU libvirt
移行元マシン kvm01 CentOS 7.7.1908 2.12 4.5
移行先マシン kvm01 CentOS 8.1.1911 2.12 4.5
データ移行用NAS file01 割愛 - -

前提

・移行元マシンと移行先マシンは同一とする。つまり、OSから丸ごと入れ替える。
・移行先マシンへのCentOS8のインストール手順は割愛する。
・移行先マシンのOS設定はKVM関連のみ記載する。

操作

移行元マシンでの作業

ゲストマシンを停止する。

[root@kvm01 ~]# virsh list --all
 Id    名前                         状態
----------------------------------------------------
 1     log01                          実行中
 2     ospdir01                       実行中
 3     proxy01                        実行中
 4     log02                          実行中
 5     ntp01                          実行中
 6     dns01                          実行中
 -     kvm02                          シャットオフ
 -     pxe01                          シャットオフ
 -     t_centos7                      シャットオフ
 -     t_centos8                      シャットオフ
[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 はシャットダウン中です

ドメイン 4 はシャットダウン中です

ドメイン 5 はシャットダウン中です

ドメイン 6 はシャットダウン中です
[root@kvm01 ~]# virsh list --all
 Id    名前                         状態
----------------------------------------------------
 -     dns01                          シャットオフ
 -     kvm02                          シャットオフ
 -     log01                          シャットオフ
 -     log02                          シャットオフ
 -     ntp01                          シャットオフ
 -     ospdir01                       シャットオフ
 -     proxy01                        シャットオフ
 -     pxe01                          シャットオフ
 -     t_centos7                      シャットオフ
 -     t_centos8                      シャットオフ

データ移行用に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 dns01.xml
-rw------- 1 root root 3700  3月 13 00:07 kvm02.xml
-rw------- 1 root root 3700  3月 12 22:52 log01.xml
-rw------- 1 root root 3700  3月 17 23:24 log02.xml
drwx------ 3 root root   42  3月 14 09:19 networks
-rw------- 1 root root 3818  3月 12 22:57 ntp01.xml
-rw------- 1 root root 5986  3月  6 01:04 ospdir01.xml
-rw------- 1 root root 6433  3月  7 23:10 ospdir01.xml_rescure
-rw------- 1 root root 3706  3月 12 22:52 proxy01.xml
-rw------- 1 root root 3700  3月 12 22:52 pxe01.xml
-rw------- 1 root root 5987  3月  1 11:19 t_centos7.xml
-rw------- 1 root root 3826  2月 26 01:39 t_centos8.xml
[root@kvm01 libvirt]# tar czvf /nfs/_etc_libvirtd_qemu.tgz qemu
qemu/
qemu/networks/
qemu/networks/autostart/
qemu/networks/default.xml
qemu/proxy01.xml
qemu/pxe01.xml
qemu/autostart/
qemu/autostart/ospdir01.xml
qemu/autostart/log01.xml
qemu/autostart/ntp01.xml
qemu/autostart/dns01.xml
qemu/autostart/proxy01.xml
qemu/autostart/log02.xml
qemu/t_centos8.xml
qemu/ntp01.xml
qemu/log01.xml
qemu/ospdir01.xml_rescure
qemu/ospdir01.xml
qemu/t_centos7.xml
qemu/dns01.xml
qemu/kvm02.xml
qemu/log02.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 dns01.img
-rw------- 1 qemu qemu  2277572608  3月 13 02:00 kvm02.img
-rw------- 1 root root  3178430464  3月 25 00:51 log01.img
-rw------- 1 root root  3168796672  3月 25 00:51 log02.img
-rw------- 1 root root  1756889088  3月 25 00:51 ntp01.img
-rw------- 1 root root 35764764672  3月 25 00:52 ospdir01.img
-rw------- 1 root root 16171073536  3月 25 00:51 proxy01.img
-rw------- 1 qemu qemu  1763246080  3月 13 02:00 pxe01.img
-rw------- 1 root root 21478375424  3月  1 11:18 t_centos7.img
-rw------- 1 root root 21478375424  3月 12 23:06 t_centos8.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/dns01.img
-rw------- 1 root root 1783431168  3月 25 00:51 dns01.img
-rw------- 1 qemu qemu 2277572608  3月 13 02:00 /nfs/kvm02.img
-rw------- 1 qemu qemu 2277572608  3月 13 02:00 kvm02.img
-rw------- 1 root root 3178430464  3月 25 00:51 /nfs/log01.img
-rw------- 1 root root 3178430464  3月 25 00:51 log01.img
-rw------- 1 root root 3168796672  3月 25 00:51 /nfs/log02.img
-rw------- 1 root root 3168796672  3月 25 00:51 log02.img
-rw------- 1 root root 1756889088  3月 25 00:51 /nfs/ntp01.img
-rw------- 1 root root 1756889088  3月 25 00:51 ntp01.img
-rw------- 1 root root 35764764672  3月 25 00:52 /nfs/ospdir01.img
-rw------- 1 root root 35764764672  3月 25 00:52 ospdir01.img
-rw------- 1 root root 16171073536  3月 25 00:51 /nfs/proxy01.img
-rw------- 1 root root 16171073536  3月 25 00:51 proxy01.img
-rw------- 1 qemu qemu 1763246080  3月 13 02:00 /nfs/pxe01.img
-rw------- 1 qemu qemu 1763246080  3月 13 02:00 pxe01.img
-rw------- 1 root root 21478375424  3月  1 11:18 /nfs/t_centos7.img
-rw------- 1 root root 21478375424  3月  1 11:18 t_centos7.img
-rw------- 1 root root 21478375424  3月 12 23:06 /nfs/t_centos8.img
-rw------- 1 root root 21478375424  3月 12 23:06 t_centos8.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/KVMlibvirtvirt-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/dns01.img
-rw-------. 1 root root 1783431168  3月 25 00:51 dns01.img
-rw-------. 1 qemu qemu 2277572608  3月 13 02:00 /nfs/kvm02.img
-rw-------. 1 qemu qemu 2277572608  3月 13 02:00 kvm02.img
-rw-------. 1 root root 3178430464  3月 25 00:51 /nfs/log01.img
-rw-------. 1 root root 3178430464  3月 25 00:51 log01.img
-rw-------. 1 root root 3168796672  3月 25 00:51 /nfs/log02.img
-rw-------. 1 root root 3168796672  3月 25 00:51 log02.img
-rw-------. 1 root root 1756889088  3月 25 00:51 /nfs/ntp01.img
-rw-------. 1 root root 1756889088  3月 25 00:51 ntp01.img
-rw-------. 1 root root 35764764672  3月 25 00:52 /nfs/ospdir01.img
-rw-------. 1 root root 35764764672  3月 25 00:52 ospdir01.img
-rw-------. 1 root root 16171073536  3月 25 00:51 /nfs/proxy01.img
-rw-------. 1 root root 16171073536  3月 25 00:51 proxy01.img
-rw-------. 1 qemu qemu 1763246080  3月 13 02:00 /nfs/pxe01.img
-rw-------. 1 qemu qemu 1763246080  3月 13 02:00 pxe01.img
-rw-------. 1 root root 21478375424  3月  1 11:18 /nfs/t_centos7.img
-rw-------. 1 root root 21478375424  3月  1 11:18 t_centos7.img
-rw-------. 1 root root 21478375424  3月 12 23:06 /nfs/t_centos8.img
-rw-------. 1 root root 21478375424  3月 12 23:06 t_centos8.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/proxy01.xml
qemu/pxe01.xml
qemu/autostart/
qemu/autostart/ospdir01.xml
qemu/autostart/log01.xml
qemu/autostart/ntp01.xml
qemu/autostart/dns01.xml
qemu/autostart/proxy01.xml
qemu/autostart/log02.xml
qemu/t_centos8.xml
qemu/ntp01.xml
qemu/log01.xml
qemu/ospdir01.xml_rescure
qemu/ospdir01.xml
qemu/t_centos7.xml
qemu/dns01.xml
qemu/kvm02.xml
qemu/log02.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 dns01.xml
-rw-------. 1 root root 3700  3月 13 00:07 kvm02.xml
-rw-------. 1 root root 3700  3月 12 22:52 log01.xml
-rw-------. 1 root root 3700  3月 17 23:24 log02.xml
drwx------. 3 root root   42  3月 14 09:19 networks
-rw-------. 1 root root 3818  3月 12 22:57 ntp01.xml
-rw-------. 1 root root 5986  3月  6 01:04 ospdir01.xml
-rw-------. 1 root root 6433  3月  7 23:10 ospdir01.xml_rescure
-rw-------. 1 root root 3706  3月 12 22:52 proxy01.xml
-rw-------. 1 root root 3700  3月 12 22:52 pxe01.xml
-rw-------. 1 root root 5987  3月  1 11:19 t_centos7.xml
-rw-------. 1 root root 3826  2月 26 01:39 t_centos8.xml

qemu/autostart:
合計 0
lrwxrwxrwx. 1 root root 27  2月 29 00:40 dns01.xml -> /etc/libvirt/qemu/dns01.xml
lrwxrwxrwx. 1 root root 27  2月 29 01:19 log01.xml -> /etc/libvirt/qemu/log01.xml
lrwxrwxrwx. 1 root root 27  3月 18 23:44 log02.xml -> /etc/libvirt/qemu/log02.xml
lrwxrwxrwx. 1 root root 27  2月 29 00:40 ntp01.xml -> /etc/libvirt/qemu/ntp01.xml
lrwxrwxrwx. 1 root root 30  3月  6 22:55 ospdir01.xml -> /etc/libvirt/qemu/ospdir01.xml
lrwxrwxrwx. 1 root root 29  2月 28 01:16 proxy01.xml -> /etc/libvirt/qemu/proxy01.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
ドメイン dns01 が dns01.xml から定義されました

ドメイン kvm02 が kvm02.xml から定義されました

ドメイン log01 が log01.xml から定義されました

ドメイン log02 が log02.xml から定義されました

ドメイン ntp01 が ntp01.xml から定義されました

ドメイン ospdir01 が ospdir01.xml から定義されました

ドメイン proxy01 が proxy01.xml から定義されました

ドメイン pxe01 が pxe01.xml から定義されました

ドメイン t_centos7 が t_centos7.xml から定義されました

ドメイン t_centos8 が t_centos8.xml から定義されました
[root@kvm01 qemu]# virsh list --all
 Id    名前                         状態
----------------------------------------------------
 -     dns01                          シャットオフ
 -     kvm02                          シャットオフ
 -     log01                          シャットオフ
 -     log02                          シャットオフ
 -     ntp01                          シャットオフ
 -     ospdir01                       シャットオフ
 -     proxy01                        シャットオフ
 -     pxe01                          シャットオフ
 -     t_centos7                      シャットオフ
 -     t_centos8                      シャットオフ

テスト起動。1台だけ。
移行前後でネットワークインターフェースの名称を変えていたりすると起動に失敗する。

[root@kvm01 qemu]# virsh start dns01
ドメイン dns01 が起動されました
[root@kvm01 qemu]# virsh list
 Id    名前                         状態
----------------------------------------------------
 2     dns01                          実行中
[root@kvm01 qemu]# virsh console dns01
ドメイン dns01 に接続しました
エスケープ文字は ^] です
[  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

dns01 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     ospdir01                       実行中
 2     dns01                          実行中
 3     log01                          実行中
 4     ntp01                          実行中
 5     proxy01                        実行中
 6     log02                          実行中
 -     kvm02                          シャットオフ
 -     pxe01                          シャットオフ
 -     t_centos7                      シャットオフ
 -     t_centos8                      シャットオフ

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

参考サイト

TBD