请注意最后的编辑
我正在一台旧机器(BIOS 不支持 UEFI)上使用 Ubuntu Server 14.04.1 构建家庭服务器(我的第一次尝试),我想使用 3 个空磁盘(每个 3TB)在 RAID5 上设置整个系统。我不会在那台机器上安装任何其他操作系统。
我主要遵循了本指南,但我的理解是 grub2 支持 mdadm 创建的 RAID 和 LVM2,因此不需要修改/boot
分区(基于以下答案这;同一用户@psusi 也发表了评论在 AskUbuntu 上达到同样的效果)。因此,我设置了以下分区方案:
每个驱动器都有一个单独的分区,该分区占据了服务器实时安装程序将使用的驱动器空间(每个驱动器末尾仍有大约 1MB 未使用)。我要重申,我的系统不支持 UEFI,因此我只能假设实时安装程序在所有驱动器上创建了一个 MBR 表。这些分区被标记为在 RAID 中使用。
md0
使用这 3 个分区创建单个 RAID5 设备。单个 LVM 物理卷填满
md0
。它有一个卷组srv-vg1
,其中包含 3 个逻辑卷:srv-lvboot
包含 5GB,用作ext4
并安装为/boot
srv-lvswap
包含 20GB(故意过度杀伤)并使用LUKS
随机密钥,我在其上创建了一个linux-swap
分区(安装为swap
)。srv-lvroot
跨越逻辑组的其余部分,并与密码一起使用LUKS
,我在其上创建了一个作为安装的单个ex4
分区/
。
使用这个分区方案,我继续安装,直到我被提示Install the GRUB boot loader to the master boot record
(我的第一个驱动器)。我试图继续,但返回了一条错误消息:
无法在 /dev/sda 中安装 GRUB
执行“grub-install /dev/sda”失败。
这是一个致命的错误。
我可以返回并尝试将 GRUB 安装到其他设备,但我不知道该选择哪一个(如果我将它安装到md0
或srv-lvboot
,假设它可以工作,那么我是否需要从另一个引导加载程序进行链式加载?)。另外,我不确定我的分区方案是否可行。有人可以帮忙吗?
编辑:
我最终发现,grub 无法安装到我的第一个磁盘的 MBR 的原因是我的磁盘(3TB)有一个 GPT 表,所以我应该bios_grub
在每个驱动器的开头创建一个带有标志的 2MB 分区。这样做之后,安装完成,没有错误。但是,我的服务器没有启动到 Ubuntu。相反,它不断重新启动(显然 grub 因某种原因无法加载到操作系统中)。我尝试使用启动修复来解决这个问题,但没有成功(据说它将其日志保存到http://paste.ubuntu.com/9414135)。
答案1
事实证明,真正的潜在问题是我在问题末尾添加的:由于机器无法从 UEFI 启动,因此 grub 需要专用分区(2MB 是据说在每个驱动器(至少是每个您计划在阵列降级时能够从其引导的驱动器)的开头添加“bios_grub”标志(绰绰有余)。您可以在实时安装程序中设置这些,方法是选择使用这些分区进行安装bios boot
。
(这个修复最初对我来说不起作用的原因是,我在运行 Ubuntu Server 安装程序之前使用另一个 live-cd 创建了分区,这让事情变得有点混乱。)
我想提一下 @kyodake 的提醒,关于将 grub 安装到 RAID 阵列中其余磁盘的 MBR 的必要性(我发现手动运行sudo grub-install /dev/sdX
速度最快)。最后,为了完整起见,我要强调,单独/boot
分区的原因是,这样可以加密文件系统的其余部分(如我链接的指南中所述,并在我自己的分区方案中总结)。如果不愿意实施全卷加密,那么创建单独分区就没什么好理由了。
答案2
Grub2 完全支持 RAID 和 LVM。
事实上您根本不需要单独的 /boot 分区。
您还需要将 grub 安装到 raid5 中的所有驱动器。
Ubuntu grub-pc 包将提示您检查所有想要安装它的驱动器并为您安装。