Instale e carregue o driver virtio na sua imagem personalizada do Linux para que as instâncias ECS detectem dispositivos de armazenamento e rede virtualizados durante a inicialização.
Procedimento
O fluxograma a seguir ilustra como instalar o driver virtio em um sistema Linux:
Procedimento
Verificar se o kernel suporta virtio
-
Na máquina virtual onde você cria a imagem, execute o comando abaixo para verificar se o kernel suporta virtio:
grep -i virtio /boot/config-$(uname -r)Exemplo de saída:

-
Analise a saída.
Verifique os parâmetros
CONFIG_VIRTIO_BLKeCONFIG_VIRTIO_NET:Se os valores dos parâmetros forem y: O driver virtio está compilado no kernel e carrega automaticamente na inicialização. Nenhuma ação adicional é necessária.
Se os valores dos parâmetros forem m ou se um valor for y e o outro for m: O driver virtio existe como módulo do kernel. Adicionar o driver virtio ao sistema de arquivos temporário.
Se os parâmetros não aparecerem: O driver virtio não está instalado. Instalar manualmente o driver virtio.
Adicionar o driver virtio ao sistema de arquivos temporário
Caso o kernel tenha CONFIG_VIRTIO_BLK=m ou CONFIG_VIRTIO_NET=m, mas esses módulos não estejam no initramfs, o sistema pode falhar ao carregar o virtio na inicialização.
-
Se
CONFIG_VIRTIO_BLKouCONFIG_VIRTIO_NETfor m, execute um dos comandos a seguir para verificar se o driver virtio está no initramfs:Série CentOS
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
Série Debian
lsinitramfs /boot/initrd.img-$(uname -r)|grep virtio
Série SUSE
lsinitrd /boot/initrd-$(uname -r)|grep virtio
Caso a saída contenha
virtio_blk.koevirtio_net.ko, o driver virtio já está no initramfs. Nenhuma ação adicional é necessária.Se a saída não contiver
virtio_blk.koouvirtio_net.ko, ou contiver apenas um entrevirtio_blk.koevirtio_net.ko, prossiga para a próxima etapa.
-
Adicione o driver virtio ao initramfs.
Série CentOS
Aplicável ao CentOS 6, Anolis OS 7, AlmaLinux 8, Fedora 33 ou versões posteriores com kernel superior a 2.6.24 (execute
uname -rpara verificar).-
Abra o arquivo dracut.conf:
vim /etc/dracut.conf -
Pressione i para entrar no modo de inserção e adicione o seguinte conteúdo:
add_drivers+="virtio_blk virtio_net"Pressione Esc, digite :wq e pressione Enter para salvar e fechar o arquivo.
NotaSe um dos valores de
CONFIG_VIRTIO_BLKeCONFIG_VIRTIO_NETfor y e o outro for m, adicione ao arquivo apenas o driver virtio cujo valor seja m. Por exemplo, se o valor do parâmetroCONFIG_VIRTIO_NETfor m, escreva apenasadd_drivers+="virtio_net"no arquivo. -
Regenere o initrd:
dracut -fNotaExecute
echo $?para confirmar um valor de retorno igual a 0. Execute o comandolsinitrd /boot/initramfs-$(uname -r).img | grep virtiopara verificar se o virtio está presente no initramfs.
Série Debian
-
Abra o arquivo modules:
vim /etc/initramfs-tools/modules -
Pressione i para entrar no modo de inserção e adicione o seguinte conteúdo:
virtio_blk virtio_netPressione Esc, digite :wq e pressione Enter para salvar e fechar o arquivo.
NotaSe um dos valores de
CONFIG_VIRTIO_BLKeCONFIG_VIRTIO_NETfor y e o outro for m, adicione ao arquivo apenas o driver virtio cujo valor seja m. Por exemplo, se o valor do parâmetroCONFIG_VIRTIO_NETfor m, adicione apenasvirtio_netao arquivo. -
Regenere o initrd:
update-initramfs -uNotaExecute
echo $?para confirmar um valor de retorno igual a 0. Execute o comandolsinitramfs /boot/initrd.img-$(uname -r)|grep virtiopara verificar se o virtio está presente no initramfs.
Série SUSE
-
Versões anteriores ao SUSE 12 SP1 ou openSUSE 13
-
Abra o arquivo kernel:
vim /etc/sysconfig/kernel -
Pressione i para entrar no modo de inserção e adicione o seguinte conteúdo:
INITRD_MODULES="virtio_blk virtio_net"Pressione Esc, digite :wq e pressione Enter para salvar e fechar o arquivo.
NotaSe um dos valores de
CONFIG_VIRTIO_BLKeCONFIG_VIRTIO_NETfor y e o outro for m, adicione ao arquivo apenas o driver virtio cujo valor seja m. Por exemplo, se o valor do parâmetroCONFIG_VIRTIO_NETfor m, escreva apenasINITRD_MODULES="virtio_net"no arquivo. -
Regenere o initrd:
mkinitrd
-
-
SUSE 12 SP1, OpenSUSE 13 ou versões posteriores
-
Abra o arquivo dracut.conf:
vim /etc/dracut.conf -
Pressione i para entrar no modo de inserção e adicione o seguinte conteúdo:
add_drivers+="virtio_blk virtio_net"Pressione Esc, digite :wq e pressione Enter para salvar e fechar o arquivo.
NotaSe um dos valores de
CONFIG_VIRTIO_BLKeCONFIG_VIRTIO_NETfor y e o outro for m, adicione ao arquivo apenas o driver virtio cujo valor seja m. Por exemplo, se o valor do parâmetroCONFIG_VIRTIO_NETfor m, escreva apenasadd_drivers+="virtio_net"no arquivo. -
Regenere o initrd:
dracut -f
-
NotaExecute
echo $?para confirmar um valor de retorno igual a 0. Execute o comandolsinitrd /boot/initrd-$(uname -r)|grep virtiopara verificar se o virtio está presente no initramfs. -
Instalar manualmente o driver virtio
Etapa 1: Baixar o pacote de instalação do kernel
Neste exemplo, utiliza-se o pacote de instalação do kernel linux-4.4.24.tar.gz no CentOS. Ajuste os comandos conforme a versão do seu kernel.
-
Instale os componentes necessários para compilar o kernel:
yum install -y ncurses-devel gcc make wget -
Consulte a versão do kernel. Neste exemplo, a versão do kernel é 4.4.24-2.al7.x86_64.
uname -r
-
Acesse a página de lista de kernels Linux e localize a URL de download correspondente à versão do seu kernel.
Neste exemplo, a URL de download do arquivo linux-4.4.24.tar.gz é
https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz.
-
Baixe o pacote de instalação:
cd /usr/src/ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz -
Descompacte o pacote e crie um link simbólico:
tar -xzf linux-4.4.24.tar.gz ln -s linux-4.4.24 linux cd /usr/src/linux
Etapa 2: Compilar o kernel
-
Compile o 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 menuconfigNotaCaso o comando make menuconfig falhe, instale os componentes ausentes. Por exemplo:
yum install ncurses-devel yum install bison yum install flex -
Conclua as configurações relacionadas ao virtio na página a seguir:
NotaSelecionar configurações com asteriscos (*) compila o driver virtio diretamente no kernel. Selecionar m o compila como módulo.
-
Configure as opções de Virtualization.
Selecione Virtualization e pressione Enter.

