ここでは、インポート前にソースサーバーにインストールするためにどのイメージが 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 ドライバーの可用性の確認
  1. virtio ドライバーがすでにサーバーのカーネルに組み込まれているかどうかを調べるため、grep -i virtio /boot/config-$(uname -r) を実行します。
  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 サーバーを使用しています。

カーネルパッケージのダウンロード
  1. yum install -y ncurses-devel gcc make wget を実行し、カーネルのコンパイルに必要なコンポーネントをインストールします。
  2. uname -r を実行し、4.4.24-2.a17.x86_64 など、サーバーのカーネルバージョンを照会します。
  3. 公開されている Linux カーネルアーカイブ」にアクセスし、カーネルのソースコードをダウンロードします。たとえば、4.4.24 で始まるカーネルバージョンのダウンロードリンクは https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz です。
  4. cd /usr/src/ を実行し、ディレクトリを変更します。
  5. wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz を実行し、インストールパッケージをダウンロードします。
  6. tar -xzf linux-4.4.24.tar.gz を実行し、パッケージを解凍します。
  7. ln -s linux-4.4.24 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
  2. 以下のウィンドウで virtio ドライバーの対応する設定を構成します。
    [*] を選択してカーネルにドライバーを組み込み、[m] を選択してモジュールとしてコンパイルします。
    1. スペースバーを押して仮想化を選択します。

      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)
    2. Esc キーを押してカーネル設定ウィンドウを閉じ、ダイアログボックスに従って変更をファイル .config に保存します。
    3. virtio ドライバーの対応する設定がすべて正しく設定されているかどうかを調べます。
    4. (オプション) 検査後に virtio ドライバーの構成が確定しない場合は、以下のコマンドを実行してファイル .config を手動で編集します。
      make oldconfig
      make prepare
      make scripts
      make
      make install
    5. 以下のコマンドを実行して、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 に移行します。