openstack 平台P2V遷移


【Openstack】P2V遷移

一、前言

P2V,含義為物理機轉成虛擬機,並可以健康運行在openstack或其他虛擬化的環境中。

二、前提准備

三、操作步驟

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 驅動程序:

    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
    

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啟動不了,顯示為藍屏

1573119187810

解決方法:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM