virtio ドライバーは、仮想化環境に必要な高性能 I/O ドライバーです。カスタム Linux イメージが Alibaba Cloud で正常に起動できるようにするには、virtio ドライバーをインストールし、一時ファイルシステムに含める必要があります。そうしないと、イメージから作成された Elastic Compute Service (ECS) インスタンスは、仮想化ストレージおよびネットワークデバイスを検出できないため、起動に失敗する可能性があります。このトピックでは、Linux に virtio ドライバーをインストールする方法について説明します。
操作フロー
Linux システムに virtio ドライバーをインストールするための操作フローは次のとおりです。
手順
システムカーネルが virtio ドライバーをサポートしているかどうかの確認
イメージを作成している仮想マシンで、次のコマンドを実行して、現在のシステムカーネルが virtio ドライバーをサポートしているかどうかを確認します。これにより、カスタムイメージに virtio ドライバーをインストールするか、ドライバーを一時ファイルシステムに追加するかを判断できます。
grep -i virtio /boot/config-$(uname -r)次のコマンド出力が返されます。

コマンド出力を分析します。
コマンド出力の
CONFIG_VIRTIO_BLK(virtio ブロックデバイスドライバー) とCONFIG_VIRTIO_NET(virtio ネットワークデバイスドライバー) パラメーターを確認します。パラメーター値が y の場合: システムに virtio ドライバーが正しくインストールされており、ドライバーはカーネルにコンパイルされています。ドライバーは起動時に自動的にロードされます。このトピックの以降の手順を続行する必要はありません。
パラメーター値が m、または一方のパラメーター値が y でもう一方が m の場合: virtio ドライバーはカーネルモジュールとして存在します。virtio ドライバーを一時ファイルシステムに追加するだけで済みます。
パラメーターが表示されない場合: システムに virtio ドライバーがインストールされていません。virtio ドライバーを手動でインストールする必要があります。
virtio ドライバーを一時ファイルシステムに追加する
カーネルで CONFIG_VIRTIO_BLK=m または CONFIG_VIRTIO_NET=m が有効になっているが、これらのモジュールが一時ファイルシステム (initramfs) に追加されていない場合、システムは起動時に virtio ドライバーのロードに失敗し、仮想マシンがそれらを検出できなくなる可能性があります。
CONFIG_VIRTIO_BLKおよびCONFIG_VIRTIO_NETパラメーターの値が m、または一方のパラメーター値が y でもう一方が m の場合は、次のいずれかのコマンドを実行して、virtio ドライバーが一時ファイルシステムに追加されているかどうかを確認します。CentOS シリーズ
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
Debian シリーズ
lsinitramfs /boot/initrd.img-$(uname -r)|grep virtio
SUSE シリーズ
lsinitrd /boot/initrd-$(uname -r)|grep virtio
上の図に示すように、出力に
virtio_blk.koとvirtio_net.koの情報が含まれている場合、virtio ドライバーはすでに一時ファイルシステムに追加されています。このトピックの以降の手順を続行する必要はありません。出力に
virtio_blk.koとvirtio_net.koの情報が含まれていない場合、またはvirtio_blk.koとvirtio_net.koのいずれか一方しか含まれていない場合は、次のステップに進んで virtio ドライバーを一時ファイルシステムに追加する必要があります。
virtio ドライバーを一時ファイルシステムに追加します。
CentOS シリーズ
オペレーティングシステムのバージョンが CentOS 6、Anolis OS 7、AlmaLinux 8、Fedora 33 以降で、カーネルのバージョンが 2.6.24 より新しい場合 (カーネルのバージョンは
uname -rコマンドを実行して確認できます)、次の操作を実行して virtio ドライバーを一時ファイルシステムに追加します。次のコマンドを実行して dracut.conf ファイルを開きます。
vim /etc/dracut.confi キーを押して挿入モードに入り、次の内容をファイルに追加します。
add_drivers+="virtio_blk virtio_net"Esc キーを押し、:wq と入力してから Enter キーを押して、ファイルを保存して閉じます。
説明CONFIG_VIRTIO_BLKとCONFIG_VIRTIO_NETの値の一方が y でもう一方が m の場合は、値が m の virtio ドライバーのみをファイルに追加する必要があります。たとえば、CONFIG_VIRTIO_NETパラメーターの値が m の場合は、ファイルにadd_drivers+="virtio_net"のみを記述します。次のコマンドを実行して initrd を再生成します。
dracut -f説明コマンドを実行した後、
echo $?コマンドを実行して値 0 が返されるかどうかを確認できます。返された場合、initrd は期待どおりに再生成されます。また、lsinitrd /boot/initramfs-$(uname -r).img | grep virtioコマンドを実行して、virtio ドライバーが期待どおりに一時ファイルシステムに追加されたかどうかを確認することもできます。
Debian シリーズ
次のコマンドを実行して modules ファイルを開きます。
vim /etc/initramfs-tools/modulesi キーを押して挿入モードに入り、次の内容をファイルに追加します。
virtio_blk virtio_netEsc キーを押し、:wq と入力してから Enter キーを押して、ファイルを保存して閉じます。
説明CONFIG_VIRTIO_BLKとCONFIG_VIRTIO_NETの値の一方が y でもう一方が m の場合は、値が m の virtio ドライバーのみをファイルに追加する必要があります。たとえば、CONFIG_VIRTIO_NETパラメーターの値が m の場合は、ファイルにvirtio_netのみを追加します。次のコマンドを実行して initrd を再生成します。
update-initramfs -u説明コマンドを実行した後、
echo $?コマンドを実行して値 0 が返されるかどうかを確認できます。返された場合、initrd は期待どおりに再生成されます。また、lsinitramfs /boot/initrd.img-$(uname -r)|grep virtioコマンドを実行して、virtio ドライバーが期待どおりに一時ファイルシステムに追加されたかどうかを確認することもできます。
SUSE シリーズ
SUSE 12 SP1 または openSUSE 13 より前のバージョン
kernel ファイルを開きます。
vim /etc/sysconfig/kerneli キーを押して挿入モードに入り、次の内容をファイルに追加します。
INITRD_MODULES="virtio_blk virtio_net"Esc キーを押し、:wq と入力してから Enter キーを押して、ファイルを保存して閉じます。
説明CONFIG_VIRTIO_BLKとCONFIG_VIRTIO_NETの値の一方が y でもう一方が m の場合は、値が m の virtio ドライバーのみをファイルに追加する必要があります。たとえば、CONFIG_VIRTIO_NETパラメーターの値が m の場合は、ファイルにINITRD_MODULES="virtio_net"のみを記述します。initrd を再生成します。
mkinitrd
SUSE 12 SP1、OpenSUSE 13、またはそれ以降
dracut.conf ファイルを開きます。
vim /etc/dracut.confi キーを押して挿入モードに入り、次の内容をファイルに追加します。
add_drivers+="virtio_blk virtio_net"Esc キーを押し、:wq と入力してから Enter キーを押して、ファイルを保存して閉じます。
説明CONFIG_VIRTIO_BLKとCONFIG_VIRTIO_NETの値の一方が y でもう一方が m の場合は、値が m の virtio ドライバーのみをファイルに追加する必要があります。たとえば、CONFIG_VIRTIO_NETパラメーターの値が m の場合は、ファイルにadd_drivers+="virtio_net"のみを記述します。initrd を再生成します。
dracut -f
説明コマンドを実行した後、
echo $?コマンドを実行して値 0 が返されるかどうかを確認できます。返された場合、initrd は期待どおりに再生成されます。また、lsinitrd /boot/initrd-$(uname -r)|grep virtioコマンドを実行して、virtio ドライバーが期待どおりに一時ファイルシステムに追加されたかどうかを確認することもできます。
virtio ドライバーの手動インストール
ステップ 1: カーネルインストールパッケージのダウンロード
この例では、CentOS オペレーティングシステムで linux-4.4.24.tar.gz カーネルインストールパッケージを使用します。お使いのオペレーティングシステムのカーネルバージョンに基づいてコマンドを修正してください。
カーネルのコンパイルに必要なコンポーネントをインストールします。
yum install -y ncurses-devel gcc make wgetお使いのオペレーティングシステムのカーネルバージョンをクエリします。この例では、カーネルバージョンは 4.4.24-2.al7.x86_64 です。
uname -r
Linux カーネルリストページに移動して、対応するカーネルバージョンのソースコードのダウンロード URL を見つけます。
この例では、linux-4.4.24.tar.gz のダウンロード URL は
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: カーネルのコンパイル
次のコマンドを順番に実行してカーネルをコンパイルします。
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 コマンドの実行時にエラーメッセージが表示された場合は、それに基づいて問題をトラブルシューティングします。たとえば、ncurses-devel、bison、flex コンポーネントがインストールされていない場合は、次のコマンドを順番に実行してコンポーネントをインストールできます。
yum install ncurses-devel yum install bison yum install flex次のページで virtio 関連の構成を完了します。
説明アスタリスク (*) を含む構成を選択した場合、virtio ドライバーはカーネルにコンパイルされます。m を含む構成を選択した場合、virtio ドライバーはモジュールにコンパイルされます。
Virtualization オプションを構成します。
スペースバーキーを押して [Virtualization] を選択し、Enter キーを押してオプションを表示します。

Kernel-based Virtual Machine (KVM) サポートオプションが選択されていることを確認します。

Processor type and features オプションを構成します。
メインメニューに戻り、上下の矢印キーを押して [Processor Type And Features] を選択し、Enter キーを押してオプションを表示します。
スペースバーキーを押して [Paravirtualized Guest Support] を選択し、Enter キーを押してオプションを表示します。

[KVM Paravirtualized Clock] と [KVM Guest Support] オプションが選択されていることを確認します。

Device Drivers オプションを構成します。
メインメニューに戻り、上下の矢印キーを押して [Device Drivers] を選択し、Enter キーを押してオプションを表示します。
スペースバーキーを押して [Block Devices] を選択し、Enter キーを押してオプションを表示します。
[Virtio Block Driver] オプションが選択されていることを確認します。

[Device Drivers] オプションリストに戻り、上下の矢印キーを押して [Network Device Support] を選択し、Enter キーを押してオプションを表示します。
[Virtio Network Driver] オプションが選択されていることを確認します。

Esc キーを押してカーネル構成ウィンドウを終了し、プロンプトで [Yes] を選択して .config ファイルを保存します。
virtio 関連の構成が完了したかどうかを確認します。
詳細については、「システムカーネルが virtio ドライバーをサポートしているかどうかの確認」をご参照ください。
(オプション) virtio 関連の構成が不完全な場合は、次のコマンドを順番に実行して .config ファイルを修正します。
make oldconfig make prepare make scripts make make installvirtio ドライバーがインストールされているかどうかを確認します。
find /lib/modules/"$(uname -r)"/ -name "virtio*" | grep -E "virtio*" grep -E "virtio*" < /lib/modules/"$(uname -r)"/modules.builtinvirtio ドライバーがインストールされている場合、コマンド出力のいずれかに、次の図に示すように、virtio_blk、virtio_pci、virtio_console などの virtio 関連ファイルのリストが含まれます。
