为避免部分服务器、虚拟机或者云主机的操作系统在导入自定义镜像后,创建的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驱动
- 运行
grep -i virtio /boot/config-$(uname -r)
检查当前操作系统的内核是否支持virtio驱动。
- 执行命令
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
确认virtio驱动是否包含在临时文件系统initramfs或者initrd中。
修复临时文件系统
通过检查,发现源服务器内核支持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驱动。
下载内核安装包- 运行
yum install -y ncurses-devel gcc make wget
安装编译内核的必要组件。 - 运行
uname -r
查询当前系统使用的内核版本,如示例中的4.4.24-2.a17.x86_64。 - 前往 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
切换目录。
- 依次运行以下命令编译内核。
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
- 出现以下界面时,开始打开virtio相关配置:
说明 选 * 配置表示编译到内核,选 m 配置表示编译为模块。
- 使用空格勾选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)
- 按下Esc键退出内核配置界面并根据弹窗提示保存.config文件。
- 检查 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驱动。
- 使用空格勾选Virtualization项。
下一步
检查virtio驱动后,您可以:
在文档使用中是否遇到以下问题
更多建议
匿名提交