grub-pc を使って2台目のハードディスクのMBRにもGRUB2をインストールする (このやり方で合っているかちょっと自信が無い。だって情報が少ないんだもん・・・)。

今回のRAID1(ミラーリング)の構成。

OS: Debian GNU/Linux squeeze

2台のHDD(/dev/sda, /dev/sdb)にそれぞれ /boot, swap, / 用のパーティションを作成してRAID1を組んである。

・md0 = /boot
・md1 = (swap)
・md2 = /


# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/md2              915G  5.3G  863G   1% /
tmpfs                 3.8G     0  3.8G   0% /lib/init/rw
udev                  3.8G  188K  3.8G   1% /dev
tmpfs                 3.8G     0  3.8G   0% /dev/shm
/dev/md0              461M   28M  410M   7% /boot
 
# cat /proc/mdstat 
Personalities : [raid1] 
md2 : active raid1 sda3[0] sdb3[1]
      974319480 blocks super 1.2 [2/2] [UU]
      
md1 : active (auto-read-only) raid1 sda2[0] sdb2[1]
      1951732 blocks super 1.2 [2/2] [UU]
      
md0 : active raid1 sda1[0] sdb1[1]
      487412 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

grub-pc で2台目のHDDにGRUB2をインストールする

dpkg-reconfigure grub-pc を実行。


# dpkg-reconfigure grub-pc
grub-probe: warn: Discarding improperly nested partition (hd1,msdos1,msdos1).
grub-probe: warn: Discarding improperly nested partition (hd1,msdos1,msdos1).
grub-probe: warn: Discarding improperly nested partition (hd1,msdos1,msdos1).
grub-probe: warn: Discarding improperly nested partition (hd1,msdos1,msdos1).
grub-probe: warn: Discarding improperly nested partition (hd1,msdos1,msdos1).
grub-probe: warn: Discarding improperly nested partition (hd1,msdos1,msdos1).

なんか警告出まくり。。。


 ┌───────────────────────┤ grub-pc を設定しています ├────────────────────────┐
 │                                                                           │ 
 │ grub-pc パッケージのアップグレード中です。このメニューでは、もしデバイス  │ 
 │ があれば、どのデバイスに自動的に grub-install を実行するかを選べます。    │ 
 │                                                                           │ 
 │ インストール済みの GRUB コアイメージが GRUB モジュールや grub.cfg との同  │ 
 │ 期がずれるのを防ぐため、ほとんどの場合、自動的に grub-instsall を実行す   │ 
 │ るのがお勧めです。                                                        │ 
 │                                                                           │ 
 │ BIOS でどのドライブが起動ドライブとして設定されているのか判らないのであ   │ 
 │ れば、すべてに GRUB をインストールするのが大抵の場合良い考えです。        │ 
 │                                                                           │ 
 │ 注意: パーティションブートレコードに GRUB をインストールするのも可能です  │ 
 │ 。そして、ここでは適切なパーティションが表示されます。しかし、これによっ  │ 
 │ て GRUB がブロックリストの仕組みを強制的に使うようになります。この仕組み  │ 
 │ は信頼性に欠けるため、お勧めはしません。                                  │ 
 │                                                                           │ 

日本語ありがたい。


 ┌─────────┤ grub-pc を設定しています ├─────────┐
                │ GRUB をインストールするデバイス:             │ 
                │                                              │ 
                │    [*] /dev/sda (1000204 MB; ST31000524AS)   │ 
                │    [*] /dev/sdb (1000204 MB; ST31000524AS)   │ 
                │    [ ] /dev/md0 (499 MB; hoge:0)            │ 
                │    [ ] /dev/md2 (997703 MB; hoge:2)         │ 
                │                                              │ 
                │                                              │ 
                │                    <了解>                    │ 
                │                                          

/dev/sda にしかチェックが入ってなかったので、 /dev/sdb にもチェックを入れて「了解」する。

そしたらまた大量の警告がでるでる。同じ内容(warn: Discarding improperly nested partition (hd1,msdos1,msdos1))がぶわーっと。

以下、警告ログは一部省略。


/usr/sbin/grub-setup: warn: Discarding improperly nested partition (hd1,msdos1,msdos1).
Installation finished. No error reported.
/usr/sbin/grub-setup: warn: Discarding improperly nested partition (hd1,msdos1,msdos1).
Installation finished. No error reported.
/usr/sbin/grub-probe: warn: Discarding improperly nested partition (hd1,msdos1,msdos1).
Generating grub.cfg ...
/usr/sbin/grub-probe: warn: Discarding improperly nested partition (hd1,msdos1,msdos1).
Found linux image: /boot/vmlinuz-2.6.32-5-amd64
Found initrd image: /boot/initrd.img-2.6.32-5-amd64
/usr/sbin/grub-probe: warn: Discarding improperly nested partition (hd1,msdos1,msdos1).
done

まあ「Installation finished. No error reported」って出てるから良しとする。

GRUB2インストール状況の確認

一部伏字。


# debconf-show grub-pc
  grub-pc/kopt_extracted: false
  grub2/kfreebsd_cmdline:
  grub2/device_map_regenerated:
* grub-pc/install_devices: /dev/disk/by-id/ata-ST31000524AS_6VPD****, /dev/disk/by-id/ata-ST31000524AS_6VPD****
  grub-pc/postrm_purge_boot_grub: false
  grub-pc/install_devices_failed_upgrade: true
  grub-pc/disk_description:
