mdadm raid 1 grub 仅在 sda 上

mdadm raid 1 grub 仅在 sda 上

我刚刚用 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

所以我做了一些谷歌搜索(遗憾的是谷歌已经做得很好并收集了 100 个 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

这表明 grub 现在也安装在 /dev/sdb 上,但是如果我再看一遍,仍然会得到:

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

两个驱动器的 parted 输出:

南达科他州

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

新加坡发展银行

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

/ 位于 md0 上,由 sda2 和 sdb2 组成 swap 位于 md1 上,由 sda3 和 sdb3 组成 md2 是 LVM,但是 /boot 仅位于 /sda1 上

我想这就是问题所在,解决方案是创建 md4 并让它包含 sdA1 和 sdb1

也许我脑子里有些混乱,但我认为 grub 不是安装在分区上,而是安装在驱动器的前几个块上,即 sda 或 hd0/1

如有任何澄清和建议,我们将不胜感激。

答案1

这应该是你的问题

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

采取以下步骤:

  • 在 /dev/sda1 和 /dev/sdb1 上创建 2 个 /boot 分区 - 输入 fd(Linux 自动检测 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 格式化

  • 安装您选择的 Linux,无需格式化 /boot

发行版首次启动后:

  • 修复 /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 层。

完成。这应该足以让您拥有一个“冗余”的引导加载程序。

答案2

是否要将这两个驱动器映射到另一个 raid1 阵列取决于您。这是一个合理的选择,因为这样您就可以md4直接安装 grub,从而避免手动管理两个安装的麻烦。我做到了™。

根据我的经验,设备映射文件基本上是无关紧要的,并且其行为(grub 如何读取它)充其量是不可预测的,如果不是完全任意的。

grub shell 中的命令device更加可靠。您可以阅读其帮助信息,但基本语法不言自明:

grub> device (hd0) /dev/md4

此后,hd0当前正在运行的 grub 会话将映射到 /dev/md4,而不考虑设备映射文件。从这里开始,您可以像往常一样使用 和root (hd0)。Henry setup (hd0,x)S 解释了安装到分区的原因。

据我所知,除了写入驱动器(MBR)前 512 个字节的“引导代码”(stage1)之外,唯一的东西就是该阶段应该查找菜单的分区号。

可能会弄乱。POST 后,系统会显示提示符而不是菜单,但 grub 提供了从与安装时指定的分区(文件)不同的分区(文件)“初始化”该菜单的命令。不过,这通常无需干预即可完成,因为 bios 中的“第一个启动驱动器”将被检测为“hd0”。

相关内容