Shiro:WinXPonVMWareonUbuntu

Shiro:WinXPonVMWareonUbuntu

メモ。


環境

これまでの環境:

toccata上でメインで64bit Linuxを走らせる必要が出てきたので、 Ubuntuをネイティブでインストールし、その上でVMwareを使って WinXPを走らせるように変更する。


First attempt

Ubuntu

SATAの300GBのHDDが一個余ってたのでこいつに入れることに。

Ubuntuのダウンロードサイトから 7.10、64bitのisoイメージを落として焼いてboot。

ところがインストール途中で「fd0が読めない」というエラーを延々と出して インストールが進まない。fddはついてないので、BIOSでlegacy fddをdisable にしてから再挑戦するも、インストーラ起動途中でbusyboxのシェルに 落ちてしまう。

同ページからalternate CDを落としてテキストモードでインストールしたら 今度はうまくいった。

VMware conversion

WinXPはこのマシンを組む時に買ったOEM版だが、またイチから入れ直すのは 面倒なのでこれまでのphysical diskをvmに変換して使うことにする。 ほんとはVMwareが既存のWinXPのディスクをそのまま使ってくれないかなと 期待したんだけど、考えてみたらVMware自身はホストOSのファイルシステムを そのまま使ってその上にrawなディスクを見せるだけで、それ自身が NTFSの読み書きを知っているわけじゃないから無理な話か。

まず改めてWinXPでブート。

今までのWinのディスクは90GBくらい使っていたけど、共有すべきデータは scherzoの方に移し、いらないデータやアプリケーションを消して、45GBくらいに シェープアップ。

VMwareのサイトからVMware converter starterをダウンロードして、 XP上で起動。VMのディスクは後から増やせるのでminimumを選んだ。 セーブ先はscherzoの共有ディスクを指定。2時間くらいで変換終了。

なお、WinXPがインストールされているディスクを選択しているのに 「システム/ブート可能なディスクが選択されてないので、作られたVMは ブートできないかもしれないけどいいの?」というようなダイアログが 出た。結果的に問題はなかった。

VMware workstation

無料のVMware serverもあるわけだけど、VMware workstationの方を 試してみることにする。30日はお試しできるからね。 さくさく動くようなら買っちゃったっていいし。

VMwareのサイトで登録。登録確認がされれば、 シリアルナンバーは"Account" > "Find Serial Number" から いつでも確認できる。

Ubuntuへのインストールはtarballを落としてインストールスクリプトを 起動し、質問に答えて行くだけ。

さきほどscherzoに作っておいたVMをtoccataのローカルディスクに コピーして、VMwareからそれをオープン。おお、Windowsが起動した。

まずubuntuとホスト名がかぶっててWinXPが文句を言ったので、WinXP側の ホスト名を変更。あと、synergycについては synergyc->ubuntu->VMware->WinXPというふうにコントロールすればいいはず なので、WinXP上からはsynergyをアンインストール。

「ハードが大幅に変わったのでさっさと再アクティベートしろ」と言われるが あせらずに、VMware toolsをインストールしたり 仮想HDDを増やしたり仮想ネットワークカードの設定をいじったりして 一通り落ち着いてからネットワーク経由でWinXPアクティベート。 ここまではスムーズに終了。

Synergy不安定→x2xに移行

しかしここで問題が。 synergy経由だとShift+キー、Ctrl+キーの情報がWinXPに渡らない。 ぐぐってみるとわりとポピュラーな問題で、完全な解決はされてないようだ。

あと、時々Ctrl+Altの情報がロックされちゃうようで、 カーソルをゲストOSに渡してもすぐにVMwareに取られちゃうという 症状になることもあり。

さらにぐぐってみると、メインとサブがどちらもX Window systemなら x2xというのが使えることがわかる。

Ubuntuだとapt-getで入れられる。Fedoraの方にはオフィシャルなrpmは 無いみたいだったが、x2xはサブ側にだけあれば良いらしい。 scherzoのシェルからsshでtoccata側にx2xを起動

  [shiro@scherzo ~]$ ssh -X toccata "x2x -east -to :0.0" &

これでscherzoのスクリーンの右端からtoccataのスクリーンの左端へと マウスカーソルがつながる。

