カスタム Linux イメージに virtio ドライバーをインストールしてロードし、Elastic Compute Service (ECS) インスタンスが起動時に仮想ストレージとネットワークデバイスを検出できるようにします。
手順
次のフローチャートは、Linux システムに virtio ドライバーをインストールする方法を示しています:
手順
カーネルが virtio をサポートしているかどうかの確認
-
イメージを作成する仮想マシンで、次のコマンドを実行して、カーネルが virtio をサポートしているかどうかを確認します:
grep -i virtio /boot/config-$(uname -r)出力例:

-
出力を分析します。
CONFIG_VIRTIO_BLKおよびCONFIG_VIRTIO_NETパラメーターを確認します:-
パラメーター値が [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 の場合、次のいずれかのコマンドを実行して、virtio ドライバーが initramfs に含まれているかどうかを確認します: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 ドライバーはすでに initramfs に含まれています。追加の操作は不要です。 -
出力に
virtio_blk.koまたはvirtio_net.koが含まれていない場合、またはvirtio_blk.koとvirtio_net.koのいずれか一方のみが含まれている場合は、次の手順に進みます。
-
-
virtio ドライバーを initramfs に追加します。
CentOS 系
CentOS 6、Anolis OS 7、AlmaLinux 8、Fedora 33 以降で、カーネルバージョンが 2.6.24 より後のものに適用されます (
uname -rを実行して確認)。-
dracut.conf ファイルを開きます:
vim /etc/dracut.conf -
i を押して挿入モードに入り、次の内容を追加します:
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 であることを確認します。次に、lsinitrd /boot/initramfs-$(uname -r).img | grep virtioコマンドを実行し、virtio が initramfs に含まれていることを確認します。
Debian 系
-
modules ファイルを開きます:
vim /etc/initramfs-tools/modules -
i を押して挿入モードに入り、次の内容を追加します:
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 であることを確認します。次に、lsinitramfs /boot/initrd.img-$(uname -r) | grep virtioコマンドを実行し、virtio が initramfs に含まれていることを確認します。
SUSE 系
-
SUSE 12 SP1 より前、または openSUSE 13 より前のバージョン
-
kernel ファイルを開きます:
vim /etc/sysconfig/kernel -
i を押して挿入モードに入り、次の内容を追加します:
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.conf -
i を押して挿入モードに入り、次の内容を追加します:
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 であることを確認します。次に、lsinitrd /boot/initrd-$(uname -r) | grep virtioコマンドを実行し、virtio が initramfs に含まれていることを確認します。 -
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 kernel list page にアクセスし、カーネルバージョンに対応するダウンロード 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 コマンドが失敗する場合は、不足しているコンポーネントをインストールします。例:
yum install ncurses-devel yum install bison yum install flex -
表示される画面で virtio 関連の設定を完了します:
説明アスタリスク (*) 付きの設定を選択すると、virtio ドライバーはカーネルに組み込まれます。m を選択すると、モジュールとしてコンパイルされます。
-
Virtualization オプションを設定します。
-
[仮想化] を選択し、Enter を押します。

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

-
-
Processor type and features オプションを設定します。
-
メインメニューに戻り、[プロセッサタイプと機能] を選択し、[Enter] キーを押します。
-
[準仮想化ゲストサポート] を選択し、[Enter] を押します。

-
[KVM 準仮想化クロック] と [KVM ゲストサポート] が選択されていることを確認します。

-
-
Device Drivers オプションを設定します。
-
メインメニューに戻り、[デバイスドライバー] を選択し、Enter を押します。
-
[ブロックデバイス] を選択し、Enter を押します。
-
[Virtio ブロックドライバー] が選択されていることを確認してください。

-
[デバイスドライバー] に戻り、[ネットワークデバイスサポート] を選択して、Enter キーを押します。
-
[Virtio ネットワークドライバー] が選択されていることを確認します。

-
-
Esc を押してカーネル設定ウィンドウを終了し、[はい] を選択して .config ファイルを保存します。
-
virtio 関連の設定が完了しているかどうかを確認します。
詳細については、「カーネルが 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.builtinvirtio ドライバーがインストールされている場合、いずれかのコマンド出力に virtio_blk、virtio_pci、virtio_console などの virtio 関連ファイルが表示されます。

-