Confirme se a opção Kernel-based Virtual Machine (KVM) support está selecionada.

-
Configure as opções Processor type and features.
Retorne ao menu principal, selecione Processor type and features e pressione Enter.
Selecione Paravirtualized guest support e pressione Enter.

Confirme se KVM paravirtualized clock e KVM Guest support estão selecionados.

-
Configure as opções Device Drivers.
Retorne ao menu principal, selecione Device Drivers e pressione Enter.
Selecione Block devices e pressione Enter.
Confirme se Virtio block driver está selecionado.

Volte para Device Drivers, selecione Network device support e pressione Enter.
Confirme se Virtio network driver está selecionado.

Pressione Esc para sair da janela de configuração do kernel. Selecione Yes para salvar o arquivo .config.
-
Verifique se as configurações relacionadas ao virtio estão completas.
Consulte Verificar se o kernel suporta virtio.
-
(Opcional) Se as configurações do virtio estiverem incompletas, modifique o arquivo .config:
make oldconfig make prepare make scripts make make install -
Verifique se o driver virtio está instalado:
find /lib/modules/"$(uname -r)"/ -name "virtio*" | grep -E "virtio*" grep -E "virtio*" < /lib/modules/"$(uname -r)"/modules.builtinSe o driver virtio estiver instalado, uma das saídas dos comandos listará arquivos relacionados ao virtio, como virtio_blk, virtio_pci e virtio_console.

-
Etapa 1: Verificar se o kernel do servidor suporta o driver virtio
-
Verifique se o kernel suporta virtio:
grep -i virtio /boot/config-$(uname -r)Exemplo de saída:

-
Analise a saída.
Verifique os parâmetros
CONFIG_VIRTIO_BLKeCONFIG_VIRTIO_NET:Se os valores dos parâmetros forem y: O driver virtio está compilado no kernel. Verifique se a imagem atende aos requisitos e obtenha o arquivo de imagem Linux.
Se os parâmetros não aparecerem: O driver virtio não está instalado. Instalar manualmente o driver virtio.
Se os valores dos parâmetros forem m ou se um valor for y e o outro for m: O driver virtio tem suporte. Etapa 2: Verificar se o driver virtio foi adicionado a um sistema de arquivos temporário.
Etapa 2: Verificar se o driver virtio foi adicionado a um sistema de arquivos temporário
Se CONFIG_VIRTIO_BLK ou CONFIG_VIRTIO_NET for m, execute um dos comandos a seguir para verificar se o driver virtio está no initramfs:
Série CentOS
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio

Série Ubuntu/Debian
lsinitramfs /boot/initrd.img-$(uname -r)|grep virtio

Caso a saída contenha entradas virtio, o driver virtio está no initramfs. Ignore as etapas restantes, verifique se a imagem atende aos requisitos e, em seguida, obtenha o arquivo de imagem Linux.
Se um entre
CONFIG_VIRTIO_BLKeCONFIG_VIRTIO_NETfor y e o outro for m, verifique se o driver com valor m está no initramfs. Consulte Etapa 3: Adicionar o driver virtio a um sistema de arquivos temporário.
Etapa 3: Adicionar o driver virtio a um sistema de arquivos temporário
Se o kernel suporta virtio, mas o driver não está no initramfs, adicione-o. Execute um dos conjuntos de comandos a seguir, de acordo com seu sistema operacional:
CentOS 6/Anolis OS 7/AlmaLinux 8/Fedora 33
Aplicável ao CentOS 6, Anolis OS 7, AlmaLinux 8, Fedora 33 ou versões posteriores com kernel superior a 2.6.24 (execute uname -r para verificar).
-
Abra o arquivo dracut.conf:
vim /etc/dracut.conf -
Pressione i para entrar no modo de inserção e adicione o seguinte conteúdo:
add_drivers+="virtio_blk virtio_net"Pressione Esc, digite :wq e pressione Enter para salvar e fechar o arquivo.
NotaSe um dos valores de
CONFIG_VIRTIO_BLKeCONFIG_VIRTIO_NETfor y e o outro for m, adicione ao arquivo apenas o driver virtio cujo valor seja m. Por exemplo, se o valor do parâmetroCONFIG_VIRTIO_NETfor m, escreva apenasadd_drivers+="virtio_net"no arquivo. -
Regenere o initrd:
dracut -fNotaExecute
echo $?para confirmar um valor de retorno igual a 0. Execute o comandolsinitrd /boot/initramfs-$(uname -r).img | grep virtiopara verificar se o virtio está presente no initramfs.
Série Debian/Ubuntu
-
Abra o arquivo modules:
vim /etc/initramfs-tools/modules -
Pressione i para entrar no modo de inserção e adicione o seguinte conteúdo:
virtio_blk virtio_netPressione Esc, digite :wq e pressione Enter para salvar e fechar o arquivo.
NotaSe um dos valores de
CONFIG_VIRTIO_BLKeCONFIG_VIRTIO_NETfor y e o outro for m, adicione ao arquivo apenas o driver virtio cujo valor seja m. Por exemplo, se o valor do parâmetroCONFIG_VIRTIO_NETfor m, adicione apenasvirtio_netao arquivo. -
Regenere o initrd:
update-initramfs -uNotaExecute
echo $?para confirmar um valor de retorno igual a 0. Execute o comandolsinitramfs /boot/initrd.img-$(uname -r)|grep virtiopara verificar se o virtio está presente no initramfs.
Série SUSE/OpenSUSE
-
Versões anteriores ao SUSE 12 SP1 ou openSUSE 13
-
Abra o arquivo kernel:
vim /etc/sysconfig/kernel -
Pressione i para entrar no modo de inserção e adicione o seguinte conteúdo:
INITRD_MODULES="virtio_blk virtio_net"Pressione Esc, digite :wq e pressione Enter para salvar e fechar o arquivo.
NotaSe um dos valores de
CONFIG_VIRTIO_BLKeCONFIG_VIRTIO_NETfor y e o outro for m, adicione ao arquivo apenas o driver virtio cujo valor seja m. Por exemplo, se o valor do parâmetroCONFIG_VIRTIO_NETfor m, escreva apenasINITRD_MODULES="virtio_net"no arquivo. -
Regenere o initrd:
update-initramfs -u
-
-
SUSE 12 SP1, OpenSUSE 13 ou versões posteriores
-
Abra o arquivo dracut.conf:
vim /etc/dracut.conf -
Pressione i para entrar no modo de inserção e adicione o seguinte conteúdo:
add_drivers+="virtio_blk virtio_net"Pressione Esc, digite :wq e pressione Enter para salvar e fechar o arquivo.
NotaSe um dos valores de
CONFIG_VIRTIO_BLKeCONFIG_VIRTIO_NETfor y e o outro for m, adicione ao arquivo apenas o driver virtio cujo valor seja m. Por exemplo, se o valor do parâmetroCONFIG_VIRTIO_NETfor m, escreva apenasadd_drivers+="virtio_net"no arquivo. -
Regenere o initrd:
dracut -f
-
Execute echo $? para confirmar um valor de retorno igual a 0. Execute o comando
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio para verificar se o virtio está presente no initramfs.
Etapa 4: Instalar o driver virtio
Para Red Hat e CentOS 5, atualize o kernel para a versão 5,11 antes de instalar o driver virtio.
Etapa 1: Baixar o pacote de instalação do kernel
Neste exemplo, utiliza-se o pacote de instalação do kernel linux-4.4.24.tar.gz no CentOS. Ajuste os comandos conforme a versão do seu kernel.
-
Instale os componentes necessários para compilar o kernel:
yum install -y ncurses-devel gcc make wget -
Consulte a versão do kernel. Neste exemplo, a versão do kernel é 4.4.24-2.al7.x86_64.
uname -r
-
Acesse a página de lista de kernels Linux e localize a URL de download correspondente à versão do seu kernel.
Neste exemplo, a URL de download do arquivo linux-4.4.24.tar.gz é
https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz.
-
Baixe o pacote de instalação:
cd /usr/src/ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz -
Descompacte o pacote e crie um link simbólico:
tar -xzf linux-4.4.24.tar.gz ln -s linux-4.4.24 linux cd /usr/src/linux
Etapa 2: Compilar o kernel
-
Compile o 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 menuconfigNotaCaso o comando make menuconfig falhe, instale os componentes ausentes. Por exemplo:
yum install ncurses-devel yum install bison yum install flex -
Conclua as configurações relacionadas ao virtio na página a seguir:
NotaAo selecionar configurações com asteriscos (*), o driver virtio é compilado diretamente no kernel. Ao selecionar configurações com m, o driver virtio é compilado como módulo.
-
Configure as opções de Virtualization.
Selecione Virtualization e pressione Enter.

