GRUB2をライブCDから復旧する
EcoLinux,Ubuntu,PuppyLinuxをいれて、次に Knoppix6.0.1(CD版) をHDDに入れようとしました。
ちなみにブートローダはEcoLinux側の GRUB2 (1.9) を使っています。
システムツール → KNOPPIX HD Install からインストーラを起動するわけですが、インストーラが英語でいまいち理解できません。
auto を選ぶと、No automatic partitioning possible. となり、インストールメニューに戻ってしまいますい、 qparted を選んでもインストールメニューに戻ってしまいます。
disk を選ぶと、Yes,No の選択肢が出てくるんですが、これでつい Yes を押してしましまた。これを押下するとHDDの全てのパーティションをクリアしてインストールしようとするんですよね。
実際のインストール作業が始まる前にリブートしたところ、案の定パーティションとブートローダがきれいさっぱし消えていました。
こりゃまずいということで、まずはパーティションの復元です。
KNOPPIXをCDブートし、TestDiskを使って復元しました。(TestDiskの使い方は【TestDisk】についてが参考になります。)
ここまではスムーズに行ったんですが、ハマったのがGRUB2のマスターブートレコード(MBR)への再インストールです。
GRUB2の再インストールで参考になったのがWinux/Lindows Grub2の復旧とかです。
今回は下記のようなパーティション構成となっています。
/sda :物理ディスク
/sda1 :拡張パーティション
/sda5 :EcoLinux(/boot)
/sda6 :swap
/sda7 :EcoLinux(/)
/sda8 :Ubuntu(/)
/sda9 :Puppy FULL(/)
/sda10:Puppy FRUGAL
まず EcoLinux を LiveCD から起動します。
ターミナルを立ち上げ管理者になります。
$ sudo -s
GRUB2の設定が入っているパーティション、つまり、Ecolinuxの /boot と /dev をマウントします。
# mount /dev/sda5 /mnt
# mkdir /mnt/dev ←/devのマウントのためフォルダ作ります。
# mount --bind /dev/ /mnt/dev
# chroot /mnt ←/mntを/として使用します。
ところが、この chroot のところで、
chroot: cannot run command `/bin/bash': No such file or directory
と怒られます。
どうやら bash が /mnt 配下にないぞというので怒っているようですね。
/bin/bash を /mnt/bin/bash にコピーしたり、シンボリックリンクを作成したり、月夜さん( ゚д゚ ) : ぼちぼちノーマルを参考にしてライブラリを作ったりしたんですが、ダメでした。
おそらく /boot をパーティションを分けしまったのがまずいと思われます。
うまくできた、Winux/Lindows Grub2の復旧とかの方の場合は、/boot も / と同じパーティションに置いていたから成功したのでしょう。
ということで思いついたのが /boot の内容をとりあえず、/ (sda7) にコピーしてみようということです。
# mkdir /sda5
# mkdir /sda7
# mount /dev/sda5 /sda5
# mount /dev/sda7 /sda7
# cp -rf /sda5 /sda7
# chroot /mnt
上記のようにすると成功しました。
これでようやく GRUB2 本体がMBRにインストールできます。
# grub-install /dev/sda
あとはアンマウントして再起動です。
# umount /sda5
# umount /sda7
再起動すると GRUB2 が立ちあがったわけですが、シェル(対話)モードになっています。
大昔自宅PCでGRUB Legacyを使ってマルチブートやってた時はシェルモードで設定した記憶が有るんですが、さっぱし忘れてます。
Ubuntu9.10がインストール後起動しない: Linux tips 自宅サーバ更新記録やGRUBを使う - Ubuntu Japanese Wikiを参考にして何とかブートを試みます。
とりあえず下記のようにEcoLinuxを起動しようとしてみました。(GRUBのシェルはキーボードを101として動いてるので、括弧のキーとかが106と違うので要注意です。101の配列をWEBで確認しながら打った方がよいでしょう。)
また、GRUBのシェルはBASHのように補間機能が使えるので、カーネルファイルを指定するときとかじゃんじゃん使いましょう。
>ls ←パーティションの一覧を表示してくれます。
(hd0)(hd0,7)(hd0,6)(hd0,5)....
>root (hd0,5) ←ブートするパーティションを設定します。
>linux /vmlinuz-2.6.32-21-generic ←カーネルを設定します。
>initrd /initrd.img-2.6.32-21-generic
>boot ←起動します。
しかし、どうも起動中にカーネルパニックを起こして起動できません。
そういえばEcoLinuxは /boot と / をわけていました。sda7 が / であることを教えてやらないといけません。
もう一度ライブCDでEcoLinuxを起動し、sda5 をマウントして、/grub/grub.cnf の中身を確認してみました。
どうやら root でどのパーティションが / かを指定するようです。grub.cnfでは UUID で指定していましたが、従来通りのパーティション表記でも構わないようですね。あと、ro quiet splash という文字列もついてたので、これらも付け加えることにします。
それをメモし、もう一度 GRUB のシェルに挑みます。
>root (hd0,5)
>linux /vmlinuz-2.6.32-21-generic root=/dev/sda7 ro quiet splash
>initrd /initrd.img-2.6.32-21-generic
>boot
見事EcoLinuxが起動しました。
あとは、EcoLinux側で GRUB2 を再インストールしてやります。(そうしないといつまでも sda7 を見に行き、シェルモードとなってしまうので。。)
# grub-install /dev/sda
# update-grub
これで、よーやく KNOPPIX にやられる前の状態に戻すことができました。
やく半日時間取られましたよ。
Knoppixも5.3時代はよかったんですが、6になってからどうも魅力に欠けるようになってますね。。。
参考: