如何在RAID系统安装中安装GRUB?

我正在尝试在RAID 1设置上安装和设置Ubuntu。我有两个硬盘,sdb和sdc。我一直在按照这个指南进行操作。

https://help.ubuntu.com/community/Installation/SoftwareRAID

基本上這個方法可以幫您完成所有的設置並安裝Ubuntu。問題出在安裝結束時,它嘗試安裝GRUB引導程序。預設情況下,它會嘗試"第一個磁盤",但這導致了"致命錯誤"。我嘗試將其安裝在特定的分區,例如sdb1,以及RAID設備,例如md0,md1等等... 但似乎都不起作用。

具體的錯誤信息如下:

無法在/dev/sdb上安裝GRUB

執行 'grub-install '/dev/sdb'' 失敗。

這是一個致命錯誤。

然後我回到了主要的安裝菜單。如果我選擇"在硬碟上安裝GRUB引導程序"選項,我可以選擇分區,但輸入sdb2或md1會得到相同的錯誤。

所以我就沒有安裝GRUB,這意味著現在我大概有一個能正常工作的Ubuntu安裝,但無法啟動它。我嘗試從LiveCD啟動以安裝GRUB,但我無法chroot到我的系統,因為它似乎無法識別我的磁盤是Linux磁盤。出現了一個關於它是RAID分區的錯誤。

所以基本上我真的很想知道在安装时你是如何知道要将GRUB安装到哪个设备上,或者至少现在如何将其安装到我的系统上。
我想我还应该提一下,sda是一个Windows 7安装,我希望保留并能够在启动时访问。
谢谢任何帮助。

不说出错误是什么,我们无法提供帮助。将安装到sda(可能还包括sdb和sdc)是正确的做法。要从livecd访问raid,您需要安装mdadm软件包:sudo apt-get install --no-install-recommends mdadm - psusi
很抱歉,我已经编辑了我的帖子,包括错误信息。之所以尝试在sdb、sdc以外的位置安装,是因为我阅读了这个帖子链接,看起来似乎说我应该在/dev/mapper下找到正确的分区。但是当我在安装程序中切换到shell时,在/dev/mapper下除了control之外什么都没有显示出来。 - Kris Harper
那是针对伪RAID而非软件RAID。 - psusi
1你是使用MSDOS还是GPT分区表?如果你使用的是GPT,你必须创建一个bios_boot分区。 - psusi
1我成功地通过在每个驱动器上创建三个分区,将两组RAID在一起用于文件系统和交换分区,并留下最后两个未RAID化来使其工作。然后我选择了/boot作为其中一个的挂载点,并在安装GRUB时选择了该挂载点。这似乎能够运行。我唯一的担忧是GRUB没有安装在另一个驱动器上,所以如果有一个驱动器故障,我可能无法启动。也许我可以通过在另一个驱动器上安装GRUB来解决这个问题,尽管该分区没有设置为/boot挂载点? - Kris Harper
你不需要有单独的/boot分区。如果你的/或/boot分区位于RAID上,那么你可以将GRUB安装到RAID中的每个磁盘上,并且任何一个都可以启动。 - psusi
4个回答

我的问题是因为我的硬盘都是2TB,所以使用了GUID分区表。我最初尝试的方法没有考虑到这一点,因此安装GRUB失败了。
相反,你应该在每个硬盘上创建一个小的(1MB)分区,并将它们组成RAID,然后将其设置为GRUB引导分区(我不确定实际名称)。设置其他的RAID分区(例如交换分区和/根目录),然后GRUB安装程序应该能够正确找到引导区域。
(在Debian中,这被称为“保留的BIOS引导区”)

