tencent cloud

LinuxシステムにおけるVirtioドライバのチェック
最終更新日:2023-05-10 17:07:04
LinuxシステムにおけるVirtioドライバのチェック
最終更新日: 2023-05-10 17:07:04

概要

CVMシステムカーネルは、Tencent Cloud上で正常に動作するために、Virtioドライバー(ブロックデバイスドライバーvirtio_blkとNICドライバーvirtio_netを含む)をサポートする必要があります。カスタムイメージで作成されたCVMインスタンスが起動しない不具合を未然に防ぐには、イメージをインポートする前に、イメージがソースサーバーでVirtioドライバーをサポートしているかどうかを確認してください。このドキュメントでは、CentOSを例に、イメージをインポートする前に、イメージがVirtioドライバーをサポートしているかどうかを確認する方法を説明します。

操作手順

ステップ1:カーネルがVirtioドライバーをサポートしているかどうかの確認

次のコマンドを実行して、現在カーネルがVirtioドライバーをサポートしているかどうかを確認します。
grep -i virtio /boot/config-$(uname -r)
以下のような結果が返されます:


返された結果にパラメータCONFIG_VIRTIO_BLKとパラメータCONFIG_VIRTIO_NETの値がmである場合、ステップ2 を実行してください。
返された結果にパラメータCONFIG_VIRTIO_BLKとパラメータCONFIG_VIRTIO_NETの値がyである場合、このOSにVirtioドライバーが含まれていることを示し、カスタムイメージをTencent Cloudに直接インポートすることができます。操作の詳細については イメージのインポートの概要 をご参照ください。
返された結果にパラメータCONFIG_VIRTIO_BLKとパラメータCONFIG_VIRTIO_NETの情報がない場合、このOSのイメージをTencent Cloudにインポートできないことを意味します。カーネルをダウンロードしてコンパイル してください。

ステップ2:一時ファイルシステムにVirtioドライバーが含まれているかどうかの確認

ステップ1 でパラメーターの値がmである場合、さらに一時ファイルシステムinitramfsまたはinitrdにvirtioドライバーが含まれているかどうかを確認する必要があります。OSによって、対応するコマンドを実行してください。
CentOS 6/CentOS 7/CentOS 8/RedHat 6/RedHat 7の場合:
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
RedHat 5/CentOS 5の場合:
mkdir -p /tmp/initrd && cd /tmp/initrd
zcat /boot/initrd-$(uname -r).img | cpio -idmv
find . -name "virtio*"
Debian/Ubuntu の場合:
lsinitramfs /boot/initrd.img-$(uname -r) | grep virtio
以下のような結果が返されます:

つまり、Initramfsには、virtio_blkドライバーと、それに依存するvirtio.kovirtio_pci.koおよびvirtio_ring.koが含まれていることが分かり、カスタムイメージをTencent Cloudに直接インポートすることができます。操作の詳細については、イメージのインポートの概要 をご参照ください。 Initramfsまたはinitrdvirtioドライバーが含まれていない場合、ステップ3 を実行してください。

ステップ3:一時ファイルシステムの再構成

ステップ2 で一時ファイルシステムinitramfsまたはinitrdvirtioドライバーが含まれていないことが判明した場合は、一時ファイルシステムinitramfsまたはinitrdを再構成してvirtioドライバーを含むようにする必要があります。OSによって、対応する操作を選択してください。
CentOS 8/RedHat 8 の場合:
mkinitrd -f --allow-missing --with=virtio_blk --preload=virtio_blk --with=virtio_net --preload=virtio_net --with=virtio_console --preload=virtio_console /boot/initramfs-$(uname -r).img $(uname -r)
CentOS 6/CentOS 7/RedHat 6/RedHat 7の場合:
cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
mkinitrd -f --with=virtio_blk --with=virtio_pci /boot/initramfs-$(uname -r).img $(uname -r)
RedHat 5/CentOS 5の場合:
cp /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).img.bak
mkinitrd -f --with=virtio_blk --with=virtio_pci /boot/initrd-$(uname -r).img $(uname -r)
Debian/Ubuntu の場合:
echo -e "virtio_pci\\nvirtio_blk" >> /etc/initramfs-tools/modules
update-initramfs -u

付録

カーネルのダウンロードとコンパイル

カーネルのインストールパッケージのダウンロード

1. 次のコマンドを実行して、カーネルのコンパイルに必要なコンポーネントをインストールします。
yum install -y ncurses-devel gcc make wget
2. 次のコマンドを実行して、現在システムで使用されているカーネルバージョンを確認します。
uname -r
以下のような結果が返され、現在システムで使用されているカーネルバージョンが2.6.32-642.6.2.el 6.x 86_64であることを示します。


