現在、仮免許試験に無事通過しまして、ホットしているところです。ちょっとハンドルがもたついて、S字の出口でふらつきましたが、結果は大丈夫でした。エンストもなく、そこそこな出来だったと思ってます。
はい、本題に入ります。
VMware ESXi 4は、仮想サーバを構築するためのOSです。かなり高機能なのですが、対応しているハードウェアが少ないというデメリットがあります。独自OSですから仕方ないですね。
さて、家のサーバには、2つのNICが刺さっています。一つは、Intel製、もう一つはMarvell製です。ESXiでは、Intel製のNICしか認識できなく、Marvell製のNICは動作しませんでした。
ちょっとESXiのShellで調べてみたところ、どうやら認識はしているようです。(lspci コマンドで確認できます) ですが、動作はしていないようです。dmesg コマンドで確認したところ、ドライバが正常に動作していないみたいです。
インターネットで調べたところ、Marvell製のNICは、sky2というカーネルモジュールが必要と言うことがわかりました。sky2は、ESXiに導入されていますが、ステータスが間違っているようです。なので、VMware ESXiのソースからコンパイルし直せば、動作するはずです。しかし、そんな難しいことはよくわからないので、海外サイトにその情報とコンパイル済みのモジュールがあったので、リンクを張っておきます。
Using a Marvell LAN card with ESXi 4
このサイトから、ドライバデータを引っ張ってきて、インストールすることにします。このサイトの情報を読めば大体わかるのですが、英語が苦手なので、自分自身で適当にハックしてインストールしてみました。
次のコマンドを打ち込めば、完了します。
wget http://www.kernelcrash.com/blog/wp-content/sky2-and-skge-for-esxi4-0.02.tar.gz # モジュールを参考サイトからダウンロードする
tar zxvf sky2-and-skge-for-esxi4-0.02.tar.gz # ファイルを展開する
rm -rf vmware-oss # ソースコードは要らないので削除する
cd vmtest # モジュールが入っているディレクトリに移動する
tar zcvf /vmfs/volumes/Hypervisor1/oem.tgz * # モジュールを書き込む
cd ..
rm -rf vmtest # コピーしたので不要なデータを削除する
reboot # 再起動する
これで無事にMarvell製のNICを認識することができます。ただし、すべてのMarvell製のNICで動作するかわかりません。あくまで自己責任でお願いします。
補足説明
VMware ESXiは、起動時にすべてのデータをメモリに転送し、そのファイルシステムでOSを起動させています。要するに、RAMディスクを構築しているわけです。当然、RAMディスクなので、どれだけ書き込んでも再起動すれば元通りになります。書き換えるには、起動時に読み込むファイルを変える必要があります。それが、/vmfs/volumes/Hypervisor1/*.tgz ファイル群です。
読み込む順序が設定されており、もしちがうtgzファイルに同じファイルがあれば、あとのファイルが優先されるようになっています。(優先順位は、ブートローダの設定に書いてあります。また、書き換えると、起動しなくなる可能性があります。)
独自で用意したファイルを使用したいときは、/vmfs/volumes/Hypervisor1/oem.tgzを書き換えます。初期状態では、空のアーカイブファイルになっています。ここに、カーネルモジュールや設定ファイルを置いておけば、再起動してもデータが消えることはありません。
今回は、oem.tgzにファイルを追加して読み込むようにしました。すでに、モジュールファイルが存在していますが、先ほど述べたように、読み込む順位が後の方に指定されているので、こちらが優先されます。このようにして、改造することができます。
コメントする