安裝virtio驅(qū)動
自定義鏡像的操作系統(tǒng)內(nèi)核需支持virtio驅(qū)動,鏡像才能被導(dǎo)入阿里云云平臺,正常啟動云服務(wù)器。制作或?qū)胱远x鏡像時,請確保自定義鏡像已安裝virtio驅(qū)動且已將virtio驅(qū)動添加到臨時文件系統(tǒng),否則請手動操作。
您可以按照以下步驟,檢查當(dāng)前操作系統(tǒng)內(nèi)核是否支持virtio驅(qū)動,并執(zhí)行相關(guān)操作。
根據(jù)檢查結(jié)果,選擇需要執(zhí)行的操作。
檢查服務(wù)器內(nèi)核是否支持virtio驅(qū)動
運行以下命令,檢查當(dāng)前操作系統(tǒng)內(nèi)核是否支持virtio驅(qū)動,以判斷是否需要為自定義鏡像安裝virtio驅(qū)動或?qū)irtio驅(qū)動添加到臨時文件系統(tǒng)。
grep -i virtio /boot/config-$(uname -r)
根據(jù)回顯信息判斷:
根據(jù)輸出信息中的參數(shù)CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
的取值判斷:
取值均為y:已正確安裝virtio驅(qū)動,可直接執(zhí)行相關(guān)文檔。
沒有這兩個參數(shù):未安裝virtio驅(qū)動,需要手動安裝。具體操作,請參見安裝virtio驅(qū)動。
取值均為m/取值一個為y一個為m:支持virtio驅(qū)動,還需運行以下命令,判斷virtio驅(qū)動是否已添加到臨時文件系統(tǒng)。
取值均為m:運行以下命令,判斷virtio驅(qū)動是否已添加到臨時文件系統(tǒng)。
取值一個為y一個為m:為y的驅(qū)動已經(jīng)編譯到內(nèi)核中且正確安裝,還需運行以下命令,判斷為m的virtio驅(qū)動是否已添加到臨時文件系統(tǒng)。
CentOS系列
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
如上圖所示,表示virtio驅(qū)動已經(jīng)添加到臨時文件系統(tǒng)中,可直接執(zhí)行相關(guān)文檔。
否則,需將virtio驅(qū)動添加到臨時文件系統(tǒng)。如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數(shù)的取值一個為y一個為m,則只需要判斷取值為m的驅(qū)動是否已添加到臨時文件系統(tǒng)。
Ubuntu/Debian系列
lsinitramfs /boot/initrd.img-$(uname -r)|grep virtio
如上圖所示,表示virtio驅(qū)動已經(jīng)添加到臨時文件系統(tǒng)中,可直接執(zhí)行相關(guān)文檔。
否則,需將virtio驅(qū)動添加到臨時文件系統(tǒng)。如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數(shù)的取值一個為y一個為m,則只需要判斷取值為m的驅(qū)動是否已添加到臨時文件系統(tǒng)。
將virtio驅(qū)動添加到臨時文件系統(tǒng)
通過檢查,發(fā)現(xiàn)源服務(wù)器內(nèi)核支持virtio驅(qū)動,但是未添加到臨時文件系統(tǒng)中,需要手動添加。本章節(jié)以CentOS、Debian、Ubuntu等操作系統(tǒng)為例。
CentOS 6/Anolis OS 7/AlmaLinux 8/Fedora 33
CentOS 6/Anolis OS 7/AlmaLinux 8/Fedora 33及以上版本,且內(nèi)核版本高于2.6.24(通過uname -r
查詢)時,安裝如下操作修復(fù)臨時文件。
運行以下命令,打開dracut.conf文件。
vim /etc/dracut.conf
按i進(jìn)入編輯模式,然后添加如下內(nèi)容。
add_drivers+="virtio_blk virtio_net"
修改完成后按Esc鍵,并輸入:wq后按下回車鍵,保存并退出。
說明如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數(shù)的取值一個為y一個為m,則只需要添加取值為m的驅(qū)動。例如CONFIG_VIRTIO_NET
參數(shù)取值為m,則只需要添加add_drivers+="virtio_net"
。執(zhí)行以下命令,重新生成initrd。
dracut -f
說明命令執(zhí)行完成后,您可以執(zhí)行
echo $?
命令查看返回是否為0,返回為0則說明已經(jīng)重新生成initrd。您還可以執(zhí)行lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
命令查看是否已將virtio驅(qū)動正確添加到臨時文件系統(tǒng)中。
Debian/Ubuntu系列
運行以下命令,打開modules文件。
vim /etc/initramfs-tools/modules
按i進(jìn)入編輯模式,然后添加如下內(nèi)容。
virtio_blk virtio_net
修改完成后按Esc鍵,并輸入:wq后按下回車鍵,保存并退出。
說明如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數(shù)的取值一個為y一個為m,則只需要添加取值為m的驅(qū)動。例如CONFIG_VIRTIO_NET
參數(shù)取值為m,則只需要添加virtio_net
。執(zhí)行以下命令,重新生成initrd。
update-initramfs -u
說明命令執(zhí)行完成后,您可以執(zhí)行
echo $?
命令查看返回是否為0,返回為0則說明已經(jīng)重新生成initrd。您還可以執(zhí)行lsinitramfs /boot/initrd.img-$(uname -r)|grep virtio
命令查看是否已將virtio驅(qū)動正確添加到臨時文件系統(tǒng)中。
SUSE/OpenSUSE系列
版本低于SUSE 12 SP1或低于OpenSUSE 13
運行以下命令,打開kernel文件。
vim /etc/sysconfig/kernel
按i進(jìn)入編輯模式,然后添加如下內(nèi)容。
INITRD_MODULES="virtio_blk virtio_net"
修改完成后按Esc鍵,并輸入:wq后按下回車鍵,保存并退出。
說明如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數(shù)的取值一個為y一個為m,則只需要添加取值為m的驅(qū)動。例如CONFIG_VIRTIO_NET
參數(shù)取值為m,則只需要添加INITRD_MODULES="virtio_net"
。執(zhí)行以下命令,重新生成initrd。
update-initramfs -u
版本為SUSE 12 SP1、OpenSUSE 13或更高版本
運行以下命令,打開dracut.conf文件。
vim /etc/dracut.conf
按i進(jìn)入編輯模式,然后添加如下內(nèi)容。
add_drivers+="virtio_blk virtio_net"
修改完成后按Esc鍵,并輸入:wq后按下回車鍵,保存并退出。
說明如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
參數(shù)的取值一個為y一個為m,則只需要添加取值為m的驅(qū)動。例如CONFIG_VIRTIO_NET
參數(shù)取值為m,則只需要添加add_drivers+="virtio_net"
。執(zhí)行以下命令,重新生成initrd。
dracut -f
命令執(zhí)行完成后,您可以執(zhí)行echo $?
命令查看返回是否為0,返回為0則說明已經(jīng)重新生成initrd。您還可以執(zhí)行
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
命令查看是否已將virtio驅(qū)動正確添加到臨時文件系統(tǒng)中。
安裝virtio驅(qū)動
RedHat和CentOS 5系統(tǒng)的內(nèi)核版本建議升級到5.11版本,再安裝virtio驅(qū)動。具體操作,請參見如何將RedHat和CentOS 5系統(tǒng)升級到5.11版本。
步驟1:下載內(nèi)核安裝包
本操作以CentOS操作系統(tǒng)下載內(nèi)核版本linux-4.4.24.tar.gz為例,您需要將內(nèi)核版本修改為實際操作系統(tǒng)內(nèi)核對應(yīng)的版本。
運行以下命令,安裝編譯內(nèi)核的必要組件。
yum install -y ncurses-devel gcc make wget
運行以下命令,查詢當(dāng)前系統(tǒng)使用的內(nèi)核版本,如示例中的4.4.24-2.al7.x86_64。
uname -r
前往Linux內(nèi)核列表頁面查看對應(yīng)的內(nèi)核版本源碼的下載地址。
如下圖示例中的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:編譯內(nèi)核
依次運行以下命令,編譯內(nèi)核。
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后報錯,您可以根據(jù)報錯提示進(jìn)行修復(fù)。例如缺少ncurses-devel、bison、flex組件時,需要依次運行以下命令,安裝相關(guān)組件。
yum install ncurses-devel yum install bison yum install flex
出現(xiàn)以下界面時,開始打開virtio相關(guān)配置:
說明選*配置表示編譯到內(nèi)核,選m配置表示編譯為模塊。
配置Virtualization項。
使用空格鍵選擇Virtualization項,并按Enter鍵進(jìn)入詳細(xì)列表。
確認(rèn)是否選擇了KVM(Kernel-based Virtual Machine)項。
配置Processor type and features項。
返回到主界面,通過上下鍵選擇Processor type and features項,并按Enter鍵進(jìn)入詳細(xì)列表。
使用空格鍵選擇Paravirtualized guest support項,并按Enter鍵進(jìn)入詳細(xì)列表。
確認(rèn)是否選擇了KVM paravirtualized clock和KVM Guest support項。
配置Device Drivers項。
返回到主界面,通過上下鍵選擇Device Drivers項,并按Enter鍵進(jìn)入詳細(xì)列表。
使用空格鍵選擇Block devices項,并按Enter鍵進(jìn)入詳細(xì)列表。
確認(rèn)是否選擇了Virtio block driver項。
回到上一級Device Drivers詳細(xì)列表,通過上下鍵選擇Network device support項,并按Enter鍵進(jìn)入詳細(xì)列表。
確認(rèn)是否選擇了Virtio network driver項。
按Esc鍵退出內(nèi)核配置界面,并根據(jù)彈窗提示選擇Yes保存.config文件。
檢查virtio相關(guān)配置是否已經(jīng)正確配置。
具體操作,請參見檢查服務(wù)器內(nèi)核是否支持virtio驅(qū)動。
(條件可選)如果檢查后發(fā)現(xiàn)暫未設(shè)置virtio相關(guān)配置,依次運行以下命令自動觸發(fā)編輯.config文件。
make oldconfig make prepare make scripts make make install
運行以下命令,查看virtio驅(qū)動的安裝情況。
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等文件列表,表明您已經(jīng)正確安裝了virtio驅(qū)動。
相關(guān)文檔
Linux系統(tǒng)安裝virtio驅(qū)動后,您可以執(zhí)行以下操作: