Grub で Ubuntu & Plamo & Windows を立ち上げる

いろいろテスト用にと、かなり古い VAIO VGN-NW71FB に Windows7, Ubuntu, Plamo を入れてマルチブートにしているのですが、Plamo を 7 に入れ替えようと、かなり初歩的なミスでパーティションを間違えたらしく、どの OS も起動できなくなってしまいました。


www.imuza.com



grub rescue> がでたが…

まず何をやってしまったかを整理しますと、この VAIO は次のようにパーティションが切ってあります。

f:id:ausnichts:20190605102143j:plain

  • sda1~3 は Windows7
  • sda5 は Plamo
  • sda6 は swap
  • sda7 は ubuntu

この Plamo を入れ替えようと、パーティションを間違えて sda7 を書き換えてしまったということです。で、インストールも終わり再起動をかけますと、grub rescue> のプロンプトとなり、この時やっとミスに気づいたわけです。

この grub rescue> は初めて見ましたのでググりますと、そこから OS を起動する記事はたくさんヒットするのですが、grub と何が違うのかとかの記事がなかなか見つからず、やっと次の記事にたどり着き、

GRUB - ArchWiki

それによりますと、

深刻な問題があるときは (例: GRUB が必要なファイルを見つけられない)、代わりに "rescue" シェルが出ます

rescue シェルは通常のシェルの制限されたサブセットで、使える機能が少なくなっています。rescue シェルが出てきた時は、まず "normal" モジュールの挿入を試して、"normal" シェルを起動してみて下さい

ということがわかりました。

ところが、今回の場合はもう ubuntu を立ち上げることは出来ませんし、grub 自体も壊れてしまっているようで、ここから plamo を立ち上げることも出来ない状態ということになります。


USBメモリーから grub を立ち上げる

さて、どうするかということで、もう一度、plamo も ubuntu も入れ直せばそれでいいのですが、ふと、grub をインストールした USBメモリーがあることを思い出しました!

USBメモリを差し込み電源を入れますと、こんな画面が立ち上がります。

f:id:ausnichts:20190605110450j:plain

grub> が立ち上がればこちらのものです。


grub> プロンプトから OS を起動する

grub > プロンプトはタブ補完もヒストリーも使えますので通常のターミナルのように使えます。ただ、キーボード配列が異なりますので記号類はあれこれ押して確かめましょう。


grub> ls
(hd0) (hd0,msdos1) (hd1) (hd1,msdos7) (hd1,msdos6) (hd1,msdos5) (hd1,msdos3) (hd1,msdos2) (hd1,msdos1)
grub> ls (hd1,msdos5)/boot
vmlinuz-4.14.44_plamo64 (略)
grub> ls (hd1,msdos7)/boot
vmlinuz-4.18.0-20-generic (略)

ls コマンドが使えますのでパーティションやディレクトリを見てみればどこに何が入っているかわかります。(hd0) は USBメモリーです。


Plamo linux の場合

grub> set root=(hd1,msdos5)
grub> linux /boot/vmlinuz-4.14.44_plamo64 root=/dev/sda5
grub> boot


Plamo は initrd.img を使っていないようです。こじまみつひろさんの日記によりますと

○Plamo-7.1のinitrd対応について

従来、Plamo Linuxでは、起動回りの処理を簡単にするため、initrd は使わないようにしていました。

しかしながら、昨今のカーネルの多機能化や周辺機器の多様化に伴ない、 カーネルにどのドライバを組み込んでいいのかがよく分からなくなってきたため(苦笑)、 Plamo-7.1からはHDD等のブロックデバイスやファイルシステム回りのドライバはinitrd経由で組み込むようにしました。

とあり、7.1(すでにリリースされている)からは initrd を使っているとのことです。ここら辺りまで来ますと難しくてよくわかりません。


Ubuntu の場合

grub> set root=(hd1,msdos7)
grub> linux /boot/vmlinuz-4.18.0-20-generic root=/dev/sda7
grub> initrd /boot/initrd.img-4.18.0-20-generic
grub> boot


Windows の場合

grub> set root=(hd1,msdos2)
grub> chainloader +1
grub> boot


Grub 再インストール

Plamo からでも Ubuntu からでも

$ sudo  grub-install /dev/sda

とすれば、こわれた Grub をインストールできます。

Grub を起動できる USBメモリーは一家に一台ですね。