web-dev-qa-db-ja.com

mdadm raid sdaでのみ1 grub

MdadmでCentOS 6.3 64ビットサーバーのセットアップを完了したところですが、電球が点灯し、grubは最初のドライブにのみインストールされることに気付きました。

私は私の疑いを確認するために一見した:

grub> find /grub/stage1
find /grub/stage1
 (hd0,0)

そこで、デバイスマップを次のように更新しました。

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

((hd1)エントリは私が追加したことに注意してください

それで私は/ dev/sdbにgrubをインストールしようとしました

そして私は得る:

grub> root (hd1,0)
root (hd1,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
setup (hd1)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... no

Error 15t: File not found

だから私はグーグルをやった(悲しいことにグーグルはちょうど良い仕事をして、ここでは役に立たない何百ものGRUBインストール例を拾った)

いくつかの手がかりを見つけた後、私は試しました:

# grub-install --recheck /dev/sdb

Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

# grub-install /dev/sdb
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

/ dev/sdbにgrubがインストールされていることを示唆しているのはどのような種類ですが、もう一度見てみると、やはり次のようになります。

grub> find /grub/stage1
find /grub/stage1
 (hd0,0)

2つのドライブの分割出力:

SDA

Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  500MB   500MB   ext3         1     boot
 2      500MB   81.0GB  80.5GB               2     raid
 3      81.0GB  85.0GB  4000MB               3     raid
 4      85.0GB  3001GB  2916GB               4     raid

SDB

Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  500MB   500MB   ext3         1
 2      500MB   81.0GB  80.5GB               2     raid
 3      81.0GB  85.0GB  4000MB               3     raid
 4      85.0GB  3001GB  2916GB               4     raid

そして、mdadm mdstat:

Personalities : [raid1]
md1 : active raid1 sdb3[1] sda3[0]
      3905218 blocks super 1.1 [2/2] [UU]

md2 : active raid1 sdb4[1] sda4[0]
      2847257598 blocks super 1.1 [2/2] [UU]

md0 : active raid1 sda2[0] sdb2[1]
      78612189 blocks super 1.1 [2/2] [UU]

誰かが状況に光を当てることができる人はいますか?私は現時点で私がそこに99%いて、明らかな何かを見逃しているように感じます。

ありがとう。

更新を編集:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/md0               74G   18G   53G  25% /
tmpfs                 580M     0  580M   0% /dev/shm
/dev/sda1             462M   98M  341M  23% /boot
xenstore              580M   64K  580M   1% /var/lib/xenstored

/はsda2で構成されるmd0にあり、sdb2はsda3であり、sdb3であるmd1はLVMですが、/ bootは/ sda1にのみあります

私はそれが問題だと思いますが、解決策はmd4を作成してsd a 1とsd b 1を含めることです。

頭の中で少し混乱しているかもしれませんが、パーティションにgrubがインストールされていないのではなく、ドライブの最初の数ブロック、つまりsdaまたはhd0/1がインストールされていると思いました。

明確化とアドバイスをいただければ幸いです。

7
Backtogeek

これはあなたの問題になるはずです

root (hd1,0)
 Filesystem type is ext2fs, partition type 0x83

次の手順を実行します。

  • / dev/sda1と/ dev/sdb1に2つの/ bootパーティションを作成します-fd(Linux autodetect raid)と入力します-お気に入りのツール(fdisk、cfdisk、gpartedなど)を使用します(GPTの場合はfd00)
  • 両方のパーティション、sda1とsdb1(GPTではない)で起動可能フラグをオンにすることを忘れないでください。
  • ディスクを強制的に新しいRAIDにします。

    mdadm --zero-superblock /dev/sda1 
    mdadm --zero-superblock /dev/sdb1
    
  • / bootパーティションになるraidメタデータを作成するときは、バージョン0.9を使用します。 Linuxは新しいバージョンを自動検出できません(ramdiskなし)。

    mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sda1 /dev/sdb1 --metadata=0.9
    
  • Ext2またはext3を使用したフォーマット

  • / bootをフォーマットせずに、選択したLinuxをインストールします

ディストリビューションの最初の起動後:

  • / etc/fstabを修正して、/ bootが/ dev/md0を指すようにします(おそらく必要ないでしょう)。
  • 2つのディスクMBRにGRUBをインストールします

    # grub /dev/sda
     grub> root (hd0,0)
     grub> setup (hd0)
     grub> quit
     quit
    
    # grub /dev/sdb
     grub> root (hd1,0)
     grub> setup (hd1)
     grub> quit
     quit
    
  • ブートローダーを編集する(Grub1への指示)

  • 「デフォルト」行を検索し、以下の「フォールバック」オプションを追加します

    vi /boot/grub/menu.lst
    default 0
    fallback 1
    
  • ブートローダーに別のエントリを追加します(ここでも、私がgrub1を選んだのは、それほど複雑ではなく、自分のニーズに十分対応できるためです)、それぞれがraidのメンバーである異なるブートパーティションをポイントしています。

    title           Debian GNU/Linux, kernel 2.6.32-5-686  (default)
    root            (hd0,0)
    kernel          /vmlinuz-2.6.32-5-686 root=/dev/mapper/vg-root ro quiet
    initrd          /initrd.img-2.6.32-5-686
    
    title           Debian GNU/Linux, kernel 2.6.32-5-686  (fallback)
    root            (hd1,0)
    kernel          /vmlinuz-2.6.32-5-686 root=/dev/mapper/vg-root ro quiet
    initrd          /initrd.img-2.6.32-5-686 
    
  • 私の場合、私の/ md raidにLVMレイヤーがあることに注意してください。

できました。これは、「冗長な」ブートローダーを用意するのに十分なはずです。

4
user122772

これら2つのドライブを別のraid1アレイにマップするかどうかは、あなた次第です。これは、grubを_md4_に直接インストールして、両方のインストールを手動で管理する煩わしさを回避できるため、これは正当な選択です。私はそれをやった™。

私の経験では、デバイスマップファイルはほとんど無関係であり、その動作(grubによるファイルの読み取り方法)は、完全に恣意的ではないとしても、せいぜい予測不可能です。

Grubシェルからのdeviceコマンドは、はるかに信頼性が高くなっています。あなたはそれに関するヘルプ情報を読むことができますが、基本的な構文はそれ自体で分かります:

_grub> device (hd0) /dev/md4
_

その後、/ dev/md4は、現在実行中のgrubセッションで_hd0_にマップされ、デバイスマップファイルは無視されます。ここから、通常どおりroot (hd0)およびsetup (hd0,x)を使用します。パーティションにインストールする理由は、Henry Sによって説明されています。

AFAIK、ドライブ(MBR)の最初の512バイトに書き込まれる「ブートコード」(stage1)以外の唯一のものは、そのステージがメニューを探すパーティションの数です。

それを台無しにすることは可能です。 POST後にメニューではなくプロンプトが表示されますが、grubは、インストール時に一度指定されたものとは異なるパーティション(ファイル)からそのメニューを「初期化」するためのコマンドを提供します。 BIOSの「最初の起動ドライブ」は「hd0」として検出されるため、通常は介入なしで機能します。