ここでは、インポート前にソースサーバーにインストールするためにどのイメージが virtio ドライバを必要とするかについて詳しく説明します。
手動インストールが不要なイメージ
カスタムイメージをインポートした後で、イメージのオペレーティングシステムが以下の場合は、Alibaba Cloud は自動的に virtio ドライバを処理します。
- Windows Server 2008
- Windows Server 2012
- Windows Server 2016
- CentOS 6/7
- Ubuntu 12/14/16
- Debian 7/8/9
- SUSE 11/12
initramfs または initrd の一時ルートファイルシステムの回復を省略することができます。
手動インストールが必要なイメージ
上記のリストに含まれていない Linux イメージの場合は、イメージをインポートする前に、オンプレミスで virtio ドライバーをインストールする必要があります。
サーバー上の virtio ドライバーの可用性の確認- virtio ドライバーがすでにサーバーのカーネルに組み込まれているかどうかを調べるため、
grep -i virtio /boot/config-$(uname -r)
を実行します。注- 出力に VIRTIO_BLK と VIRTIO_NET が存在しない場合、virtio ドライバーはカーネルに組み込まれていません。 virtio ドライバーをコンパイルしてインストールするためには、virtio ドライバーをサーバーにインストールして設定する必要があります。
- パラメータ CONFIG_VIRTIO_BLK と CONFIG_VIRTIO_NET の値が y の場合は virtio ドライバーはすでにカーネルに組み込まれています。 詳細については、「イメージのインポートに関する注意事項」と「カスタムイメージのインポート」をご参照ください。
- パラメータ CONFIG_VIRTIO_BLK と CONFIG_VIRTIO_NET の値が m の場合は、手順 2 に進みます。
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
を実行し、virtio ドライバーが initramfs または initrd の一時ルートファイルシステムでコンパイルされていることを確認します。注- 上の図によると、依存関係にある virtio.ko、virtio_pci.ko および virtio_ring.ko を含む virtio_blk ドライバーは、一時ルートファイルシステム initramfs にコンパイルされています。 詳細については、「イメージのインポートに関する注意事項」と「カスタムイメージのインポート」をご参照ください。
- virtio ドライバーが initramfs にない場合は、イメージのインポートまたは移行の前に initramfs または initrd の一時ルートファイルシステムを回復する必要があります。
virtio ドライバーがカーネルによってサポートされているが、一時ルートファイルシステムにコンパイルされていない場合は、一時ルートファイルシステムを回復する必要があります。 ここでは CentOS を使用しています。
- CentOS/RedHat 5
mkinitrd -f --allow-missing \ --with=xen-vbd --preload=xen-vbd \ --with=xen-platform-pci --preload=xen-platform-pci \ --with=virtio_blk --preload=virtio_blk \ --with=virtio_pci --preload=virtio_pci \ --with=virtio_console --preload=virtio_console \
- CentOS/RedHat 6/7
mkinitrd -f --allow-missing \ --with=xen-blkfront --preload=xen-blkfront \ --with=virtio_blk --preload=virtio_blk \ --with=virtio_pci --preload=virtio_pci \ --with=virtio_console --preload=virtio_console \ /boot/initramfs-$(uname -r).img $(uname -r)
- Debian/Ubuntu
echo -e 'xen-blkfront\nvirtio_blk\nvirtio_pci\nvirtio_console' >> \ /etc/initramfs-tools/modules mkinitramfs -o /boot/initrd.img-$(uname -r)"
virtio ドライバーのコンパイルとインストール
ここでは Red Hat サーバーを使用しています。
カーネルパッケージのダウンロードyum install -y ncurses-devel gcc make wget
を実行し、カーネルのコンパイルに必要なコンポーネントをインストールします。uname -r
を実行し、4.4.24-2.a17.x86_64 など、サーバーのカーネルバージョンを照会します。- 「公開されている Linux カーネルアーカイブ」にアクセスし、カーネルのソースコードをダウンロードします。たとえば、4.4.24 で始まるカーネルバージョンのダウンロードリンクは 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
を実行し、ディレクトリを変更します。
- 以下のコマンドを実行してドライバーをカーネルにコンパイルします。
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
- 以下のウィンドウで virtio ドライバーの対応する設定を構成します。
注 [*] を選択してカーネルにドライバーを組み込み、[m] を選択してモジュールとしてコンパイルします。
- スペースバーを押して仮想化を選択します。
KVM (カーネルベースの仮想マシン) のオプションが選択されていることを確認します。
Processor type and features ---> [*] Paravirtualized guest support ---> --- Paravirtualized guest support (128) Maximum allowed size of a domain in gigabytes [*] KVM paravirtualized clock [*] KVM Guest support
Device Drivers ---> [*] Block devices ---> <M> Virtio block driver (EXPERIMENTAL) -*- Network device support ---> <M> Virtio network driver (EXPERIMENTAL)
- Esc キーを押してカーネル設定ウィンドウを閉じ、ダイアログボックスに従って変更をファイル .config に保存します。
- 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.builtin
注 いずれかの出力に virtio_blk と virtio_pci.virtio_console が含まれている場合は、サーバーに virtio ドライバーが正しくインストールされています。
- スペースバーを押して仮想化を選択します。
次のステップ
virtio ドライバーをコンパイル後、クラウド移行ツールを用いてサーバーを Alibaba Cloud に移行します。