前回、軽量Linuxの代名詞Puppy Linuxをフルーガルインストールまでできたことを書いた。しかし、ブートローダの設定まではしていなかったため、まだパソコンに入っている他のLinux(Q4OS)とのマルチブートができない。
そこで、Puppy Linuxにてブートローダを設定し、フルーガルインストールを完成させるべく、挑戦してみる。
ブートローダを理解する
前回と同じ設定にするため、Thinkpad X41に、Q4OSとPuppy Linuxを再度インストールし直し、Puppy Linuxのフルーガルインストール設定までで止めておいた。
とにかく、ざっくり派の筆者には専門用語が理解できない。まずは、用語を理解することから始める。ネットで調べ、ざっくりとまとめてみた。
ブートローダとは
ブートローダとは、ハードティスク等からOSを起動するためのプログラム。複数のOSがインストールされているとき、ブートローダで選択して起動する。
1次ブートローダは、起動後最初に実行されるプログラム。その後、OSを格納するストレージへアクセスし、2次ブートローダでOSを起動する。単にブートローダと呼ばれているものは、この2次ブートローダを指す。
さらに、2次ブートローダには、
- Linuxに付属していたLILO(Linux Loader)
- 様々なUNIX系OSで使われるGRUB(GRand Unified Bootloader)
- Windows XP以前に付属していたNTLDR(OS Loader)
- Windows Vista以降に付属するBOOTMGR(Windows Boot Manager)
がある(「IT用語辞典 e-Words」 より)。
Linuxにおけるブートローダは、Grub2、Grub Legacy、LILOで、現在ではGrub2がスタンダードとなっている。
Grub2の設定ファイルはgrub.cfgだが、これを書き換えることはせず、/etc/default/grubで設定を行う。一方、Grub Legacyにおける設定ファイルは、menu.lst(Debianなど)、grub.conf(RedHatなど)だ。
MBR(Master Boot Record)とは、ブートセクタの一種で、パーティション外に存在する先頭セクタ。パソコンを起動したときに、最初に読み込まれるもので、これも起動プログラムだ。複数のOSが入っているのでなければ、このMBRでパソコンが起動される。
Grub4Dosとは
Grub4Dosは、Puppy Linuxで採用されている標準ブートローダのこと。GUIにより、指示通りに設定すれば、他のOSとのデュアルブートやマルチブートが設定できる。
しかし、Grub4Dosは現在のパソコンに設定されているUEFI(BIOSに代わるプログラム)に対応していないため、他のOSから起動するには、Grub2を設定しなければならない。
Grub4Dosの設定ファイルは、Grub Legacy同様menu.lstだ。
なんとなくだが、ここまでで
- パソコンの起動について、いくつか種類があること
- Puppy LinuxのブートローダはGrub4Dosだということ
- 大元のOS、Q4OSのブートローダはGrub2だということ
- 筆者が希望するマルチブートを設定するには、大元のOS側からGrub2を設定すること
ということがわかった。
Puppy LinuxにGrub4Dosをインストール
最初は、Puppy Linuxのブートローダ、Grub4Dosをインストールする。
「メニュー」 –> 「セットアップ」 –> 「Grub4Dosブートローダの設定」へ。設定画面が表示されたら、とりあえず何もチェックせず、標準設定でインストールしてみた。
- インストール先:sda
- オプション:何もチェックせず
- 次画面「検出されたOSのリスト」:何も書き換えず
インストール終了時に出てきた説明とテキストは以下の通りで、これを保存しておく。
If you have GRUB/GRUB4DOS installed, find the 'menu.lst' file (usually in /boot in the partition in which GRUB is installed) and insert this: title Puppy Linux - BionicPup32 19.03 frugal in sda3 dir upupbb19.03 #root (hd0,0) <-- GRUB legacy, ex: (hd1,0), etc.. find --set-root uuid () a1631a1c-cd7a-4653-ba5b-6d2324cbd5fd kernel /upupbb19.03/vmlinuz pmedia=atahd psubdir=upupbb19.03 initrd /upupbb19.03/initrd.gz ----- For GRUB you must set root (hdX,X) to the correct values and comment/remove uuid. root (hdX,X) is also supported by grub4dos..
そのままインストールを終了し、USBを使わずに再起動してみる。すると、真っ黒な画面上に、以下の通り表示されたまま動かない。
wee 0> find --set-root /grldr (0x80,0) wee 0> /grldr wee 13>
この文字列を検索してみると、どうも現状ではMBRが壊れているため、OSが起動しないらしい。先ほど、Grub4Dosのインストール終了時に表示されていた、以下説明を思い出した。
「以前のMBRが退避されました。以前のMBRを復旧させるには、コンソールから次のコマンドを実行してください」
なるほど、これで以前のMBRを復旧させれば、大元のOS、Q4OSは起動できるというわけか…
そこで、USBを挿してもう一度Puppy Linuxを起動させ、コンソールで以下の通り打って再起動をかけてみた。
cat /initrd/mnt/dev_save/sda_mbr.bak > /dev/sda
これで、Q4OSが通常起動するようになった。
ブートローダファイル「menu.lst」の編集
ここまでの設定で、USBがなければQ4OSが起動し、USBを入れたら起動画面でデバイスの選択ができるようになり、Puppy Linuxが起動することが確認できた。
次に、Puppy Linux のブートローダ設定ファイル、menu.lstを編集する。
Puppy Linuxを起動したらファイルマネージャを開いて、左上の矢印でひとつ前のフォルダに移動し、「initrd」–> 「mnt」 –> 「dev_save」フォルダを開く。その中にあるのが、menu.lstファイルだ。
何も書き換えていない現状のファイル内容は、以下の通り。
# menu.lst produced by grub4dosconfig-v1.9.3
color white/blue black/cyan white/black cyan/black
#splashimage=/splash.xpm
timeout 10
default 0
# Frugal installed Puppy
title Puppy upupbb 19.03 (sda3/upupbb19.03frugal)
find --set-root uuid () 29bd3487-22a3-47ae-8696-e1c50d6fe816
kernel /upupbb19.03frugal/vmlinuz pdrv=29bd3487-22a3-47ae-8696-e1c50d6fe816 psubdir=/upupbb19.03frugal pmedia=atahd pfix=fsck
initrd /upupbb19.03frugal/initrd.gz
# Full installed Linux
title Debian GNU/Linux 10 (buster) (sda1)
find --set-root uuid () f21f3c03-042c-49cb-bbfc-e6b4af8025ad
kernel /vmlinuz root=UUID=f21f3c03-042c-49cb-bbfc-e6b4af8025ad ro
# root=/dev/sda1
initrd /initrd.img
title Find Grub2\nBoot up grub2 if installed
errorcheck off
find --set-root --ignore-floppies --ignore-cd /boot/grub/i386-pc/core.img
kernel /boot/grub/i386-pc/core.img
find --set-root --ignore-floppies --ignore-cd /boot/grub/core.img
kernel /boot/grub/core.img
errorcheck on
# Windows
# this entry searches Windows on the HDD and boot it up
title Windows\nBoot up Windows if installed
errorcheck off
find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /bootmgr
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr
find --set-root --ignore-floppies --ignore-cd /io.sys
chainloader /io.sys
errorcheck on
# Advanced Menu
title Advanced menu
configfile /menu-advanced.lst
commandline
このファイルのマーカーした部分に、Grub4Dosをインストールした時、最後に表示された上述のテキストファイルから、以下部分をコピー&ペーストする。
title Puppy Linux - BionicPup32 19.03 frugal in sda3 dir upupbb19.03 #root (hd0,0) <-- GRUB legacy, ex: (hd1,0), etc.. find --set-root uuid () a1631a1c-cd7a-4653-ba5b-6d2324cbd5fd kernel /upupbb19.03/vmlinuz pmedia=atahd psubdir=upupbb19.03 initrd /upupbb19.03/initrd.gz
次に、上記記述の2行目のコメントアウトを削除し、#root (hd0,0)の括弧内を「hd0,2」に書き換える。
hd0はハードディスクを指し、a=0、b=1となる。カンマの後の数字はパーティションを指し、GRUB legacyでは、パーティション番号−1となるので、Puppyをインストールしたパーティション、sda3は「hd0,2」となるのだそうだ。
つまり、マーカー部分は、
title Puppy Linux - BionicPup32 19.03 frugal in sda3 dir upupbb19.03 #root (hd0,2) find --set-root uuid () a1631a1c-cd7a-4653-ba5b-6d2324cbd5fd kernel /upupbb19.03/vmlinuz pmedia=atahd psubdir=upupbb19.03 initrd /upupbb19.03/initrd.gz
となる。
menu.lstを書き換えたら保存し、再起動してみる。これで、USBが挿さったままであれば、デバイスの選択画面を飛ばして、Puppy Linuxが起動するようになった。
一応Puppy Linuxインストール作業は終了
現時点では、起動時にOSの選択ができず、Puppy LinuxはUSBなしでは起動できない。
しかし、考えようによっては、これでPuppy Linuxのインストールは完了したと言っても良い。
フルーガルインストールされたPuppyは、パソコン本体のsda3というパーティションにあり、大元のOS、Q4OSを消してしまっているわけではない。
Q4OSを起動したければそのまま、Puppy Linuxを起動したければUSBを使えば良い。この先、ややこしい設定をせずに気楽にPuppy Linuxを使いたいのであれば、ここで止めておいても良いと思う。
だが、最終目標は、USBを使うことなく、起動画面でQ4OSとPuppy Linuxの選択ができるようにすることだ。
さらにネットで調べたところ、Grub4Dosでは大元のLinux、Q4OSを認識させることができないらしい。そのため、今度はQ4OS側からGrub2の設定をすることになる。
これも長くなりそうなので、今回はここまで(次回に続く)。
【ざっくりLinux!のおすすめ本】
コメント