3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

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になってからどうも魅力に欠けるようになってますね。。。

参考:

Grub2の再インストール