为避免部分服务器、虚拟机或者云主机的操作系统在导入自定义镜像后,创建的ECS实例无法启动,您需要在导入镜像前检查是否需要在源服务器中安装virtio驱动。
背景信息
根据您源服务器的操作系统,判断是否需要手动安装virtio驱动。
| 源服务器的操作系统 | 说明 |
|---|---|
|
如果源服务器的操作系统如左侧所示,在导入自定义镜像时,阿里云将会自动处理virtio驱动。
步骤二:修复临时文件系统。 |
| 其他操作系统 |
如果源服务器的操作系统为其他Linux版本,请根据以下步骤安装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)"
步骤三:下载内核安装包
说明 本章节以linux-4.4.24.tar.gz为例,您需要修改为操作系统内核对应的版本。
- yum install -y ncurses-devel gcc make wget安装编译内核的必要组件。
-
运行
uname -r查询当前系统使用的内核版本,如示例中的4.4.24-2.a17.x86_64。 -
前往Linux内核列表页面查看对应的内核版本源码的下载地址。
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项。
Processor type and features ---> [*] Paravirtualized guest support ---> --- Paravirtualized guest support (128) Maximum allowed size of a domain in gigabytes [*] KVM paravirtualized clock [*] KVM Guest supportDevice Drivers ---> [*] Block devices ---> <M> Virtio block driver (EXPERIMENTAL) -*- Network device support ---> <M> Virtio network driver (EXPERIMENTAL) - .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项。