3. Linuxカーネルのダウンロードページ に進み、対応するカーネルバージョンのソースコードをダウンロードします。 例えば、2.6.32-642.6.2.el 6.x 86_64バージョンのカーネルは、linux-2.6.32.tar.gzのインストールパッケージをダウンロードし、そのダウンロードパスはhttps://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.gzです。
4. 次のコマンドを実行して、ディレクトリを切り替えます。
cd /usr/src/
5. 次のコマンドを実行して、インストールパッケージをダウンロードします。
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.gz
6. 次のコマンドを実行して、インストールパッケージを解凍します。
tar -xzf linux-2.6.32.tar.gz
7. 次のコマンドを実行して、接続を確立します。
ln -s linux-2.6.32 linux
8. 次のコマンドを実行して、ディレクトリを切り替えます。
cd /usr/src/linux

カーネルのコンパイル

1. 次のコマンドを順次実行して、カーネルをコンパイルします。
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
「Linux Kernel vX.X.XX Configuration」画面に入ります。以下の通りです。

「Linux Kernel vX.X.XX Configuration」画面が表示されない場合は、
説明:
「Linux Kernel vX.X.XX Configuration」画面が表示されない場合は、ステップ18を実行してください。 「Linux Kernel vX.X.XX Configuration」画面に入ります。
「Tab」または「↑」、「↓」方向キーを押してカーソルを移動します。
「Enter」キーを押して、カーソルで選択された項目を選択または実行します。
スペースキーを押して、カーソルで選択された項目を選択し、「*」はカーネルにコンパイルすることを表し、「M」はモジュールとしてコンパイルすることを表します。
2. 「↓」キーを押してカーソルを「Virtualization」に移動し、スペースキーを押して「Virtualization」を選択します。
3. 「Enter」を押してVirtualization詳細画面に入ります。
4. Virtualization詳細画面では、Kernel-based Virtual Machine(KVM)supportオプションがチェックされているかどうかを確認します。以下の通りです。

チェックされていない場合は、スペースキーを押して「Kernel-based Virtual Machine(KVM)support」オプションにチェックを入れてください。
5. 「Esc」を押して「Linux Kernel vX.X.XX Configuration」主画面に戻ります。
6. 「↓」キーを押してカーソルを「Processor type and features」に移動し、「Enter」キーを押してProcessor type and features詳細画面に入ります。
7. 「↓」キーを押してカーソルを「Paravirtualized guest support」に移動し、「Enter」キーを押してParavirtualized guest support詳細画面に入ります。
8. Paravirtualized guest support詳細画面では、「KVM paravirtualized clock」と「KVM Guest support」がチェックされているかどうかを確認します。以下の通りです。

チェックされていない場合は、スペースキーを押して「KVM paravirtualized clock」と「KVM Guest support」オプションにチェックを入れてください。
9. 「Esc」を押して「Linux Kernel vX.X.XX Configuration」主画面に戻ります。
10. 「↓」キーを押してカーソルを「Device Drivers」に移動し、「Enter」キーを押してDevice Drivers詳細画面に入ります。
11. 「↓」キーを押してカーソルを「Block devices」に移動し、「Enter」キーを押してBlock devices詳細画面に入ります。
12. Block devices詳細画面では、「Virtio block driver(EXPERIMENTAL)」がチェックされているかどうかを確認します。以下の通りです。

チェックされていない場合は、スペースキーを押して「Virtio block driver(EXPERIMENTAL)」オプションにチェックを入れてください。
13. 「Esc」を押してDevice Drivers詳細画面に戻ります。
14. 「↓」キーを押してカーソルを「Network device support」に移動し、「Enter」キーを押してNetwork device support詳細画面に入ります。
15. Network device support詳細画面では、「Virtio network driver(EXPERIMENTAL)」がチェックされているかどうかを確認します。以下の通りです。

チェックされていない場合は、スペースキーを押して「Virtio network driver(EXPERIMENTAL)」オプションにチェックを入れてください。
16. 「Esc」キーを押してカーネル設定画面を終了し、「YES」を選択して.configファイルを保存します。
17. ステップ1:カーネルがVirtioドライバーをサポートしているかどうかの確認をご参照し、Virtioドライバーが正しく設定されているかどうかを検証します。
18.
オプション
)次のコマンドを実行し、.configファイルを手動で編集します。
説明:
次のいずれかの条件を満たしている場合は、次の操作を実行することをお勧めします。
チェック後、カーネルにはVirtioドライバーに関する設定情報がないことが発見された場合。
カーネルをコンパイルする際に、カーネル設定画面に入ることができないか、.configファイルが保存されていない場合。
make oldconfig
make prepare
make scripts
make
make install
19. 次のコマンドを順次実行して、Virtioドライバーのインストール状況を確認します。
find /lib/modules/"$(uname -r)"/ -name "virtio.*" | grep -E "virtio.*"
grep -E "virtio.*" < /lib/modules/"$(uname -r)"/modules.builtin
任意のコマンドの戻り結果がvirtio_blkvirtio_pci.virtio_consoleなどのファイルリストを出力した場合、Virtioドライバーが正しくインストールされていることを示します。
この記事はお役に立ちましたか?
営業担当者に お問い合わせ いただくか チケットを提出 してサポートを求めることができます。
はい
いいえ

フィードバック