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