openstack 平臺P2V遷移

【Openstack】P2V遷移

1、前言

P2V,含義爲物理機轉成虛擬機,並能夠健康運行在openstack或其餘虛擬化的環境中。linux

2、前提準備

  • 中起色操做系統: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

3、操做步驟

一、安裝遷移中起色

安裝步驟省略,

須要注意的是,通常被遷移的物理機,磁盤比較大,因此中起色的磁盤空間最好大於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

四、製做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系統進行遷移

五、操做物理機,進行遷移。

將使用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操做系統。另外若是要遷移到雲平臺上面,那麼須要安裝一些軟件。

a)、優化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 平臺做爲虛擬機,而不是做爲鏡像。

b)、優化linux

  1. 安裝基本軟件包

    # 安裝NetworkManager,用於網卡的自動發現及管理
    # 安裝acpid,用於虛擬機的電源管理
    yum install -y NetworkManager acpid
    
    # 開機啓動服務
    
    #centos6:
    chkconfig acpid on
    chkconfig NetworkManager on
    
    #centos7:
    systemctl enable acpid
    systemctl enable NetworkManager
  2. 安裝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
  3. 修改配置文件

    /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
  4. 禁用默認的 zeroconf route

    echo "NOZEROCONF=yes" >> /etc/sysconfig/network
  5. 修改kernel啓動參數,編輯/boot/grub/grub.conf,在kernel所在行添加console字段

    Note

    centos6須要配置此項

    kernel ... console=ttyS0,115200n8 console=tty0

七、上傳到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 平臺,開啓剛建立的虛擬機,進入系統後,爲被遷移物理機的操做系統。

4、常見問題解決方法

一、windows啓動不了,顯示爲藍屏

1573119187810

解決方法:

一、刪除虛擬機

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

相關文章
相關標籤/搜索