Confirme se a opção Kernel-based Virtual Machine (KVM) support está selecionada.

-
Configure as opções Processor type and features.
Retorne ao menu principal, selecione Processor type and features e pressione Enter.
Selecione Paravirtualized guest support e pressione Enter.

Confirme se KVM paravirtualized clock e KVM Guest support estão selecionados.

-
Configure as opções Device Drivers.
Retorne ao menu principal, selecione Device Drivers e pressione Enter.
Selecione Block devices e pressione Enter.
Confirme se Virtio block driver está selecionado.

Volte para Device Drivers, selecione Network device support e pressione Enter.
Confirme se Virtio network driver está selecionado.

Pressione Esc para sair da janela de configuração do kernel. Selecione Yes para salvar o arquivo .config.
-
Verifique se as configurações relacionadas ao virtio estão completas.
-
(Opcional) Se as configurações do virtio estiverem incompletas, modifique o arquivo .config:
make oldconfig make prepare make scripts make make install -
Verifique se o driver virtio está instalado:
find /lib/modules/"$(uname -r)"/ -name "virtio*" | grep -E "virtio*" grep -E "virtio*" < /lib/modules/"$(uname -r)"/modules.builtinSe o driver virtio estiver instalado, uma das saídas dos comandos listará arquivos relacionados ao virtio, como virtio_blk, virtio_pci e virtio_console.

-