我有一台装有 Debian Jessie 的服务器,4 个驱动器 sda 到 sdd,所有驱动器都以相同的方式分区。系统处于 raid1 md raid 中,覆盖所有驱动器。所有驱动器都有 grub,我可以互相交换光盘,每个驱动器都可以启动,系统启动顺利。所有驱动器都包含完全相同的格式:
sdx1 - Boot Partition, GRUB installed
sdx2 - Raid 1 /boot
sdx3 - Raid 1 /
sdx4 - Raid 10 swap
sdx5 - non-md btrfs Raid 6 /data
数据分区是 raid6 btrfs,我目前正尝试通过将驱动器换成更大的驱动器来升级我的容量,因为我可能会遇到两次故障,所以我的第一反应就是更换其中一个驱动器并重新启动,用新安装的驱动器恢复发生故障的 raid 阵列,重建后一切都恢复正常。
但是,一旦我将驱动器换成使 raid 阵列无效的驱动器,机器(遗憾的是目前没有头)就无法启动。我可以整天交换磁盘,它都能顺利启动。但是,如果我移除磁盘或换成不属于 raid 的任何内容,它就会无法启动。
我是不是漏掉了什么?我怎么才能告诉 md 可以在缺少光盘/阵列降级的情况下自动启动?最后,就 md 而言,即使四张光盘中的一张也可以单独支持整个系统,数据分区是另一个难题,因为它至少需要两个驱动器,但 md 不必担心这一点,因为那是一个纯粹的 btrfs raid。
我知道对于当前的用例,我可以从磁盘阵列中移除驱动器,对其进行升级,然后将其放回原处,但如果发生故障,如果系统无法启动,我就无法移除驱动器。
答案1
作为更新和答案 - 与此同时,我发现这里唯一真正缺少的是 fstab 中的 nofail 标志。文件系统已降级,如果不设置 nofail 选项,则无法将文件系统挂载在降级状态下。
答案2
据我所知,目前还无法使用 mdadm 创建 raid,这样您就可以在没有单独启动分区的情况下从中启动。我假设您以与此处所述类似的方式进行设置,它使用 raid10,但适用于其他 raid 级别:
如何使用 3 或 4(或更多)磁盘软件 raid10 创建可启动的冗余 Debian 系统?
有可能您没有在 bios 中配置要启动的其他磁盘?否则启动分区不完全相同,即具有相同 UUID 的精确副本。
要使特定磁盘能够启动,该磁盘需要有一个引导扇区,并且需要将 bios 配置为从该磁盘启动(以及 raid 中的其他启动磁盘列表)。当然,要成功完成启动,磁盘还需要有一个启动分区。由于这些启动分区不是 raid 的一部分,因此每个启动磁盘都有自己的启动分区。如果您确保每个启动分区都包含完全相同的文件系统(例如,使用 dd 将其复制过来),并且每个磁盘都有一个使用该启动分区上的映像创建的引导扇区,则系统应该能够从任何磁盘启动。即使 raid 降级,降级的 raid 也不应该阻止成功启动。否则,这会使拥有 raid 的巨大好处变得毫无意义。
引用链接:
组成 RAID 的每个磁盘都应有一个约 1 GB 的可引导分区,该分区不属于 RAID。按正常方式创建这些分区,它们的大小必须完全相同。将它们标记为可引导,其中一个磁盘上的挂载点应为 /boot,其他磁盘可以保持未挂载状态。
一旦您使用 dd 制作了启动分区的精确副本:
现在确保您的 bios 配置为尝试从所有 3 个磁盘启动,顺序无关紧要。只要 bios 尝试从任何磁盘启动,那么如果其中一个磁盘发生故障,系统将自动从另一个磁盘启动,因为 UUID 完全相同。