分页: 1 / 1

在线迁移腾讯云VM到本地的方法

发表于 : 2025年 11月 3日 07:47
admin
为什么要在线迁移腾讯云VM到本地?
(1)迁移过程不会停止腾讯云VM的业务。
(2)对于某些低配置腾讯云VM,需要一个低成本的本地开发和测试环境。
(3)获得数据自主权。

在线迁移方法:
tencent cloud VM
IP: opencloudos_ip
sshd port: tcp 22
user: sam

[root@VM-opencloudos ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 xfs 40G 19G 22G 47% /
devtmpfs devtmpfs 780M 0 780M 0% /dev
tmpfs tmpfs 856M 24K 856M 1% /dev/shm
tmpfs tmpfs 343M 4.9M 338M 2% /run

# root 用户为 sam用户添加dd命令免密执行权限
[root@VM-opencloudos ~]# which dd
/usr/bin/dd
[root@VM-opencloudos ~]# echo "sam ALL=(root) NOPASSWD: /usr/bin/dd" >> /etc/sudoers

本地宿主机:
# mkdir -p /vm/tencent_cloud_vm
# cd /vm/tencent_cloud_vm

# 开始在线迁移:
# ssh sam@opencloudos_ip "sudo /usr/bin/dd if=/dev/vda bs=4M | xz -4 -T2 -c" | xz -dc -T0 > tencent_cloud_opencloudos.img
备注:迁移的腾讯云VM硬盘是/dev/vda,不是只有/dev/vda1.如果只迁移/dev/vda1,就会丢失VM的虚拟硬盘分区表。

# 挂载虚拟机文件tencent_cloud_opencloudos.img
# cd /vm/tencent_cloud_vm
# file tencent_cloud_opencloudos.img
tencent_cloud_opencloudos.img: DOS/MBR boot sector
# kpartx -av tencent_cloud_opencloudos.img
add map loop0p1 (252:0): 0 83883999 linear 7:0 2048
# ls /dev/mapper/
control loop0p1
# mount /dev/mapper/loop0p1 /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/mapper/loop0p1, missing codepage or helper program, or other error.
dmesg(1) may have more information after failed mount system call.
[47735.182142] XFS (dm-0): Filesystem has duplicate UUID 55f6e85e-09ae-47f8-8787-e227e347a464 - can't mount
[47816.822139] XFS (dm-0): Filesystem has duplicate UUID 55f6e85e-09ae-47f8-8787-e227e347a464 - can't mount
[47883.004975] XFS (dm-0): Filesystem has duplicate UUID 55f6e85e-09ae-47f8-8787-e227e347a464 - can't mount
# 这个错误是因为 XFS 文件系统的 UUID 重复导致的。当系统中已经有一个相同 UUID 的文件系统被挂载时,XFS 会拒绝挂载以防止数据>损坏。
# 解决方法:重新生成新的文件系统 UUID并重新挂载文件系统。
# xfs_admin -U generate /dev/mapper/loop0p1
# mount /dev/mapper/loop0p1 /mnt
# df -hT |grep mnt
/dev/mapper/loop0p1 xfs 40G 19G 22G 48% /mnt
# 查看当前 UUID
# xfs_admin -u /dev/mapper/loop0p1
UUID = 165528ff-63f2-4bfa-a7cc-ef33d39bb15d

# chroot /mnt
basename: 缺少操作对象
请尝试执行 "basename --help" 来获取更多信息。
# 不用理会,继续操作。修改分区表UUID
# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
#### The tencent cloud VM
#UUID=55f6e85e-09ae-47f8-8787-e227e347a464 / xfs defaults 1 1
#### The Local KVM guest
UUID=165528ff-63f2-4bfa-a7cc-ef33d39bb15d / xfs defaults 1 1
#/dev/vda2 /boot/efi vfat noatime 1 2
#tmpfs /dev/shm tmpfs defaults 0 0
#devpts /dev/pts devpts gid=5,mode=620 0 0
#sysfs /sys sysfs defaults 0 0
#proc /proc proc defaults 0 0
/www/swap swap swap defaults 0 0
:wq #保存退出。

# 修改引导文件UUID并保存
# cd /boot/loader/entries/
# vim d3dbc80d11ef45ab957aa852f9b9aaf4-6.17.0-200.bp42.x86_64.conf
title BluePoint Linux (6.17.0-200.bp42.x86_64) 42 (Server Edition)
version 6.17.0-200.bp42.x86_64
linux /boot/vmlinuz-6.17.0-200.bp42.x86_64
initrd /boot/initramfs-6.17.0-200.bp42.x86_64.img $tuned_initrd
options root=UUID=165528ff-63f2-4bfa-a7cc-ef33d39bb15d ro quiet elevator=noop console=ttyS0,115200 console=tty0 vconsole.keymap=us crashkernel=1800M-64G:256M,64G-128G:512M,128G-486G:768M,486G-972G:1024M,972G-:2048M vconsole.font=latarcyrheb-sun16 net.ifnames=0 biosdevname=0 intel_idle.max_cstate=1 intel_pstate=disable
grub_users $grub_users
grub_arg --unrestricted
grub_class BluePoint
#备注:主要修改了root=UUID=165528ff-63f2-4bfa-a7cc-ef33d39bb15d
#由于我改用了我自己开发的BluePoint Linux内核,所以title不是opencloudOS Linux,记得保存退出。

# cd /root
# ntsysv
# 关闭不必要的系统服务
bt
cloud-config.service
cloud-final.service
cloud-init-local.service
cloud-init.service
#保存退出。
# exit
# cd /vm/tencent_cloud_vm
# umount /mnt
# ls
tencent_cloud_opencloudos.img

# 卸载虚拟机文件tencent_cloud_opencloudos.img
# kpartx -d tencent_cloud_opencloudos.img

# 在本地宿主机器上添加KVM虚拟机
操作系统选:CentOS Stream 10
硬盘路径:/vm/tencent_cloud_vm/tencent_cloud_opencloudos.img (根据实际情况填写)
硬盘总线选:VirtIO
虚拟网络接口
网络源:桥接设备(可以根据实际情况设置)
设备名称:br0
设备型号:virtio
虚拟机其他参数根据实际情况填写。

# 启动虚拟机后,如何修改网卡从自动获取IP到设置成静态IP?采用nmcli命令
# nmcli connection show
NAME UUID TYPE DEVICE
lo bab25faa-c56d-4ad0-8fd4-ca34ffb73e55 loopback lo
cloud-init eth0 1dd9a779-d327-56e1-8454-c65e2556c12c ethernet --
Wired connection 1 54bed0c7-ea1b-3154-8b9c-55938c1d74ea ethernet --
# nmcli connection delete "cloud-init eth0"
# nmcli connection delete "Wired connection 1"
# nmcli connection add type ethernet con-name "eth0" ifname eth0 \
ipv4.method manual \
ipv4.addresses 192.168.1.108/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "192.168.1.1,8.8.8.8" \
autoconnect yes

如有不懂的地方请发邮件到tot@bluepoint-ha.com咨询。