自訂鏡像的作業系統核心需支援virtio驅動,鏡像才能被匯入阿里雲雲平台,正常啟動雲端服務器。製作或匯入自訂鏡像時,請確保自訂鏡像已安裝virtio驅動且已將virtio驅動添加到臨時檔案系統,否則請手動操作。
您可以按照以下步驟,檢查當前作業系統核心是否支援virtio驅動,並執行相關操作。
根據檢查結果,選擇需要執行的操作。
檢查伺服器核心是否支援virtio驅動
運行以下命令,檢查當前作業系統核心是否支援virtio驅動,以判斷是否需要為自訂鏡像安裝virtio驅動或將virtio驅動添加到臨時檔案系統。
grep -i virtio /boot/config-$(uname -r)
根據回顯資訊判斷:
根據輸出資訊中的參數CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
的取值判斷:
取值均為y:已正確安裝virtio驅動,可直接執行相關文檔。
沒有這兩個參數:未安裝virtio驅動,需要手動安裝。具體操作,請參見安裝virtio驅動。
取值均為m/取值一個為y一個為m:支援virtio驅動,還需運行以下命令,判斷virtio驅動是否已添加到臨時檔案系統。
取值均為m:運行以下命令,判斷virtio驅動是否已添加到臨時檔案系統。
取值一個為y一個為m:為y的驅動已經編譯到核心中且正確安裝,還需運行以下命令,判斷為m的virtio驅動是否已添加到臨時檔案系統。
CentOS系列
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
如上圖所示,表示virtio驅動已經添加到臨時檔案系統中,可直接執行相關文檔。
否則,需將virtio驅動添加到臨時檔案系統。如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數的取值一個為y一個為m,則只需要判斷取值為m的驅動是否已添加到臨時檔案系統。
Ubuntu/Debian系列
lsinitramfs /boot/initrd.img-$(uname -r)|grep virtio
如上圖所示,表示virtio驅動已經添加到臨時檔案系統中,可直接執行相關文檔。
否則,需將virtio驅動添加到臨時檔案系統。如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數的取值一個為y一個為m,則只需要判斷取值為m的驅動是否已添加到臨時檔案系統。
將virtio驅動添加到臨時檔案系統
通過檢查,發現原始伺服器核心支援virtio驅動,但是未添加到臨時檔案系統中,需要手動添加。本章節以CentOS、Debian、Ubuntu等作業系統為例。
CentOS 6/Anolis OS 7/AlmaLinux 8/Fedora 33
CentOS 6/Anolis OS 7/AlmaLinux 8/Fedora 33及以上版本,且核心版本高於2.6.24(通過uname -r
查詢)時,安裝如下操作修複臨時檔案。
運行以下命令,開啟dracut.conf檔案。
vim /etc/dracut.conf
按i進入編輯模式,然後添加如下內容。
add_drivers+="virtio_blk virtio_net"
修改完成後按Esc鍵,並輸入:wq後按下斷行符號鍵,儲存並退出。
說明如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數的取值一個為y一個為m,則只需要添加取值為m的驅動。例如CONFIG_VIRTIO_NET
參數取值為m,則只需要添加add_drivers+="virtio_net"
。執行以下命令,重建initrd。
dracut -f
說明命令執行完成後,您可以執行
echo $?
命令查看返回是否為0,返回為0則說明已經重建initrd。您還可以執行lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
命令查看是否已將virtio驅動正確添加到臨時檔案系統中。
Debian/Ubuntu系列
運行以下命令,開啟modules檔案。
vim /etc/initramfs-tools/modules
按i進入編輯模式,然後添加如下內容。
virtio_blk virtio_net
修改完成後按Esc鍵,並輸入:wq後按下斷行符號鍵,儲存並退出。
說明如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數的取值一個為y一個為m,則只需要添加取值為m的驅動。例如CONFIG_VIRTIO_NET
參數取值為m,則只需要添加virtio_net
。執行以下命令,重建initrd。
update-initramfs -u
說明命令執行完成後,您可以執行
echo $?
命令查看返回是否為0,返回為0則說明已經重建initrd。您還可以執行lsinitramfs /boot/initrd.img-$(uname -r)|grep virtio
命令查看是否已將virtio驅動正確添加到臨時檔案系統中。
SUSE/OpenSUSE系列
版本低於SUSE 12 SP1或低於OpenSUSE 13
運行以下命令,開啟kernel檔案。
vim /etc/sysconfig/kernel
按i進入編輯模式,然後添加如下內容。
INITRD_MODULES="virtio_blk virtio_net"
修改完成後按Esc鍵,並輸入:wq後按下斷行符號鍵,儲存並退出。
說明如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數的取值一個為y一個為m,則只需要添加取值為m的驅動。例如CONFIG_VIRTIO_NET
參數取值為m,則只需要添加INITRD_MODULES="virtio_net"
。執行以下命令,重建initrd。
update-initramfs -u
版本為SUSE 12 SP1、OpenSUSE 13或更高版本
運行以下命令,開啟dracut.conf檔案。
vim /etc/dracut.conf
按i進入編輯模式,然後添加如下內容。
add_drivers+="virtio_blk virtio_net"
修改完成後按Esc鍵,並輸入:wq後按下斷行符號鍵,儲存並退出。
說明如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數的取值一個為y一個為m,則只需要添加取值為m的驅動。例如CONFIG_VIRTIO_NET
參數取值為m,則只需要添加add_drivers+="virtio_net"
。執行以下命令,重建initrd。
dracut -f
命令執行完成後,您可以執行echo $?
命令查看返回是否為0,返回為0則說明已經重建initrd。您還可以執行
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
命令查看是否已將virtio驅動正確添加到臨時檔案系統中。
安裝virtio驅動
RedHat和CentOS 5系統的核心版本建議升級到5.11版本,再安裝virtio驅動。
步驟1:下載核心安裝包
本操作以CentOS作業系統下載核心版本linux-4.4.24.tar.gz為例,您需要將核心版本修改為實際作業系統核心對應的版本。
運行以下命令,安裝編譯核心的必要組件。
yum install -y ncurses-devel gcc make wget
運行以下命令,查詢當前系統使用的核心版本,如樣本中的4.4.24-2.al7.x86_64。
uname -r
前往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
。運行以下命令,切換目錄。
cd /usr/src/
運行以下命令,下載安裝包。
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz
運行以下命令,解壓安裝包。
tar -xzf linux-4.4.24.tar.gz
運行以下命令,建立軟連結。
ln -s linux-4.4.24 linux
運行以下命令,切換目錄。
cd /usr/src/linux
步驟2:編譯核心
依次運行以下命令,編譯核心。
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
說明如果運行make menuconfig後報錯,您可以根據報錯提示進行修複。例如缺少ncurses-devel、bison、flex組件時,需要依次運行以下命令,安裝相關組件。
yum install ncurses-devel yum install bison yum install flex
出現以下介面時,開始開啟virtio相關配置:
說明選*配置表示編譯到核心,選m配置表示編譯為模組。
配置Virtualization項。
使用空格鍵選擇Virtualization項,並按Enter鍵進入詳細列表。
確認是否選擇了KVM(Kernel-based Virtual Machine)項。
配置Processor type and features項。
返回到主介面,通過上下鍵選擇Processor type and features項,並按Enter鍵進入詳細列表。
使用空格鍵選擇Paravirtualized guest support項,並按Enter鍵進入詳細列表。
確認是否選擇了KVM paravirtualized clock和KVM Guest support項。
配置Device Drivers項。
返回到主介面,通過上下鍵選擇Device Drivers項,並按Enter鍵進入詳細列表。
使用空格鍵選擇Block devices項,並按Enter鍵進入詳細列表。
確認是否選擇了Virtio block driver項。
回到上一級Device Drivers詳細列表,通過上下鍵選擇Network device support項,並按Enter鍵進入詳細列表。
確認是否選擇了Virtio network driver項。
按Esc鍵退出核心配置介面,並根據彈窗提示選擇Yes儲存.config檔案。
檢查virtio相關配置是否已經正確配置。
具體操作,請參見檢查伺服器核心是否支援virtio驅動。
(條件可選)如果檢查後發現暫未設定virtio相關配置,依次運行以下命令自動觸發編輯.config檔案。
make oldconfig make prepare make scripts make make install
運行以下命令,查看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驅動。
相關文檔
Linux系統安裝virtio驅動後,您可以執行以下操作: