[vmware to openstack] 安裝virtio驅動


描述

  從vmware的虛擬機遷移到opensatck,由於vmware虛擬機磁盤類型采用的是scsi,要遷移到opensatck平台運行,發現虛擬機無法起來,原因是vmware虛擬機沒有安裝virtio驅動,所以遷移之前要確保虛擬機支持virtio和安裝了virtio驅動。

前置條件

根據您服務器的操作系統,判斷是否需要修復臨時文件系統啟用virtio驅動。

系統版本 說明
CentOS 6/7/8及以上版本、Ubuntu 12/14/16/18/20及以上版本、
Debian 7/8/9/10及以上版本、SUSE 11/12/15及以上版本
如果服務器操作系統如左側所示,在導入自定義鏡像時,openstack將會自動處理virtio驅動。 默認已安裝virtio驅動的系統,但有時openstack image注入hw_scsi_mode=virtio-scsi hw_disk_bus=scsi元數據不生效,需要注意步驟二: 修復臨時文件系統。
步驟一:檢查服務器內核是否支持virtio驅動

  通過檢查,發現源服務器內核支持virtio驅動,但是臨時文件系統initramfs或者initrd中沒有包含virtio驅動時,需要修復臨時文件系統。以CentOS等為例。

1、運行grep -i virtio /boot/config-$(uname -r)檢查當前操作系統的內核是否支持virtio驅動。

$ grep -i virtio /boot/config-$(uname -r)
CONFIG_VIRTIO_BLK=m
CONFIG_SCSI_VIRTIO=m
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_VIRTIO=m
# Virtio drivers
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m
# CONFIG_VIRTIO_MMIO is not set

請檢查CONFIG_VIRTIO_BLK和CONFIG_VIRTIO_NET這兩個參數。

檢查結果 說明
沒有這兩個參數 表示該操作系統沒有安裝virtio相關驅動,暫時不能直接導入openstack雲平台。需要為您的服務器[編譯安裝virtio驅動]
參數取值為m 請執行下一步確認virtio驅動是否包含在臨時文件系統initramfs或者initrd中
參數取值為y 表示包含了virtio驅動,您可以直接導入自定義的鏡像到openstack平台。[vmware虛擬機導入openstack]

2、執行命令lsinitrd /boot/initramfs-$(uname -r).img | grep virtio確認virtio驅動是否包含在臨時文件系統initramfs或者initrd中。

$ lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
-rw-r--r--   1 root     root         7880 Sep 14  2019 usr/lib/modules/3.10.0-1062.1.1.el7.x86_64/kernel/drivers/block/virtio_blk.ko.xz
-rw-r--r--   1 root     root        14324 Sep 14  2019 usr/lib/modules/3.10.0-1062.1.1.el7.x86_64/kernel/drivers/net/virtio_net.ko.xz
-rw-r--r--   1 root     root         8180 Sep 14  2019 usr/lib/modules/3.10.0-1062.1.1.el7.x86_64/kernel/drivers/scsi/virtio_scsi.ko.xz
drwxr-xr-x   2 root     root            0 Sep 21  2019 usr/lib/modules/3.10.0-1062.1.1.el7.x86_64/kernel/drivers/virtio
-rw-r--r--   1 root     root         4552 Sep 14  2019 usr/lib/modules/3.10.0-1062.1.1.el7.x86_64/kernel/drivers/virtio/virtio.ko.xz
-rw-r--r--   1 root     root         9908 Sep 14  2019 usr/lib/modules/3.10.0-1062.1.1.el7.x86_64/kernel/drivers/virtio/virtio_pci.ko.xz
-rw-r--r--   1 root     root         8328 Sep 14  2019 usr/lib/modules/3.10.0-1062.1.1.el7.x86_64/kernel/drivers/virtio/virtio_ring.ko.xz

確認結果說明:

  • 如上圖所示,表示initramfs已經包含了virtio_blk驅動,以及其所依賴的virtio.ko、virtio_pci.ko和virtio_ring.ko,您可以直接導入到openstack
  • 如果臨時文件系統initramfs沒有包含virtio驅動,則需要修復臨時文件系統。具體操作,請參見步驟二:修復臨時文件系統。
步驟二:修復臨時文件系統
  • CentOS/RedHat 8
$ mkinitrd -f --allow-missing \
            --with=virtio_blk --preload=virtio_blk \
            --with=virtio_net --preload=virtio_net \
            --with=virtio_console --preload=virtio_console \
            /boot/initramfs-$(uname -r).img $(uname -r)
  • CentOS/RedHat 6/7
$ mkinitrd -f --allow-missing \
            --with=xen-blkfront --preload=xen-blkfront \
            --with=virtio_blk --preload=virtio_blk \
            --with=virtio_pci --preload=virtio_pci \
            --with=virtio_console --preload=virtio_console \
            /boot/initramfs-$(uname -r).img $(uname -r)
  • CentOS/RedHat 5
$ mkinitrd -f --allow-missing \
            --with=xen-vbd  --preload=xen-vbd \
            --with=xen-platform-pci --preload=xen-platform-pci \
            --with=virtio_blk --preload=virtio_blk \
            --with=virtio_pci --preload=virtio_pci \
            --with=virtio_console --preload=virtio_console \
            /boot/initrd-$(uname -r).img $(uname -r)
  • Debian/Ubuntu
$ echo -e 'xen-blkfront\nvirtio_blk\nvirtio_pci\nvirtio_console' >> \
/etc/initramfs-tools/modules
mkinitramfs -o /boot/initrd.img-$(uname -r)
檢查virtio驅動的安裝情況
$ find /lib/modules/"$(uname -r)"/ -name "virtio*" | grep -E "virtio*"
$ grep -E "virtio*" < /lib/modules/"$(uname -r)"/modules.builtin

如果任一命令輸出virtio_blk、virtio_pci、virtio_console等文件列表,表明您已經正確安裝了virtio驅動。

參考文獻

2022 阿里雲幫助中心


免責聲明!

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



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