為避免部分伺服器、虛擬機器或者雲主機的作業系統在匯入自訂鏡像後,建立的ECS執行個體無法啟動,您需要在匯入鏡像前檢查是否需要在原始伺服器中安裝virtio驅動。

無需安裝virtio驅動的鏡像

從本地匯入自訂鏡像時,阿里雲會自動處理匯入的自訂鏡像的virtio驅動的作業系統有:

  • Windows Server 2008
  • Windows Server 2012
  • Windows Server 2016
  • CentOS 6/7
  • Ubuntu 12/14/16
  • Debian 7/8/9
  • SUSE 11/12

以上列表的鏡像,預設已安裝virtio驅動的系統,需要注意修複臨時檔案系統

需要安裝virtio驅動的鏡像

其他不在以上列表的作業系統,您需要在匯入鏡像之前,為原始伺服器安裝virtio驅動。

檢查伺服器核心是否支援virtio驅動

  1. 運行 grep -i virtio /boot/config-$(uname -r) 檢查當前作業系統的核心是否支援virtio驅動。

    说明
    • 如果在輸出資訊中沒有找到 VIRTIO_BLKVIRTIO_NET 的資訊,表示該作業系統沒有安裝virtio相關驅動,暫時不能直接匯入阿里雲雲平台。您需要為您的伺服器編譯安裝virtio驅動。
    • 如果參數 CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET 取值為 y,表示包含了virtio驅動,您可以參閱 匯入鏡像必讀 直接 匯入自訂鏡像 到阿里雲。
    • 如果參數 CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET 取值為 m,需要進入第2步。
  2. 執行命令 lsinitrd /boot/initramfs-$(uname -r).img | grep virtio 確認virtio驅動是否包含在臨時檔案系統initramfs或者initrd中。

    说明
    • 截圖表明,initramfs已經包含了virtio_blk驅動,以及其所依賴的virtio.ko、virtio_pci.ko和virtio_ring.ko,您可以參閱 匯入鏡像必讀 直接 匯入自訂鏡像 到阿里雲。
    • 如果臨時檔案系統initramfs沒有包含virtio驅動,則需要修複臨時檔案系統。

修複臨時檔案系統

通過檢查,發現原始伺服器核心支援virtio驅動,但是臨時檔案系統initramfs或者initrd中沒有包含virtio驅動時,需要修複臨時檔案系統。以CentOS等為例。

  • 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 \
  • 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)
  • Debian/Ubuntu
    echo -e 'xen-blkfront\nvirtio_blk\nvirtio_pci\nvirtio_console' >> \
    /etc/initramfs-tools/modules
    mkinitramfs -o /boot/initrd.img-$(uname -r)"

編譯安裝virtio驅動

此處以Redhat伺服器為例,為您示範如何編譯安裝virtio驅動。

下載核心安裝包
  1. 運行 yum install -y ncurses-devel gcc make wget 安裝編譯核心的必要組件。
  2. 運行 uname -r 查詢當前系統使用的核心版本,如樣本中的4.4.24-2.a17.x86_64。

  3. 前往 Linux核心列表頁面 下載對應的核心版本源碼,如樣本中的4.4.24開頭的linux-4.4.24.tar.gz的網址為 https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz

  4. 運行 cd /usr/src/ 切換目錄。
  5. 運行 wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz 下載安裝包。
  6. 運行 tar -xzf linux-4.4.24.tar.gz 解壓安裝包。
  7. 運行 ln -s linux-4.4.24 linux 建立連結。
  8. 運行 cd /usr/src/linux 切換目錄。
編譯核心
  1. 依次運行以下命令編譯核心。
    make mrproper
    symvers_path=$(find /usr/src/ -name "Module.symvers")
    test -f $symvers_path && cp $symvers_path .
    cp /boot/config-$(uname -r) ./.config
    make menuconfig
  2. 出現以下介面時,開始開啟virtio相關配置:
    说明* 配置表示編譯到核心,選 m 配置表示編譯為模組。
    1. 使用空格勾選Virtualization項。

      確認是否勾選了KVM(Kernel-based Virtual Machine)選項。



      Processor type and features  --->
         [*] Paravirtualized guest support  --->
           --- Paravirtualized guest support
       (128)   Maximum allowed size of a domain in gigabytes
       [*]   KVM paravirtualized clock
       [*]   KVM Guest support


      Device Drivers  --->
        [*] Block devices  --->
       <M>   Virtio block driver (EXPERIMENTAL)
       -*- Network device support  --->
           <M>   Virtio network driver (EXPERIMENTAL)
    2. 按下Esc鍵退出核心配置介面並根據彈窗提示儲存.config檔案。
    3. 檢查 virtio相關配置是否已經正確配置。
    4. 若檢查後發現暫未設定virtio相關配置,運行以下命令手動編輯.config檔案。
      make oldconfig
      make prepare
      make scripts
      make
      make install
    5. 運行以下命令查看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驅動。

下一步

檢查virtio驅動後,您可以: