
Ubuntu日本語フォーラム

ログインしていません。
ブートローダーのインストールミスからの復旧方法は環境や状況を確認してから判断すべきものなので此処では省き、本題を "その後のもう一手間" に絞ります。
「GRUBのインストールデバイスを間違ってしまった!」という場合、「grub-install」コマンドで復旧させたら後は放ったらかし、というのが一般的になっていると思います。
これは、"GRUB Legacyの頃はそれで問題なかった" という慣習に引きずられてのことだろうと思いますが、GRUB2の場合ですとそのまま放っておくと、ブートローダーの含まれている「grub-pc」パッケージの更新時に、そのミスを再現される格好となります。
何故そうなるのかは、「grub-pc」パッケージの更新時に、インストールされているブートローダーも一緒に更新されることにあるのですが、その仕組みは、ブートローダーのインストールされているデバイス(メディア)情報をdebconfが保持し、その情報を元に自動インストールを行うようになっているのですが、その情報はdebconfにより変更されるものであって、「grub-install」からは変更されないというところから来ています。
つまり、「grub-install」ではミスった時の情報が書き変わらないので、いつまで経ってもパッケージの更新でミスが再現されてしまうというわけです。
「grub-pc」パッケージの更新頻度は低いので気にする程のことでもないようにも思えますが、低いが故の "忘れた頃に不具合発生" は厄介なので、ミスした時の情報は修正しておいた方が面倒を回避できて良いのではないかと思います。
ここからはその修正方法となります。
『GRUB2を「/dev/sda1」にインストールする予定が、誤って「/dev/sda」にインストールしてしまった』場合の例です。
※ 事前に「システム」メニューにある「ディスク・ユーティリティ」などで、GRUBのインストール先となるメディアのモデル名とシリアルナンバー、そしてデバイス名を控えておいてください。(この例では、モデル名「AAAA」、シリアルナンバー「BBBB」、デバイス「/dev/sda1」とします)
※ 以降の作業は全て「端末」で行ないます。
1. 現状の確認
まず、現状のdebconfの情報がどうなっているのかを確認するため、下記コマンドを実行します。
debconf-show grub-pc | grep install_devices:
コマンドの実行結果は下記となりました。(「AAAA」の部分がモデル名で「BBBB」の部分がシリアルナンバーです)
* grub-pc/install_devices: /dev/disk/by-id/ata-AAAA_BBBB
次に、その情報の整合性と目的となるデバイスの情報を確認するために、「/dev/sda1」の情報を調べてみます。
ls -l /dev/disk/by-id/ | grep sda1
実行結果は下記となり、debconfの情報の方にパーティションを示す「-part1」が存在せず、一致していないことが確認されました。
lrwxrwxrwx 1 root root 10 2010-10-07 23:10 ata-AAAA_BBBB-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 2010-10-07 23:10 scsi-SATA_AAAA_BBBB-part1 -> ../../sda1
2. 修復
このままでは、「grub-pc」パッケージが更新される度に「ata-AAAA_BBBB」である「/dev/sda」へブートローダーをインストールされてしまいますので(※1)、下記コマンドでGRUB2のインストールデバイスを変更します。コマンドの実行中に「GRUB install devices:」の設問ダイアログが開かれますので、スペースキーで誤っている「/dev/sda」のチェックを外し、そして目的の「/dev/sda1」の方にチェックを入れます。(先にコマンドラインの設定の設問がありますが、変更する必要はありません)
sudo dpkg-reconfigure grub-pc
3. 最終確認
debconfの設定が終了しましたら、再び確認をしてみます。
debconf-show grub-pc | grep install_devices:
結果は、
* grub-pc/install_devices: /dev/disk/by-id/ata-AAAA_BBBB-part1
となり、目的のデバイス「/dev/sda1」へインストールされるようになったことが確認できました。
以上で、"その後のもう一手間" も完了となります。
※1 USB接続によるポータブル用途などのように、ミスしたマシンとは別のマシン、つまりdebconfの情報にあるメディア(ata-AAAA_BBBB*)がマシンに存在しない環境において「grub-pc」パッケージの更新が行われた場合は、情報の不整合により「GRUB install devices:」の設問ダイアログが開かれるはずなので、この場合はブートローダーがいきなり書き込まれてしまうということはないだろうと思います。が、ミスしたマシンとの兼ね合いもありますし、用心に越したことはないので修正しておいた方が良いでしょう。
余談:
fileコマンドでGRUBのインストール状況を確認しようとしたのですが、どうやらGRUB2と判断できるだけの情報は返らないようですね。
例えばブートレコードにGRUB Legacyの残骸がある場合(GRUB2による上書き)は、
$ sudo file -s /dev/sda /dev/sda: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200; partition 1: ..., code offset 0x63
となりGRUB Legacyな情報が表示されますが、真っ更な状態からGRUB2をインストールした場合は、
$ sudo file -s /dev/sda1 /dev/sda1: x86 boot sector, code offset 0x63
となるようです。
「code offset 0x63」で断定とするのは厳しいように思うので、「file -s」の用途は限定されてしまいそうですね。
オフライン