1这只适用于RAID1 - 我尝试使用RAID6,但它一直失败,没有任何有帮助的错误信息 :( - Mr.Gosh
你是如何创建软件RAID的?我目前也在尝试做同样的事情。请看我在ServerFault上的问题:http://serverfault.com/q/749274/71452 - c33s

这里的很多答案都是错误的,告诉你要禁用BIOS RAID!正确的解决方案在这篇博客文章中。我会在下面进行总结。
在安装过程中,当它尝试安装GRUB时,它会检测到
/dev/mapper

这是不完整的!这就是为什么GRUB安装失败的原因。
您需要安装到RAID阵列的实际名称。所以在那个步骤中,按下ctrl+alt+F2键切换到busybox终端,然后输入
ls -l /dev/mapper

从显示的列表中选择您的数组名称,然后按下ctrl+alt+F1键切换回安装界面(您可以随意来回切换,没有任何问题),并在字段中输入它。
/dev/mapper/{your array name}  

然后GRUB安装完美,你已经准备好了,拥有一个完整的BIOS RAID阵列。

7如果ls -l /dev/mapper什么都没有,只显示"control"作为其内容会怎样? - Brian Bauman
我不确定。我怀疑你此时没有BIOS RAID又称“假”RAID? - Jeff Atwood
我按照通常的步骤完成了分区和安装,但在GRUB安装阶段出现了安装失败的情况。我不确定为什么RAID在那个时候没有启动,因为安装是针对我建立的三个RAID阵列进行的——raid1 /、raid0 swap和raid1 /home。 - Brian Bauman
值得一提的是,我曾经错误地将fakeRAID和软件RAID混用。我的第一个尝试是基于使用BIOS RAID,但是这个帖子的建议推荐我使用Linux软件RAID,从那时起我一直在努力使其正常工作。我会再次尝试使用BIOS fakeRAID,并向您报告结果。 - Brian Bauman
啊,是的 - 现在我想起来为什么几个月前我放弃了那种方法 - Ubuntu只能检测到大约800GB的BIOS RAID。分散建设几个月使人很容易忘记事情! - Brian Bauman
1这个对14.04版本还有效吗?我无法在14.04中激活引导标志,所以我想知道这个解决方案是否只适用于12.04版本。 - Mr.Gosh

稍微改变了@root45的配方让我开始行动(在一个仅运行Ubuntu的系统上)。我没有将可引导分区作为Raid阵列的一部分。
我创建了一个小的可引导的GRUB分区(我选择了分区编辑器的选项:“使用'bootgrub'”或类似的选项),并且没有将其与交换和数据(/)分区一起作为Raid设备的一部分。
您可以随时将Grub2数据重写到“bootgrub”分区....实际上,安装过程会在您选择所有已安装的软件包后,或者以后任何时间,通过执行grub-install /dev/sda命令更改'sda'为您在“第一步”中用作“bootgrub”的分区设备。
如果您选择在LAMP服务器中安装许多软件包,例如,在分区之后很长一段时间才会被询问是否将Grub2数据写入硬盘...而当时提供的默认值会导致错误,直到我提供了我的“bootgrub”分区的设备...然后一切都正常了,现在我有一个可行的系统。


当我创建第一个分区(用于文件系统)时,我无法将该分区设置为可引导。选项是存在的,但如果我选择它,它只会闪烁并显示“可引导标志:否”。我继续安装了它,但在安装GRUB时仍然遇到了相同的错误。 - Kris Harper
嗯,我以前从未听说过这种行为。你用什么确切的配置来设置你的RAID? - LayerCake
我有三个硬盘,sda是Windows 7。其他两个硬盘,sdb和sdc,在启动时都是空白的。当我进入分区管理器时,我为每个硬盘创建了一个新的分区来存储文件系统。你提供的指南建议将其设置为“RAID的物理卷”,而不是“Ext4文件系统”,所以我按照这样做了。但这意味着我无法设置可引导标志。我将剩余的部分设置为交换空间,并在其他硬盘上也进行了相同操作。 - Kris Harper
听起来你好像没有完全按照指示操作。在创建RAID卷后,你必须将它们映射到RAID上,随后为其分配文件系统(例如ext4),然后才能设置可引导标志。你需要在每个驱动器上创建两个RAID分区,一个用于交换空间,一个用于根目录(/)。 - LayerCake
嗯,我最终确实做到了。但是您的指南中说,在创建软件RAID之前要“使分区可引导”,而安装程序不允许我这样做。我继续进行了安装并创建了RAID,然后将"/"和交换分区分配给了两个RAID设备。但是在尝试安装GRUB时仍然出现错误。 - Kris Harper
嗯,好的,很抱歉我无法提供更多帮助。 - LayerCake
通常提到引导标志的指令都是错误的。Linux根本不使用msdos引导标志。听起来你确实在使用GPT分区表,因为在GPT上,引导标志和RAID是互斥的。你需要创建一个小的(1MB)被标记为bios_boot的分区,在GPT上安装grub。 - psusi