* grub2/linux_cmdline:
  grub-pc/install_devices_empty: false
  grub2/kfreebsd_cmdline_default: quiet
  grub-pc/partition_description:
  grub-pc/install_devices_failed: false
  grub-pc/install_devices_disks_changed:
* grub2/linux_cmdline_default: quiet
  grub-pc/chainload_from_menu.lst: true
  grub-pc/mixed_legacy_and_grub2: true

# file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0xfd, active, starthead 32, startsector 2048, 974848 sectors; partition 2: ID=0xfd, starthead 206, startsector 976896, 3905536 sectors; partition 3: ID=0xfd, starthead 233, startsector 4882432, 1948641280 sectors, code offset 0x63
 
# file -s /dev/sda1
/dev/sda1: x86 boot sector, code offset 0x52, OEM-ID "NTFS    ", sectors/cluster 8, reserved sectors 0, Media descriptor 0xf8, heads 255, hidden sectors 2048, dos < 4.0 BootSector (0x80)
 
# file -s /dev/sda2
/dev/sda2: data
 
# file -s /dev/sda3
/dev/sda3: data
 
# file -s /dev/sdb
/dev/sdb: x86 boot sector; partition 1: ID=0xfd, active, starthead 32, startsector 2048, 974848 sectors; partition 2: ID=0xfd, starthead 206, startsector 976896, 3905536 sectors; partition 3: ID=0xfd, starthead 233, startsector 4882432, 1948641280 sectors, code offset 0x63
 
# file -s /dev/sdb1
/dev/sdb1: x86 boot sector; partition 1: ID=0x7, starthead 65, startsector 2048, 1953517568 sectors, extended partition table (last)\011, code offset 0x0
 
# file -s /dev/sdb2
/dev/sdb2: data
 
# file -s /dev/sdb3
/dev/sdb3: data

また、


ls -l /dev/disk/by-id/ 

とやってもHDDの情報がいくらか見れる。

参考情報

「GRUBのインストールデバイスを間違ってしまった!」という場合、「grub-install」コマンドで復旧させたら後は放ったらかし、というのが一般的になっていると思います。
これは、"GRUB Legacyの頃はそれで問題なかった" という慣習に引きずられてのことだろうと思いますが、GRUB2の場合ですとそのまま放っておくと、ブートローダーの含まれている「grub-pc」パッケージの更新時に、そのミスを再現される格好となります。

何故そうなるのかは、「grub-pc」パッケージの更新時に、インストールされているブートローダーも一緒に更新されることにあるのですが、その仕組みは、ブートローダーのインストールされているデバイス(メディア)情報をdebconfが保持し、その情報を元に自動インストールを行うようになっているのですが、その情報はdebconfにより変更されるものであって、「grub-install」からは変更されないというところから来ています。
つまり、「grub-install」ではミスった時の情報が書き変わらないので、いつまで経ってもパッケージの更新でミスが再現されてしまうというわけです。

Ubuntu日本語フォーラム / GRUB2のインストールデバイスを間違ってしまった!「grub-install」で復旧させたが、再び再現されてしまった!の改善方法
パッケージ: grub-pc (1.98+20100804-14+squeeze1)

GRand Unified Bootloader バージョン 2 (PC/BIOS バージョン)

GRUB は移植可能で強力なブートローダです。このバージョンの GRUB は前のバージョンよりもきれいな設計に基づいており、また以下のような新しい特徴を持っています。

- BASH のような文法を使った grub.cfg の中でのスクリプトをサポート
- GPT のような最新のパーティションマップのサポート
- update-grub による grub.cfg のモジュール的な生成。GRUB のアドオンを提供するパッケージは、スクリプトに書いた自分のルールを組み込み、update-grub2を実行することで、更新をトリガすることができます。
- 背景画像と完全 24 ビットカラーのサポートを含む VESA ベースのグラフィカルモード
- 拡張された文字セットのサポート。メニューの項目に UTF-8 のテキストを書くことができます。

このパッケージには、伝統的な PC/BIOS アーキテクチャで使うために構築されたバージョンの GRUB が含まれています。

Debian -- squeeze の grub-pc パッケージに関する詳細
以下は、mdadm 3.x のデフォルト値で作成した、あるいはメタデータバージョンが明示的に -e を使って設定された RAID デバイスから、grub-pc ブートローダを使って直接カーネルを読み込みたいユーザのみに当てはまります。つまり、これは Debian squeeze のインストール中、あるいはインストール後に作成されたすべてのデバイスに当てはまります。以前のバージョンの mdadm を使って作成されたアレイと、コマンドラインオプション -e 0.9 で作成された RAID は影響を受けません。

バージョン 1.98+20100720-1 以前の grub-pc は 1.x メタデータ形式の RAID からは直接起動できなくなります (新しいデフォルトは 1.2 です)。ちゃんとシステムが起動できるようにするには、Debian squeeze で提供されている grub-pc 1.98+20100720-1 、あるいはそれ以降のバージョンを必ず利用するようにしてください。起動できなくなったシステムは Super Grub2 Disk、または grml を使うと救出できるかもしれません。

第5章 squeeze で知っておくべき問題点 - 5.1.2. mdadm メタデータ形式の変更は最新の Grub を必要とします

tags: debian grub raid

Posted by NI-Lab. (@nilab)