フルーガルインストールしたPuppy LinuxとQ4OSとのマルチブート|ざっくりLinux!- 65

Puppy Linux Bionic

前回、軽量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のリスト」:何も書き換えず

インストール終了時に出てきた説明とテキストは以下の通りで、これを保存しておく。

grub4dosインストール画面

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!のおすすめ本】

コメント