ネットブックシリーズの最終回。Acer Aspire one D250 (CPUはAtom N280)に32bit版 Android-x86 (Ver. 8.1)と32bit版Puppy Linux (BionicPup32 Ver. 8.0) インストールし、デュアルブートさせることができた。
ディスク構成とmenu.lst
先にうまくできた時の情報だけをまとめておく。
故障したので交換した320GBの内蔵HDDの最終的なパーティション構成は以下の通り。Puppy Linuxに付随していたパーティション管理ソフトのGPartedを利用して整理し、sda1はAndroid-x86に利用し、sda2はPuppy Linuxに利用し、sda3は未利用となっている。
この構成において、ブートローダのGrub4Dosを使ってうまくデュアルブートできた時のmenu.lstの内容は以下の通り。
HDDから起動すると、menu.lstの内容に従って以下の起動選択画面が表示され、起動したいOSを選ぶことができる。ちょっとブレていて申し訳ないが、表示内容は分かると思う。
なお、Windowsの選択肢が表示されているが、Puppy Linuxのインストールに引き続いてGrub4Dosをインストールすると、Windowsがインストールされていれば探して起動可能にするための記述がmenu.lstに勝手に追記されるためである。
当初のディスク構成とmenu.lst
ここからの情報は、うまくブートできなかった時の記録を残しておくためなので、同じ状況に陥った人以外には参考にならないと思う。
当初のディスク構成は下記の通りとなっていた。
sda1にインストールしてあるのは、ネットブックでもAndroidが動作するという記事で書いた時のものだ 。最終的な構成でもインストールし直した訳ではなく、GPartedでサイズを縮小しただけだ。
また、この時点でsda2にインストールしてあるのは、Android-x86の記事にも書いた通り、Q4OSインストール済みのパーティションにライブUSBでの動作確認が終わっていたPuppy LinuxをFULLで上書きインストールしたものだ。sda2にFULLでインストールすると、sda2の下に論理ボリュームとしてsda5とsda6が自動的に作られ、Puppy Linuxはsda5にインストールされ、swap領域がsda6に用意されるようだ。
Pupply Linuxのインストールに引き続いてGrub4Dosをインストールするかきいてきたので、詳細はよく分からないままメッセージに従ってインストールした。この時、grldrとmenu.lstは/mnt/sda1の下に置かれたというメッセージ等が出ていた(後で再確認した内容で、最初は読み飛ばしていた)。
2つのOSのインストールが完了し、ブートローダもインストールしたので、再起動してみたら、ブートが変で、起動メニューは出ずにコマンド画面のようなテキストが出ていた。
-----
wee 0> find --set-root /grldr
wee 0> /grldr
wee 13>
----
wee 0> find --set-root /grldr
wee 0> /grldr
wee 13>
----
この時点では、Grub4Dosからのエラーみたいだということしか分からなかった。ここからまたいつも通り、色々調べたり、試行錯誤を続けることになってしまった。先に書いた再確認した内容に基づいて後から考えると、grldrが指定された場所にないという意味だった。
起動しないと何もできないので、結局、Puppy LinuxのライブUSBで起動し、各パーティションのフォルダ構成とかmenu.lstの記述内容を調べ、修正していくことになった。その時の途中段階の様子は下記の通りで、さらに各フォルダを開いてどんなファイルがどこにあるのか確認してみたりした。
Puppy Linuxの「Grub4Dosブートローダの設定」の利用
試行錯誤している中で、Puppy Linuxの画面で、右クリック⇒セットアップ⇒Grub4Dosブートローダの設定 が利用できることが分かった。それで、GRUB互換のある形式でmenu.lstを作り直すとメニューの選択画面が出るようになった。
しかし、起動画面でAndroid-x86を選択するとSelect disk does not existと出るし、Puppy Linuxを選択するとInvalid or unsupported executable formatと出た。それでも一歩前進で、かつエラーメッセージが多少具体的になった。
Android-x86の起動成功
そもそも最初のGrub4Dosのインストールを成り行き任せで適当にやったせいでルート指定がUSBドライブになっていた。sda1を指してなかったのでnot existになっていた訳だ。それを修正し、さらにsda1の下のファイルを調べてkernelやinitrdがAndroid-x86用のものを正しく指すように書き換えた。この時点のmenu.lstが上の写真の内容だったと思う。
menu.lstの中でsda1を指すのはroot (hd0,0)という記述になるが、こういう初歩的な事項から調べながらやったので大変だった。そもそもGrub4Dosとmenu.lstを使うのも初めてだった(GPartedも同様)。
sda1を正しく指定したのでAndroid-x86の起動が始まったが、今度はDetecting Android-86というところで止まった。Linuxの起動について調べたことと考え合わせると、ram0というフォルダにOSを展開して動作しよとしているらしいのだが、それが見つからないということのようだ。
Android-x86をインストールした際に作られたmenu.lstがsda1/grubの下にあったので、それを参考に実際のフォルダ構成に合わせてroot=/dev/ram0のところをroot=/mnt/ram1と修正した(root=/dev/ram1でもOKかもしれない)。結局、Android-x86は以下のように記述することで起動できるようになった。
-----
-----
root (hd0,0)
kernel /android-8.1-r6/kernel root=/mnt/ram1 vmalloc=192M SRC=/android-8.1-r6
initrd /android-8.1-r6/initrd.img
----
kernel /android-8.1-r6/kernel root=/mnt/ram1 vmalloc=192M SRC=/android-8.1-r6
initrd /android-8.1-r6/initrd.img
----
FULLインストールのPuppy Linuxの起動修正は失敗
Android-x86の起動に成功したので、同じような修正の仕方でPuppy Linuxの起動の修正もできるだろうと思った。kernelのroot指定でデバイスファイル (/dev/sda5)を使うのではなく、実際の場所(/mnt/sda5)を使ってみたがダメで、エラーメッセージの内容は変わらなかった。
今、この記事を書きながら整理した情報を見て改めて考えると、root=ではOSイメージを展開する場所を指定しないとダメだった気がする。既に環境が消えたので試せないが。
起動画面のAdvanced menuでコマンドとしてkernelを読ませてみても結果は変わらず、vmlinuz(カーネルの実行バイナリ)に対してError 13 Invalid or unsupported executable formatのエラーが出ていた。vmlinuzが壊れているのかと、起動中のライブUSBのvmlinuzをコピーし直して試しもダメだった。
論理ボリュームであることが何か関係しているのか調べたり、思い付く限りのことを調べ、試したが徒労に終わった。系統的にきちっと勉強した訳でもないし、Linuxは汎用性が高い故、エラーの出方や対処のバリエーションが豊富で、色々情報があっても調べ切れなかった。
Puppy LinuxをFRUGALインストールし直してデュアルブート成功
FULLの起動の修正は断念したが、一般的なFRUGALでインストールし直してみようと考えた。それに先立ち、HDDのパーティションを整理しておこうと思い、GPartedでsda1を100GBに縮小し、sda2、sda3を100GBずつで作成し、ext4でフォーマットしておいた。
その後、sda2にPuppy LinuxをFRUGALインストールした。Grub4Dosは既にあるので「ブートレコードは書き換えない」にチェック、USBが候補に入らないように「このドライブだけ」にチェックしてブートローダの設定も完了した。Grub4Dosについても少し勉強したので、今回は成り行き任せにしなかった。
menu.lstを確認してみるとAndroid分が消されていたが、まずHDDからPuppy Linuxが起動できるかを確認した。問題はなかったので、menu.lstにAndroid-x86用の情報を書き足し、デュアルブートが可能になった。
今回も足掛け2週間ほど調べたり、試行錯誤を続けることになった。しばらくしたら忘れてしまうだろうが、色々、勉強になった。多少レベルアップしたので、Puppy Linuxをもう1回FULLでインストールし直したら、問題が起きても対処できるかもしれない。
また、sda3が空いているのでWindows XPをインストールしてトリプルブートを試すことも可能ではある。しかし、今さらXPを使う理由は何もないし、一応今回でネットブックで遊ぶのは終了だ。Android-x86でもPuppy LinuxでもYouTubeを見られるので、孫のオモチャとしては完成した。
なお、元のメモリは1GBだったが、2GBのDDR2 533MHzの中古品がヤフオクで送料別500円ほどで売っていたので、今さらと思いながらも買って交換しておいた。試しにYouTubeを見たぐらいでは違いは感じなかったが、動作中にメモリネックになる可能性は減るだろう。SSD換装は、さらに今さらなので見送っている。