前回、Hyper-V上の仮想マシンにUbuntuをインストールしたところまで書きました。
インストールが完了して、さっそく仮想マシンにSSHからログインしてあれこれ設定しようとしました。しかし、
SSHが接続できない…。
あれ?と思って仮想マシン接続から入ってルーターへpingを打ってみたけど通じず。ホストマシンへも通じず。
ifconfig見るとDHCPのアドレスはとれているので、少なくとも起動直後にDHCP DiscoverとOfferは通ったはずよね。pingが通らないのはなぜ?と。
ホストマシンのネットワーク設定を見てもおかしいところはなく、ひとしきり悩んでしまいました。
でdmesgを確認してみたら、あれ?カーネルのダンプが記録されている。NETDEV WATCHDOG?Ubuntu側の問題ぽい。ということで今度はUbuntu側の設定を確認してみたけれどやっぱりおかしなところは見つからず。
ここに至ってやっとGoogle先生に訊いてみたら、見つけましたよ。Hyper-V上でLinux動かすときは比較的メジャーな問題?
Ubuntuのirqbalanceサービスを止めればよいらしい。
仮想マシン接続からログインして/etc/default/irqbalanceを編集しました。
#Configuration for the irqbalance daemon #Should irqbalance be enabled? ENABLED="1" #Balance the IRQs only once? ONESHOT="0"
このうち、ENABLED="1" を ENABLED="0"に書き換えてから reboot。
再起動が終わるとネットワークが使えるようになっていました。
irqbalanceはSMPシステムで割り込み処理を複数のCPUに振り分けるサービスです。仮想マシンの構成にレガシーネットワークアダプターを選択するとtulipというデバイスのドライバーが組み込まれるのですが、このtulipドライバーとirqbalanceサービスの相性が悪いらしい。
つまり仮想マシンに複数の仮想プロセッサを割り当てなければこんなことにはならなかったわけですが、そこは譲れないしね。
あとレガシーネットワークアダプターを選んだのも敗因と言えば敗因ですね。
いや!負けじゃない。Hyper-Vがおかしい。
VMWareでもVirtualboxでも、仮想ハードウェアが古すぎてハマったことなんて無かったよ。
まあともあれ、無事SSH接続できるようになったので、あれこれ設定を完了させました。