目录node
P2V,含义为物理机转成虚拟机,并能够健康运行在openstack或其余虚拟化的环境中。linux
中起色操做系统:CentOS-7.6.1801ios
中起色所需rpm安装包:virt-p2v 、virt-manager 、virt-v2v、 libguestfs-win-support、 libguestfs* 、virtio-win 以及它们相关的依赖包git
中起色针对windows 须要下载的文件:github
https://github.com/jakobadam/kvm-mergeide/archive/master.zipshell
被迁移的物理机为windows 的时候 ,须要准备的文件:windows
https://www.virtualbox.org/raw-attachment/wiki/Migrate_Windows/MergeIDE.zipcentos
windows 虚拟机驱动程序网络
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.171-1/virtio-win-0.1.171.isodom
virt-p2v.iso 镜像文件
http://oirase.annexia.org/virt-p2v/RHEL-7.4-preview/virt-p2v-1.36.3-1.el7.iso
安装步骤省略,
须要注意的是,通常被迁移的物理机,磁盘比较大,因此中起色的磁盘空间最好大于1T。
a)、制做的离线仓库
b)、安装软件包
# 安装kvm 虚拟化环境 yum install virt-p2v virt-manager virt-v2v virt-* libguestfs-win-support libguestfs* -y # 安装virtio-win-0.1.141-1.noarch.rpm yum localinstall virtio-win-0.1.141-1.noarch.rpm
[root@p2v-node ~]# mkdir /p2v-pool #建立存储目录 [root@p2v-node ~]# chown root:root /p2v-pool #修改属主属组 [root@p2v-node ~]# chmod 755 /p2v-pool #更改权限 [root@p2v-node ~]# virsh pool-define-as P2vPool --type dir --target /p2v-pool #定义存储池 Pool P2vPool defined [root@p2v-node ~]# virsh pool-build P2vPool #建立存储池 Pool P2vPool built [root@p2v-node ~]# virsh pool-start P2vPool #启动存储池 Pool P2vPool started [root@p2v-node ~]# virsh pool-autostart P2vPool #设置自动启动 Pool P2vPool marked as autostarted [root@p2v-node ~]# virsh pool-info P2vPool #查看存储池信息 Name: P2vPool UUID: f7f2dc1c-67ab-48b9-891b-bb3698fbc040 State: running Persistent: yes Autostart: yes Capacity: 499.76 GiB Allocation: 84.87 MiB Available: 499.67 GiB
a)、下载virt-p2v镜像文件
下载地址: http://oirase.annexia.org/virt-p2v/RHEL-7.4-preview/virt-p2v-1.36.3-1.el7.iso
b)、使用 UltraISO 软件制做u盘启动盘
选择 写入硬盘映像。
目前virt-p2v-1.32.7-2.el7.iso此版本不支持centos6.x系统的迁移,可使用virt-p2v-1.36.10-1.el7.iso或更新版本对centos6.x系统进行迁移
将使用virt-p2v镜像制做的U盘启动盘来引导物理机。
进入到图形界面
1.填写中起色的IP地址
2.填写中起色的sshd服务端口号(默认为22)
3.填写中起色用户名
4.填写中起色对应用户名的密码
5.填写私有sshd服务密钥路径(能够不填写)
配置网络, 若是没有dhcp。须要手动配置一个静态ip地址,点击configure network ,删除全部默认的网络配置,手动建立新的
选择网卡设备,这里咱们要选择能够 链接到 中起色的网卡设备
配置ip地址
一般这里保存以后,会有一会时间,网络才会配置上,可能须要进入到xterm ,查看一下。
点击Test connection,而后 测试经过后,点击Next。
设置迁移信息,
1.填写主机名称,cpu数量,内存容量(此项自定义)
2.选择管理工具(libvirt),生成镜像文件的输出位置(存储池名称)和输出格式(raw,qcow2)
填写 物理机转换为虚拟机的输出方式和格式,具体以下: output to (-o): 选择输出模式,推荐选择 libvirt 模式或者 local 模式 output conn (-oc): 填写一个 kvm 虚拟化的域名 (可选) output storage (-os): 填写一个存储位置,对应输出模式选择存储位置, libvirt 对应存储池名称, local 对应中起色的存储目录 output format (-of): 填写输出格式,推荐 qcow2 格式,若是存储位置空间够大,能够填写 raw 格式3.选择须要转换的硬盘
四、要转换成虚拟机的时候,保留的物理网卡
配置好后,点击Start conversion。
如下是示例配置信息:
将转换成的虚拟机磁盘,保存到中起色的/p2v-pool,虚拟磁盘格式为qcow2 格式。
登陆到中起色查看过程
根据被迁移的物理机的磁盘大小决定迁移时间,1.4T迁移了大概一天的时间, #####会在中起色的/tmp目录下面,生成相关文件 查看迁移进度: # tailf /tmp/virt-p2v-20191031-a2b1r92d/virt-v2v-conversion-log.txt 查看转换成功的虚拟机磁盘文件 [root@virt-p2v /p2v-pool]# qemu-img info P2V-DISK-NAME #切换到存储池目录查看磁盘信息 image: P2V-DISK-NAME file format: qcow2 virtual size: 6.3G (6713966592 bytes) disk size: 1.5G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
迁移过程当中选择了libvirt模式,那么物理机的操做系统迁移过来后,会直接在中起色virt-manager中生成shut off状态的虚拟机。
刚p2v迁移过来的虚拟机是没法正常使用的,须要进行优化参数,尤为是windows操做系统。另外若是要迁移到云平台上面,那么须要安装一些软件。
更新驱动
windows 驱动程序:
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.171-1/virtio-win-0.1.171.iso
将准备好的windows 驱动iso镜像,上传到中起色上
virt-install \ --name p2v-win-test\ --ram 8192 --vcpus 2 --boot hd \ --network network=default,model=virtio \ --disk path=/p2v-pool/win08-new-sda,format=raw,device=disk,bus=ide \ --disk path=/p2v-pool/virtio-win-0.1.141.iso,device=cdrom \ --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type windows --os-variant win2k8r2
使用vnc 软件远程登陆到 虚拟机里面,
# 查看虚拟机的vnc 端口 virsh vncdisplay p2v-win-test :0 #####使用 ip+vnc端口远程链接虚拟机。(ip为中起色的ip地址)
更新驱动主要驱动
#根据实际状况填写路径 PnPutil.exe -i -a D:\viostor\2k8r2\amd64\viostor.inf PnPutil.exe -i -a D:\vioserial\2k8R2\amd64\vioser.inf PnPutil.exe -i -a D:\vioscsi\2k8R2\amd64\vioscsi.inf PnPutil.exe -i -a D:\viorng\2k8R2\amd64\viorng.inf
更新其余驱动
安装Balloon服务
拷贝 D:\Balloon\2k8r2\amd64
(使用对应操做系统版本的Balloon下的文件)目录到 C:\Program Files
下并重命名为 Balloon
打开PowerShell并运行命令: & 'C:\Program Files\Balloon\blnsvr.exe' -i
.png)
安装qemu-guest-agent
安装cloudbase-init
最后一步比较重要,若是是迁移物理机,能够不用执行这一步,由于物理机就这一台,并且物理机通常硬盘比较大,咱们要直接上传到openstack 平台做为虚拟机,而不是做为镜像。
安装基本软件包
# 安装NetworkManager,用于网卡的自动发现及管理 # 安装acpid,用于虚拟机的电源管理 yum install -y NetworkManager acpid # 开机启动服务 #centos6: chkconfig acpid on chkconfig NetworkManager on #centos7: systemctl enable acpid systemctl enable NetworkManager
安装cloud-init相关软件包
# 安装cloud-init,用于注入密码/密钥和主机名 # 安装qemu-guest-agent,用于在面板更新密码/密钥 # 安装cloud-utils,用于更改虚拟机根分区大小(可选安装,须要启用epel源) yum install -y cloud-init qemu-guest-agent cloud-utils # 开机启动服务(有的linux发行版默认不开机自启这些服务,须要手动设置开机自启) #centos6: chkconfig cloud-init on chkconfig cloud-init-local on chkconfig cloud-config on chkconfig cloud-final on chkconfig qemu-ga on #centos7: systemctl enable cloud-init systemctl enable cloud-init-local systemctl enable cloud-config systemctl enable cloud-final systemctl enable qemu-guest-agent
修改配置文件
/etc/cloud/cloud.cfg
users: - default disable_root: 0 ssh_pwauth: 1 locale_configfile: /etc/sysconfig/i18n mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2'] resize_rootfs_tmp: /dev ssh_deletekeys: 0 ssh_genkeytypes: ~ syslog_fix_perms: ~ datasource_list: ['ConfigDrive','Ec2','NoCloud'] datasource: Ec2: timeout: 2 max_wait: 5 cloud_init_modules: - migrator - seed_random - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - ca-certs - rsyslog - users-groups - ssh cloud_config_modules: - mounts - locale - set-passwords - timezone - puppet - chef - salt-minion - mcollective - disable-ec2-metadata - runcmd cloud_final_modules: - rightscale_userdata - scripts-per-once - scripts-per-boot - scripts-per-instance - scripts-user - ssh-authkey-fingerprints - keys-to-console - phone-home - final-message system_info: distro: rhel default_user: name: cloud-user paths: cloud_dir: /var/lib/cloud templates_dir: /etc/cloud/templates ssh_svcname: sshd
禁用默认的 zeroconf route
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
修改kernel启动参数,编辑/boot/grub/grub.conf,在kernel所在行添加console字段
Note
centos6须要配置此项
kernel ... console=ttyS0,115200n8 console=tty0
将转换后的qcow2文件转换成 raw 格式
[root@overcloud-novacompute-0 ~]# qemu-img convert win08-new-sda.qcow2 -f qcow2 -O raw win08-new-sda.raw # 若是已经转换成 raw 格式,就不须要进行这一步了
此步骤略
# rbd ls -l -p vms | grep <vm id> 1c10d2d5-0c90-420c-b07c-0719a91fb66d_disk 40960M images/5a39368b-5d1e-4007-b20e-608d38a36b84@snap 2 # 其中《vm id》为平台所建立虚拟机的 id
# rbd -p vms rm 1c10d2d5-0c90-420c-b07c-0719a91fb66d_disk Removing image: 100% complete...done. # rbd import -p vms P2V-DISK-NAME.raw 1c10d2d5-0c90-420c-b07c-0719a91fb66d_disk rbd: --pool is deprecated for import, use --dest-pool Importing image: 100% complete...done.
一、删除虚拟机
virsh destroy win-08-new virsh undefine win-08-new
二、修改启动参数,从新启动虚拟机
修改--disk path=/p2v-pool/win08-new-sda.raw,format=raw,device=disk,bus=virtio
为 --disk path=/p2v-pool/win08-new-sda.raw,format=raw,device=disk,bus=ide
virt-install \ --name win-08-new \ --ram 8192 --vcpus 2 --boot hd \ --network network=default,model=virtio \ --disk path=/p2v-pool/win08-new-sda.raw,format=raw,device=disk,bus=ide \ --disk path=/p2v-pool/virtio-win-0.1.141.iso,device=cdrom \ --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type windows --os-variant win2k8r2
三、在中起色上强制关闭虚拟机
virsh destroy win-08-new
四、在中起色上执行以下操做
wget https://github.com/jakobadam/kvm-mergeide/archive/master.zip unzip master.zip cd kvm-mergeide-master virt-win-reg --merge win-08-new mergeide.reg # 注意:这条命令里的win-08-new是你以前建立kvm虚拟机的名称,virt-win-reg会自动搜索KVM中noactive的虚拟机名称,而后执行mergeide.reg
四、使用vnc软件远程链接,安装驱动(重要),具体步骤看优化windows 步骤。
# 启动虚拟机 virsh start win-08-new
更新驱动步骤省略
五、在中起色上为刚启动的windows虚拟机,动态添加磁盘 (重要)
# 建立空的虚拟机磁盘文件 dd if=/dev/zero of=/opt/test.img bs=4k count=20 # 挂载文件 virsh attach-disk p2v-test-win2008-2 /opt/test.img --targetbus=virtio vdb
六、使用vnc 进入设备管理器,查看磁盘控制器,能够看到redhar virtio scsi device 设备驱动,说明操做成功。
而后关闭虚拟机,删除虚拟机,将bus修改为 virtio ,从新启动虚拟机。
virsh destroy win-08-new virsh undefine win-08-new virt-install \ --name win-08-new \ --ram 8192 --vcpus 2 --boot hd \ --network network=default,model=virtio \ --disk path=/p2v-pool/win08-new-sda.raw,format=raw,device=disk,bus=vitio\ --disk path=/p2v-pool/virtio-win-0.1.141.iso,device=cdrom \ --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type windows --os-variant win2k8r2
虚拟机正常启动,致使虚拟机没法正常启动,是由于没有vitio的驱动程序,因此bus为virtio的时候,系统没法启动。
参考文档:
https://blog.csdn.net/tianci_zzz/article/details/73896955
https://bugzilla.redhat.com/show_bug.cgi?id=1142993