VMWare上に作成したRed Hat Enterprise Linux 7.3の仮想マシンをHyper-V上に展開しようとして結構ハマったのでメモ。
Linux自体の知識がほとんどないもので、説明の中で専門用語が使えてなかったり不適切だったりするかもしれませんがご勘弁を。
基本的に仮想マシンはファイルでやりとりしているので、一番手間のかからないStarWind V2V Converterを使って、仮想ハードディスクをコンバートしています。(*.vmdk → *.vhd or *.vhdx)
通常なら、Hyper-Vに新しい仮想マシンを作って、コンバートした仮想ハードディスクをマウントしてあげれば普通に使えるようになるのですが、今回に限ってはどうにもブートしてくれず。
正確にはブートはするのだけど、Linuxの起動ゲージが最後まで行ってハングってるような状態。
ディスクのコンバートがうまくいっていないのかしらん、とMicrosoft Virtual Machine Converter 3.0 (MVMC)を使ってみたりもしたのですが、ファイルベースのコンバートはやたら面倒だったのであまりオススメできず。まぁ、苦労してMVMCでコンバートしてみても結果は変わらなかったわけですが。
気を取り直して、ひとまずコンバートはうまくいっていると仮定して調べ直したところ、あれをやるべし、これをやるべし、といくつか特殊な操作が紹介されていたので、かたっぱしから試してみた結果、何とか正常にブートするようになったので、以下に手順を整理してみます。
まず、仮想ハードディスクをコンバートする前にLinux上で以下のコマンドを実行しておきます。たぶんrootユーザで実行すべし。
詳細はこちらのフォーラム(英語)に記述があります。
# CentOS 7 regenerate initramfs for Hyper-V mkinitrd -f -v --with=hid-hyperv --with=hv_utils --with=hv_vmbus --with=hv_storvsc --with=hv_netvsc /boot/initramfs-$(uname -r).img $(uname -r)
上記の細工を施してから、仮想ハードディスクをvhdまたはvhdx形式にコンバートして新しく作成した仮想マシン(第1世代形式)にマウントします。
こちらではStarWind V2V Converterを使ってコンバートしましたが、他のコンバータでもおそらく問題ないかと思います。
次に5nine V2V Easy ConverterのREADMEに書かれていた操作を行います。
作成した仮想マシンを起動すると表示されるブートメニューのようなところで、「e」キーを押してgrub画面とやらに入ります。(上のスクショ参照)
もし、ここまで辿り着かないような状況だとすると、コンバートがうまくいっていないのかもしれませんが、いかんせん詳しくないので何とも…
ここで「set root=’*****」という行がどこかにあると思うので、その手前に「ata_piix.prefer_ms_hyperv=0」という呪文を入力します。
入力したら、Ctrl+xを押してそのまま起動してみると、あら不思議、正常に起動するようになりました。パチパチ。
ちなみにこの後、さらに「dracut -f」を実行すべし、という記述があったのですが、やってもやらなくても変化がよく分かりませんでした。
正直何をやっているのか全く分からなかったのですが、Linuxの初期RAMディスク(initrd)とやらが関係している操作のようです。
Linux使いってば、皆こんなややこしいことまで知っているのでしょうか。だとしたら素直に尊敬します…
ちなみに、RHEL6もVMWareからHyper-Vに移したことがあるのですが、このような問題は起きませんでした。