synergyにくらべて、フォーカスが無い方のスクリーンでも端にマウスカーソルが 見えたままになるのがちょっとアレだが、modifier keyを含む情報はちゃんと ゲストOSにも渡る。

なおx2xではXのセレクションはサブスクリーンと共有できるんだけれど、 いわゆるクリップボードの情報は渡らないようだ。これはちょっと不便かも。

その他

Visual Studio 2005付属のMSDNのCDのautorun.exeが illegal instructionで実行できない。 →というかautorun.exeは直接実行すべきものじゃないのか (互換性のためにある?) Explorerから右クリックでautorunを選んだらインストールできた。


Second attempt

ここまでで快適に使えるようにはなったんだけど、 上にあるように、maruさんから、Windowsインストール済みのntfsパーティションを そのまま使ってゲストOSを起動できるとの情報をいただいた。 ubuntu用につけたディスクに巨大な仮想ディスクが置かれる一方で、 元々Windowsで使ってたディスクが遊ぶことになるのはどうも落ち着かなかったので、 これ幸いと試してみたんだけれど…一ヶ所しくじったために非常に面倒なことに。

後々のために失敗談を記す。

説明のために、当初のディスク構成を記しておく。

ブートはデフォルトでIDEからなので、hd0のMBRにGRUBが入っていた。

GRUBで引っかかる

New VMのWizardで最初に出る "Virtual Machine Configuration" で "Custom" を選ぶ。すると、ディスクの選択のところで "Use a physical disk (for advanced users)" の選択肢が現れる。 これを選ぶと、次のスクリーンでどのデバイスのどのパーティションを使うか 聞かれるので、/dev/hdaのパーティション1を選んでやればオッケー。

で、ゲストOSをブートしてみたのだが、

GRUB Loading stage1.5.

GRUB loading, please wait... Error 21

で止まる。考えてみたらこれは当然のことで、MBRに居るGRUBはhd0とhd1があって GRUBに必要な諸データは(hd1,0)に置かれてると思ってるわけだが、 ゲストOSからはhd0しか見えてないわけだ。

ゲストOSから見えるブートローダは、素直にhd0のWindowsをブートする 必要がある。とりあえずWindows XPのCDのリカバリモード(だっけ?)でゲストOSを 起動してMBRを復帰させてやればブートするようになるだろう、と判断。

悪魔のささやき

ここでふと、hd0の未使用領域が気になった。 これは当初、後からLinuxか*BSDか何かを入れるかもしれんと思って 確保しておいた領域だと思うんだが、hd1もあることだし、 30GBという中途半端なパーティションは使い勝手が悪そうだ。 このままでは今後も未使用のままになってもったいない。 どうせXPをCDからブートすることだし、この際パーティションを切り直して hd0まるまるWindowsにくれてやっても良かろう、と思ったわけだ。

で、さきほどのNew VMのウィザードで、 "Use a physical disk (for advanced users)" の後に、パーティションではなくディスク全体を選ぶ選択肢があったのを思い出し、 あれを選んで全体を1パーティションにしてWindowsを入れ直すか、と考えた。 (もともと保存が必要なデータは置いてなくて、Windows Updateをかけ直すのが 面倒だっただけなんだが、ここまで手間かけたらまあいいかって気になった。)

後から振り返ればこれが間違いのもとであった。

VMware boot device selection

"Use entire disk" だったっけな。そんな感じの選択肢を選んで、 hda全体を1パーティションに。

で、XPのCDを入れてゲストOSをブートしたんだが、どうもデフォルトでは CDを見ずにMBRを読みに行ってしまう。

ブート時にVMwareのロゴが一瞬出て、そこで"ESC for boot device selection" とか出るんだけど、このESCを押すタイミングが思いの他難しかった。 Power onをクリックし、VMwareのロゴが消える前に コンソールエリアをクリックしてゲストOSにフォーカスを移動してESCを タイプしないとならない。首尾よくタイプできればブートメニューが出るんだけど、 勢い余ってESCをもう一回押してしまうとメニューを抜けてMBRを読みに行っちゃう。 さらに、無事メニューからCD ROMを選ぶと

Press any key to boot from CD...

