目錄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