openstack 平台P2V迁移
【Openstack】P2V迁移
一、前言
P2V,含义为物理机转成虚拟机,并可以健康运行在openstack或其他虚拟化的环境中。
二、前提准备
中转机操作系统:CentOS-7.6.1801
中转机所需rpm安装包:virt-p2v 、virt-manager 、virt-v2v、 libguestfs-win-support、 libguestfs* 、virtio-win 以及它们相关的依赖包
中转机针对windows 需要下载的文件:
https://github.com/jakobadam/kvm-mergeide/archive/master.zip
被迁移的物理机为windows 的时候 ,需要准备的文件:
https://www.virtualbox.org/raw-attachment/wiki/Migrate_Windows/MergeIDE.zip
windows 虚拟机驱动程序
virt-p2v.iso 镜像文件
http://oirase.annexia.org/virt-p2v/RHEL-7.4-preview/virt-p2v-1.36.3-1.el7.iso
三、操作步骤
1、安装迁移中转机
安装步骤省略,
需要注意的是,一般被迁移的物理机,磁盘比较大,所以中转机的磁盘空间最好大于1T。
2、配置中转机
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
3、创建存储池(可选)
[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
4、制作virt-p2v的 U盘引导启动工具
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系统进行迁移
5、操作物理机,进行迁移。
将使用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.选择需要转换的硬盘
4、要转换成虚拟机的时候,保留的物理网卡
配置好后,点击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状态的虚拟机。
6、优化参数
刚p2v迁移过来的虚拟机是无法正常使用的,需要进行优化参数,尤其是windows操作系统。另外如果要迁移到云平台上面,那么需要安装一些软件。
a)、优化windows
更新驱动
windows 驱动程序:
将准备好的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 平台作为虚拟机,而不是作为镜像。
b)、优化linux
安装基本软件包
# 安装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
7、上传到openstack 平台
a) 、更改虚拟机磁盘文件的格式
将转换后的qcow2文件转换成 raw 格式
[root@overcloud-novacompute-0 ~]# qemu-img convert win08-new-sda.qcow2 -f qcow2 -O raw win08-new-sda.raw
# 如果已经转换成 raw 格式,就不需要进行这一步了
b)、 在openstack平台上新创建一个虚拟机,并将虚拟机关机。
此步骤略
c)、因为我的环境使用的是ceph 环境,所以进行如下操作
# 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
d)、 删除新建虚拟机的磁盘文件,使用迁移过来的磁盘文件替换新建虚拟机的磁盘文件。
# 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.
e)、回到openstack 平台,开启刚创建的虚拟机,进入系统后,为被迁移物理机的操作系统。
四、常见问题解决方法
1、windows启动不了,显示为蓝屏
解决方法:
1、删除虚拟机
virsh destroy win-08-new
virsh undefine win-08-new
2、修改启动参数,重新启动虚拟机
修改--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
3、在中转机上强制关闭虚拟机
virsh destroy win-08-new
4、在中转机上执行如下操作
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
4、使用vnc软件远程连接,安装驱动(重要),具体步骤看优化windows 步骤。
# 启动虚拟机
virsh start win-08-new
更新驱动步骤省略
5、在中转机上为刚启动的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
6、使用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
openstack 平台P2V迁移的更多相关文章
- OpenStack虚拟机冷迁移与热迁移
一.虚拟机迁移分析 openstacvk虚拟机迁移分为冷迁移和热迁移两种方式. 1.1冷迁移: 冷迁移(cold migration),也叫静态迁移.关闭电源的虚拟机进行迁移.通过冷迁移,可以选择将关 ...
- 转 【TTS】AIX平台数据库迁移到Linux--基于RMAN(真实环境)
[TTS]AIX平台数据库迁移到Linux--基于RMAN(真实环境) http://www.cnblogs.com/lhrbest/articles/5186933.html 各位技术爱好者,看完本 ...
- OpenStack平台功能性测试工具Tempest安装
社区对OpenStack平台功能性的测试工具采用Tempest,性能测试采用Rally. 1.什么是Tempest tempest├── api # API的测试集├── cli # OpenStac ...
- OpenStack平台的使用
一.OpenStack平台的使用 使用双节点部署,192.168.16.10为控制节点.192.168.16.20为计算节点. (一).创建镜像 1.在控制节点中找到qcow2镜像 [root@con ...
- 使用Ansible部署openstack平台
使用Ansible部署openstack平台 本周没啥博客水了,就放个云计算的作业上来吧(偷个懒) 案例描述 1.了解高可用OpenStack平台架构 2.了解Ansible部署工具的使用 3.使用A ...
- OpenStack平台调度策略优化
OpenStack平台报错分析 在OpenStack平台经历大并发的时候,比如同一个平台,大量的用户同时创建云主机(单个用户创建大量云主机不会触发此种现象),会达到云平台的性能瓶颈,导致创建云主机报错 ...
- v2v-VMware/VSphere中虚机离线迁移至openstack平台
先决条件 exsi到openstack的迁移,分为两种,一种是静态迁移,另一种是在线迁移. 静态迁移(offline migration)也叫做常规迁移,离线迁移.在迁移之前将虚拟机暂停,同时拷贝虚拟 ...
- OpenStack平台虚拟机实例在线迁移失败问题
一.在线迁移时提示如下的报错 二.原因分析 通过kolla-ansible部署queens版本时,因为OEM的机器设备的UUID记录的一致,导致迁移时识别的是自身机器的UUID,导致迁移失败 三.问题 ...
- Domino系统从UNIX平台到windows平台的迁移及备份
单位机房的一台服务机器到折旧期了,换成了新购IBM机器X3950,而且都预装了windows 2003 server 标准版,所以只有把以前在Unix平台下跑的OA系统迁移到新的windows 200 ...
随机推荐
- JAVA 基础编程练习题38 【程序 38 求字符串长度】
38 [程序 38 求字符串长度] 题目:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度. package cskaoyan; public class cskaoyan ...
- JAVA 基础编程练习题19 【程序 19 打印菱形图案】
19 [程序 19 打印菱形图案] 题目:打印出如下图案(菱形) * *** ************ ***** *** * 程序分析:先把图形分成两部分来看待,前四行一个 ...
- mudos源码分析
错误捕捉相关的代码在simulate.c void throw_error() { )->framekind & FRAME_MASK) == FRAME_CATCH) { LONGJM ...
- 关于CAShapeLayer的一些基本操作
设置圆形进度条: 实现效果如下: 实现代码如下:(注释很详细啦!!!) UIView *circleView = [[UIView alloc]initWithFrame:CGRectMake(, , ...
- jenkins容器内修改root密码--ubuntu系统
http://www.voidcn.com/article/p-yvnoogkc-ng.html 由于jenkins官方镜像是ubuntu系统,所有啥的都用 sudo 换到root账号,然后登陆har ...
- 局域网中win10作为服务器,其他机器无法连接怎么办
内网中某台win10服务器装了一个mysql,其他机器无法连接,通常是防火墙的原因. 下面就讲解一下win10服务器中如何配置入站防火墙. 场景:win10 机器上安装了一个mysql数据库,我的ma ...
- 在linux服务器以及客户端实现公钥免密登录
每次登录服务器都要输入密码,这点比较麻烦.使用ssh公钥登录机制可以直接登录,避免每次都输入密码的烦恼. 所谓ssh公钥登录机制即是:客户端电脑client产生加密用的公钥id_rsa.pub与私钥i ...
- PCM-FTL
1. 运行时第一行需要是write 错误位置 trace_stat->sectors += length;
- 洛谷 题解 CF711A 【Bus to Udayland】
先用一个字符数组存每行的座位情况(字符变量也可以) 接下来用另一个数组存最后的座位情况 好了,看代码 #include<iostream> using namespace std; boo ...
- BIO和NIO实现文件复制
普通文件复制 public void copyFile() throws Exception{ FileInputStream fis=new FileInputStream("C:\\Us ...