自宅サーバーのProxmox VE 4.4から5.1に仮想マシンを移行する話

Posted on 2018/02/11(Sun) 17:45 in technical

さまり

我が家の自宅サーバーたちは、最近までProxmox VE 4.4で動作させていました。

今回、PRIMERGY TX1320 M2が3台揃ったので、Proxmox VE 5.1のリリースに合わせて移行しました。

多少のダウンタイムはあるものの、特段問題なく移行できたので、移行手順のメモを残しておきます。

まだの人は、前回の 自宅サーバーのProxmox VE 5.1 - 3 nodes cluster環境の構築 もあわせてご覧ください。

移行手順

今回の場合は旧ストレージ(NFS)から新ストレージ(Ceph cluster)に移行することになります。

NFSからファイルを抜き出してきて、Cephに直接ぶち込む方式でもいいのですが、VMの設定ファイルを作るのも手間なので、Backup & Restore方式を採用します。

旧環境で使用していたNFSに、新環境からもNFS接続して、一時的にBackupファイルを参照できるようにしてあるものとします。

通報

  • 旧環境ホスト名: uka (元ネタ: いなり、こんこん、恋いろは。の宇迦之御魂神(うかのみたまのかみ))
  • NFSマウント先: /mnt/pve/dango-01

その場合、コマンドは以下のようなもので十分です。

旧環境

root@uka:~# qm list | grep running
    1003 ran                  running    512                8.00 3492
    1049 yachiyo              running    1024              40.00 3840
root@uka:~# qm shutdown 1049
root@uka:~# qm status 1049
status: stopped
root@uka:~# vzdump 1049 --dumpdir /mnt/pve/dango01/dump
INFO: starting new backup job: vzdump 1049 --dumpdir /mnt/pve/dango01/dump
INFO: Starting Backup of VM 1049 (qemu)
INFO: status = stopped
INFO: update VM 1049: -lock backup
INFO: backup mode: stop
INFO: ionice priority: 7
INFO: snapshots found (not included into backup)
INFO: creating archive '/mnt/pve/dango01/dump/vzdump-qemu-1049-2017_11_28-22_48_06.vma'
INFO: starting kvm to execute backup task
INFO: started backup task 'fc163681-b962-495e-b289-db94b7652f55'
INFO: status: 0% (19202048/42949672960), sparse 0% (1007616), duration 3, 6/6 MB/s
<中略>
INFO: status: 100% (42949672960/42949672960), sparse 86% (37138993152), duration 637, 847/0 MB/s
INFO: transferred 42949 MB in 637 seconds (67 MB/s)
INFO: stopping kvm after backup task
INFO: archive file size: 5.42GB
INFO: Finished Backup of VM 1049 (00:10:42)
INFO: Backup job finished successfully

通報

GUIからBuckupを取る場合は、自動的にdumpdirが指定されますが、CLIからの場合は自分で指定する必要があります。

新環境

root@pve03:~# qmrestore /mnt/pve/dango-01/dump/vzdump-qemu-1049-2017_11_28-22_48_06.vma 1049 -storage rbd_vm
restore vma archive: vma extract -v -r /var/tmp/vzdumptmp24839.fifo /mnt/pve/dango-01/dump/vzdump-qemu-1049-2017_11_28-22_48_06.vma /var/tmp/vzdumptmp24839
CFG: size: 310 name: qemu-server.conf
DEV: dev_id=1 size: 42949672960 devname: drive-virtio0
CTIME: Tue Nov 28 22:48:10 2017
new volume ID is 'rbd_vm:vm-1049-disk-1'
map 'drive-virtio0' to 'rbd:rbd/vm-1049-disk-1:conf=/etc/pve/ceph.conf:id=admin:keyring=/etc/pve/priv/ceph/rbd_vm.keyring' (write zeros = 0)
progress 1% (read 429522944 bytes, duration 9 sec)
<中略>
progress 100% (read 42949672960 bytes, duration 161 sec)
total bytes read 42949672960, sparse bytes 37138993152 (86.5%)
space reduction due to 4K zero blocks 2.32%

ここで、基本的にはそのまま起動することができるのですが、現状のBackup & Restoreには不要な設定が紛れ込んでしまうバグがあるようです。(下記unused0, unused1など)

root@pve03:~# cat /etc/pve/qemu-server/1049.conf
bootdisk: virtio0
cpu: host
ide2: none,media=cdrom
memory: 1024
name: yachiyo
net0: virtio=22:BE:D8:D5:DA:D4,bridge=vmbr1
onboot: 1
ostype: l26
smbios1: uuid=94c2c14e-e92f-4a38-ae8c-b5decd4ddd44
unused0: dango-01:1049/vm-1049-disk-1.qcow2
unused1: rbd_ct:vm-1049-disk-1
virtio0: rbd_vm:vm-1049-disk-1,size=40G

!危険!

このunusedなdisk(特に上記で言うrbd_ctの方)をGUIから削除すると、VM用のイメージの実体が同時に消える可能性があるので、注意が必要です。

なので、その辺りは手作業で消してクリーンにしてあげます。(数が多い場合はsedでも可)

root@pve03:~# cat /etc/pve/qemu-server/1049.conf
bootdisk: virtio0
cpu: host
ide2: none,media=cdrom
memory: 1024
name: yachiyo
net0: virtio=22:BE:D8:D5:DA:D4,bridge=vmbr0
onboot: 1
ostype: l26
smbios1: uuid=94c2c14e-e92f-4a38-ae8c-b5decd4ddd44
virtio0: rbd_vm:vm-1049-disk-1,size=40G

この状態で、起動すれば問題なく立ち上がってきました。

root@pve03:~# qm list | grep 1049
    1049 yachiyo              stopped    1024              40.00 0
root@pve03:~# qm start 1049
root@pve03:~# qm status 1049
status: running

後は、他のVMも順次移行して完了です。

余談

新規に仮想マシンを作るときに、vmdkとかのイメージをCephストレージに突っ込んで使いたい場合は、以下のスレッドを参考にすると良さそう。(キーワードくらいだけど)

https://forum.proxmox.com/threads/move-qcow2-from-nfs-to-ceph-no-sparse.20994/

確かこんなコマンドだった気がする。

qemu-img convert -f qcow2 -O raw seilx86.qcow2 /dev/stdout | rbd --image-format 2 import -k /etc/pve/priv/ceph/rdb_vm.keyring --dest-pool rdb - vm-1002-disk-1

とか

rbd import --image-format 2 -k /etc/pve/priv/ceph/rdb_vm.keyring --dest-pool rdb seilx86.raw vm-1002-disk-1

おわり。