と出るんだけど、ほんの2〜3秒でタイムアウトしてMBRを読みにいっちゃうので またGRUBで止まる。

なんだかんだでうまくタイミングがつかめず何度もゲストOSをリブートするはめに。

XPインストール

あとはXPのCDからブートしてインストールしてWindows updateをかける。 update中何度もリブートする必要があるわけだが、この点で仮想化は大いに 楽だった。デュアルブートマシンでリアルで何度もリブートすると、 毎回ブートセレクタに行くから、油断しているとLinuxが立ち上がってたりする (作業中だけデフォルトOSを変えればいいんだけどつい億劫だしね)。 しかも本体のWindowsにsynergyを入れるまでは メインマシンとのキーボードの共有が効かないから、 本体にキーボードを差さないとならない。 ゲストOSなら再起動も速いし、直接Windowsにリブートしてくれるし キーボードの共有もばっちりだ。

で、順調にupdateも済んだあたりでふと気がついた。

ブート不能

hd0にXPをインストールしたってことは、hd0のMBRはWindowsのやつで 上書きされちゃったのかな、と考える。 で、あんまり考えずにVMware workstationを終了してUbuntu自体の リブートをかけた。

案の定、Windowsを直にブートしに行こうとして、 でもハードウェア構成が全然違うからブートできない。

さて困った。CDからレスキューモードでubuntuを起動してGRUBを再インストール することはできるが、それをやるとVMwareからゲストでWindows を起動しようとした時に元の木阿弥だ。

BIOSでIDEとSATAのブートの優先順を変えられることに気づいたので、 レスキューモードでubuntu起動→grubをhd1(SATA)にインストール→SATAからブート、 というのを試してみたところ、grubのメニューは出るがそのあとubuntuの起動の ところでこける。どうもカーネルが見えないらしいが、ブート順を変えたせいで デバイスの見え方が変わってるのかな? あまり追求してない。

ネットで調べて、"Use a physical disk (for advanced users)" の後の entire diskかpartitionかの選択に重要な違いがあったことをここに来て知る。

あそこでpartitionを選んでおくと、実ディスクのMBRとブートセクタにあたる領域だけは 仮想ディスクでシャドウするような設定がなされるのだ。したがって ゲストOSのインストーラがMBRやブートセクタを変更しても、その変更はVMwareの 中だけに止まる。entire diskを選ぶと仮想ディスクによるシャドウはおこなわれず、 実ディスクのMBRやブートセクタが上書きされるというわけだ。


Third attempt

やっと終了

そんなわけで、再び新しいVMを作り、Use a physical diskで/dev/hdaの partitionを使うという選択をする。 XPのCDを入れてふたたびESC押しゲーム。XPのリカバリモードを選び、 FIXMBRコマンドでWindowsのMBRを書き込み。これは仮想ディスクの方に書かれてるはず。

ゲストOSとしてブートしてみる→直接Windowsにブート。

Ubuntu自体をリブートしてみる→GRUB経由でUbuntuにブート。

やれやれ。


x2xとXserver authentication

x2xはtoccata(リモート)側とscherzo(コントロールホスト)側の両方の X serverにつなぐことになるんで、両方とも 自分の権限でX serverに接続できるようになってる必要がある。 どちらのホストでも自分がログインした状態になってれば通常はOK。 (上で示したsshのX tunnelingを使う場合は、両方ともローカルからの 接続になるのでX serverがtcp接続を受け付ける必要はない)。

しかし、リモート側でログアウトしてgdmなどが走ってる状態になると 自分のアカウントからXserverへの接続は拒否されることになるので注意。 そうなるとx2xでつなげないからコンソールからのログインもできなくなる。 /etc/gdm/Init/Defaultなどのスクリプトをいじって自分のアカウントからの 接続を許すようにしないとだめだろう。

ただ、それをやってもログインする時にx2xの接続が一回切れてしまうので、 再度つなぎなおさないとならなくて面倒(synergyだと両方でプログラムが走ってるので 自動的に再接続してくれるんだが)。

今のところは、/etc/gdm/gdm.confに

  AutomaticLoginEnable=true
  AutomaticLogin=shiro

として、常に自分がログインした状態になるようにしている。自分しか使わないし。


Last modified : 2012/02/23 03:42:50 UTC