一週間くらい試行錯誤してることの中間報告。
基本的にやりたいことは、VMとしても直接でもブートできるLinux環境を持ち歩けるようにしたいということ。USBメモリから直接起動できるLinuxは実験をするときなど何かと便利だけど、作業PCが1台しかないときは使っているPCを落とさなくてはならない。じゃあVMからも起動できればいいよね。
更に応用的な要求が2つ。1つは、USBメモリにWindowsから書き込める領域を残したいということ。純粋にデータ共有という意味でも便利だし、もしかしたらWindowsからLinux用に設定ファイルを渡せたりしないかしら、とか。もう1つは、RH系のLinuxが使いたいということ。これは単純に私がGPUプログラムなどをいじるときに都合が良いからである。ついでにいってしまえばUSBメモリからコピーインストールができれば完璧なんだけど、これは難しいよなあ。
VMはとりあえずqemuを使う方向。何故ならば、Windowsからインストールなしで使えるから。ついでに言えば、qemuで物理ドライブを参照する方法がわかったから。
というわけで、参考資料2つ。
QEMUで物理ドライブを使う方法とOpenSUSEをUSBメモリに入れる方法。
qemuでは-hda //./PhysicalDrive0とか-hda //./PhysicalDrive1とかを使うことで物理ドライブを仮想ディスクど同様に利用できる模様。これはWindowsからどう認識できているかとは直接関係がないらしい。WindowsからUSBメモリを使う場合、先頭のパーティションしかマウントできないという制限がある。しかしながらこの方法では2つ目のパーティションにOS(というかブート領域)があっても利用可能。
OpenSUSEの公式(英語・日本語両方)にUSBメモリへのインストールの資料があったので利用。
というわけで実験。
USBメモリをパーティション分割し、先頭パーティションにFAT領域を作成、第2パーティションにext3の領域を作成。第2パーティションにOpenSUSEをインストール。インストールCDから再度起動して途中のオプションからUSBメモリ上のLinuxを起動。grub-installでUSBメモリにgrubを導入。一度終了してCD-ROMを撤去。起動。ブート順序を変更しUSBから起動。場合によってはUSB-HDDじゃなくてUSB-ZIPあたりに認識されるかもしれないのでてきとーに。grubのパラメタはデフォルトで正しい保証なし。root(hd0,1)をroot(hd1,1)に変更とか、適当な値を指定してがんばって起動。また、Windowsを起動してqemuからの起動も確認。qemu.exe -L . -hda //./PhysicalDrive1とかで。こっちもgrubが合わない可能性が高いので注意。特に、ドライブがhdaとして認識されるのでsdaでは駄目。おそらくhda。/dev/hda1をマウントすることでWindowsとLinux(VM)で同じHDDを参照することも可能。書き換え反映のタイミングが怪しい。
とまぁ、大体こんな感じで起動は確認できます。以下、現時点で問題点が2つ。
1つめは、ハードウェア変更の差にどこまで対応できるか不明であること。少なくともVMで起動を試みた時点でXの設定が違ってこけると思います。ネットワークも然り。この辺は入れるLinuxの特性にもよるかもしれません。knoppixやその他LiveCDなんかは環境の変更に強いはずなので、LiveCD+差分データってのを考えたほうがいいのかもしれません。ちなみに、手元のPCの1台はgrubからLinuxを立ち上げるものすごく早い段階で躓きました。起動時のパラメタを練らないと駄目かもしれません。これは実行する環境によってはgrubから与えるパラメタをなんとかして把握しないといけないことを意味するので割と致命的です。
2つめは、BIOSか何かの都合でUSBメモリの第2パーティションをうまく認識できないかもしれないこと。手元のPCの1台が、先頭パーティションのLinuxは起動できても第2パーティションのLinuxが起動できないという問題に陥っています。起動できないというか、grubにたどり着けないというか。
さて、現在こんな感じです。割と動いていますが、実行環境への柔軟な対応という意味ではやはりLiveCD系を活用したほうが良い気がしています。実は、小さいUSBハブにUSBメモリを2つ挿し、片方をLiveCD起動用(isolinux系はisoから展開して格納しても起動可能にできます)、もう一方をデータ用とかするのが最強かもなぁとか思っていたりもします。うーむ。
余談ですが、GParted LiveCDというのを使うとUSBメモリのパーティション変更とか楽チンです。まさかパーティション変更用のLinuxLiveCDなんてあるとは思わなかったよ。
8月 25th, 2007 at 1:16:31
> root(hd0,1)をroot(hd1,1)に変更とか
grubでroot(…)の行を削除すれば、BIOSがブートローダをロードしたディスクがrootになります。お試しあれ。
蛇足ですが、grubで「c」キーを押すと対話型シェルモードになって、ここではTabでファイル名やhdXの補完が効きます。さらにはcatでファイルの中身を見たりできます。
> 特に、ドライブがhdaとして認識されるのでsdaでは駄目
パーティションにラベルを付けて、デバイスノード名ではなくラベルを指定するようにすればたぶんうまくいきます。
http://www.stackasterisk.jp/tech/engineer/lpic04_02.jsp
>1つめは、ハードウェア変更の差にどこまで対応できるか不明であること。少なくともVMで起動を試みた時点でXの設定が違ってこけると思います。
他のディストリビューションでは違うかもしれませんが、少なくともMandriva Linuxは、インストール時だけでなく起動時にもハードウェアを自動検出&自動設定してくれて、それも結構正確です。たしかFedoraやopenSUSEもやってくれたはず。このあたりはディストリビューションの違いが大きく出るところなので、他のディストリビューションも試してみると良いかもしれません。
X11の場合は、そもそもドライバが入っていないとハードウェアを検出できても不発に終わってしまうので、ドライバ系rpmは一通り入れておくと良いです。x11-driver-video-i810-*.rpmとかそんな名前です。
X11には最終手段があって、ドライバをfbdevかvseaにしておけば、ほとんどどこでも動きます。パフォーマンスい上にopenGLも使えなくなりますが、動かないよりは幾分マシかと思います。
8月 27th, 2007 at 9:38:06
root削除とかラベル名とかは全然知りませんでした。なるほど便利そうだ。
HW関係は、前にFecoraだかCentOSだからVineだかで自動検出を何度か見ているので何とかなるだろうとは思っています。openSUSEでやった経験がないのでちょっと不安ですが。Xも場合によってはvesaとかでやっちゃおうと思っていたところです。
そんなわけでLiveCD系の実験を少しやっておきたいところなんですが、他にもやることが詰まれていてうぼあ中。うーむ。