You can import only custom images whose operating system kernels support the virtio driver to Alibaba Cloud Elastic Compute Service (ECS) and then use the image to create ECS instances that can start. When you create a custom image based on a source server or import a custom image, make sure that the virtio driver is installed in the image and added to a temporary file system.
Step 1: Check whether the operating system kernel of your source server supports the virtio driver
Run the following command to check whether the operating system kernel of your source server supports the virtio driver. This helps you determine whether to install the virtio driver for the custom image or add the driver to a temporary file system.
grep -i virtio /boot/config-$(uname -r)
The following command output is returned.
Analyze the command output.
Check the
CONFIG_VIRTIO_BLK
andCONFIG_VIRTIO_NET
parameters in the command output.If the parameter values are y, the virtio driver is installed. Check whether the image meets the requirements and obtain the Linux image file.
If the parameters do not appear, the virtio driver is not installed. Install the virtio driver.
If the parameter values are m or one parameter value is y and the other is m, the virtio driver is supported. Check whether the virtio driver is added to a temporary file system.
Step 2: Check whether the virtio driver is added to a temporary file system
If the values of the CONFIG_VIRTIO_BLK
and CONFIG_VIRTIO_NET
parameters are m or one parameter value is y and the other is m, run one of the following commands to check whether the virtio driver is added to a temporary file system.
CentOS series
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
Ubuntu or Debian series
lsinitramfs /boot/initrd.img-$(uname -r)|grep virtio
The preceding command output shows that the virtio driver is added to a temporary file system. You can skip Step 3, check whether the image meets the requirements, and then obtain the Linux image file.
If one of the
CONFIG_VIRTIO_BLK
orCONFIG_VIRTIO_NET
values is y and the other is m, check whether the virtio driver whose value is m is added to a temporary file system. For more information, see Step 3: Add the virtio driver to a temporary file system.
Step 3: Add the virtio driver to a temporary file system
If the operating system kernel of your source server supports the virtio driver but the virtio driver is not added to a temporary file system, add the driver to a temporary file system. Run one set of the following commands based on the operating system of your source server.
CentOS 6, Anolis OS 7, AlmaLinux 8, or Fedora 33
If the operating system version is CentOS 6, Anolis OS 7, AlmaLinux 8, Fedora 33, or later and the kernel version is later than 2.6.24, run the following commands to repair the temporary file system. You can run the uname -r
command to check the kernel version.
Run the following command to open the dracut.conf file:
vim /etc/dracut.conf
Press the I key to enter the Insert mode and add the following content to the file:
add_drivers+="virtio_blk virtio_net"
Press the Esc key, enter :wq, and then press the Enter key to save and close the file.
NoteIf one of the
CONFIG_VIRTIO_BLK
andCONFIG_VIRTIO_NET
values is y and the other is m, you need to only add the virtio driver whose value is m to the file. For example, if the value of theCONFIG_VIRTIO_NET
parameter is m, write onlyadd_drivers+="virtio_net"
to the file.Run the following command to regenerate initrd:
dracut -f
NoteAfter you run the command, you can run the
echo $?
command to check whether a value of 0 is returned. If so, initrd is regenerated as expected. You can also run thelsinitrd /boot/initramfs-$(uname -r).img | grep virtio
command to check whether the virtio driver is added to the temporary file system as expected.
Debian or Ubuntu
Run the following command to open the modules file:
vim /etc/initramfs-tools/modules
Press the I key to enter the Insert mode and add the following content to the file:
virtio_blk virtio_net
Press the Esc key, enter :wq, and then press the Enter key to save and close the file.
NoteIf one of the
CONFIG_VIRTIO_BLK
andCONFIG_VIRTIO_NET
values is y and the other is m, you need to only add the virtio driver whose value is m to the file. For example, if the value of theCONFIG_VIRTIO_NET
parameter is m, add onlyvirtio_net
to the file.Run the following command to regenerate initrd:
update-initramfs -u
NoteAfter you run the command, you can run the
echo $?
command to check whether a value of 0 is returned. If so, initrd is regenerated as expected. You can also run thelsinitramfs /boot/initrd.img-$(uname -r)|grep virtio
command to check whether the virtio driver is added to the temporary file system as expected.
SUSE or openSUSE
Versions earlier than SUSE 12 SP1 or openSUSE 13
Run the following command to open the kernel file:
vim /etc/sysconfig/kernel
Press the I key to enter the Insert mode and add the following content to the file:
INITRD_MODULES="virtio_blk virtio_net"
Press the Esc key, enter :wq, and then press the Enter key to save and close the file.
NoteIf one of the
CONFIG_VIRTIO_BLK
andCONFIG_VIRTIO_NET
values is y and the other is m, you need to only add the virtio driver whose value is m to the file. For example, if the value of theCONFIG_VIRTIO_NET
parameter is m, write onlyINITRD_MODULES="virtio_net"
to the file.Run the following command to regenerate initrd:
update-initramfs -u
SUSE 12 SP1, OpenSUSE 13, or later
Run the following command to open the dracut.conf file:
vim /etc/dracut.conf
Press the I key to enter the Insert mode and add the following content to the file:
add_drivers+="virtio_blk virtio_net"
Press the Esc key, enter :wq, and then press the Enter key to save and close the file.
NoteIf one of the
CONFIG_VIRTIO_BLK
andCONFIG_VIRTIO_NET
values is y and the other is m, you need to only add the virtio driver whose value is m to the file. For example, if the value of theCONFIG_VIRTIO_NET
parameter is m, write onlyadd_drivers+="virtio_net"
to the file.Run the following command to regenerate initrd:
dracut -f
After you run the command, you can run the echo $?
command to check whether a value of 0 is returned. If so, initrd is regenerated as expected. You can also run the
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
command to check whether the virtio driver is added to the temporary file system as expected.
Step 4: Install the virtio driver
For Red Hat and CentOS 5, we recommend upgrading the kernel version to 5.11 before you install the virtio driver.
Substep 1: Download the kernel installation package
In this example, the linux-4.4.24.tar.gz kernel installation package is used in the CentOS operating system. Modify the commands based on the kernel version of your operating system.
Run the following command to install the components required for kernel compilation:
yum install -y ncurses-devel gcc make wget
Run the following command to query the kernel version of your operating system. In this example, the kernel version is 4.4.24-2.al7.x86_64.
uname -r
Query the download URL of the kernel version repository on the Index of /pub/linux/kernel/ page.
In this example, the download URL of linux-4.4.24.tar.gz is
https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz
, as shown in the following figure.Run the following commands to download the installation package:
cd /usr/src/ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz
Run the following commands to decompress the installation package and create a symbolic link:
tar -xzf linux-4.4.24.tar.gz ln -s linux-4.4.24 linux cd /usr/src/linux
Substep 2: Compile the kernel
Run the following commands in sequence to compile the kernel:
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
NoteIf an error message appears when you run the make menuconfig command, troubleshoot the issue based on it. For example, if the ncurses-devel, bison, and flex components are not installed, run the following commands in sequence to install them:
yum install ncurses-devel yum install bison yum install flex
Complete virtio-related configurations on the following page.
NoteIf you select the configurations that contain asterisks (*), the virtio driver is compiled into the kernel. If you select configurations that contain m, the virtio driver is compiled into a module and the module is inserted into the kernel when the driver starts.
Configure the Virtualization options.
Press the spacebar key to select Virtualization, and then press the Enter key to view the options.
Check that the Kernel-based Virtual Machine (KVM) support option is selected.
Configure the Processor type and features options.
Go back to the main menu, press the up and down arrow keys to select Processor type and features, and then press the Enter key to view the options.
Press the spacebar key to select Paravirtualized guest support, and then press the Enter key to view the options.
Check that the KVM paravirtualized clock and KVM Guest support options are selected.
Configure the Device Drivers options.
Go back to the main menu, press the up and down arrow keys to select Device Drivers, and then press the Enter key to view the options.
Press the spacebar key to select Block devices, and then press the Enter key to view the options.
Check that the Virtio block driver option is selected.
Go back to the Device Drivers option list, press the up and down arrow keys to select Network device support, and then press the Enter key to view the options.
Check that the Virtio network driver option is selected.
Press the Esc key to exit the kernel configuration window and select Yes at the prompt to save the .config file.
Check whether the virtio-related configurations are complete.
For more information, see Step 1: Check whether the operating system kernel of your source server supports the virtio driver.
(Optional) If virtio-related configurations are incomplete, run the following commands in sequence to modify the .config file:
make oldconfig make prepare make scripts make make install
Run the following commands to check whether the virtio driver is installed:
find /lib/modules/"$(uname -r)"/ -name "virtio*" | grep -E "virtio*" grep -E "virtio*" < /lib/modules/"$(uname -r)"/modules.builtin
If the virtio driver is installed, one of the command outputs contains a list of virtio-related files, such as virtio_blk, virtio_pci, and virtio_console, as shown in the following figure.