使用 Linux 软件 RAID 设置可启动多设备 (RAID 1)

使用 Linux 软件 RAID 设置可启动多设备 (RAID 1)

我正在尝试设置一个可启动的软件 RAID,它将包含根文件系统并启动 Linux Mint Qiana。它将用于在小型数据中心运行一些图形监控应用程序,以及用于访问其他 LAN 节点的简单终端。

我有两个 500GB SATA 驱动器(/dev/sda/dev/sdb),我将用它们来构建 RAID 1 阵列。似乎有很多方法可以做到这一点,但我不太清楚如何创建md0可启动的设备。

我的第一个方法是使用 Live Linux Mint 安装 CD 进行引导。然后,我将切换到 bash 提示符并/dev/sda使用手动分区sfdisk。我创建了一个简单的分区表,其中包括一个主分区和一个交换分区。然后,我简单地将分区表从 克隆/dev/sda/dev/sdb

sfdisk -d /dev/sda | sfdisk /dev/sdb

好的,现在我有两个驱动器可以组装成 RAID 阵列。我首先创造数组:

mdadm --create --verbose --metadata=0.90 /dev/md0 --level=mirror 
   --raid-devices=2 /dev/sda /dev/sdb

大约一个小时后,阵列同步完成。

我现在可以/dev/md0通过赋予它一个文件系统来初始化:

mke2fs -t ext4 /dev/md0

好的,现在一切似乎都很好。因此,我切换回 Live CD 安装,并将 Linux 安装到 上/dev/md0。一切正常,直到安装程序尝试运行grub-install,之后它收到致命错误。

因此,我一直在研究,试图了解这里的原因。我不完全确定为什么会发生这种情况,但我的理解是,这与“不能简单地从/dev/md0”这一事实有关。似乎为了创建可启动的多设备 RAID 1 阵列,您需要创建单独的非 RAID 分区/boot,或者使用initramfs

不幸的是,我不太明白这意味着什么。首先,我不创建一个单独的非 RAID/boot分区,因为整个启动过程md0都是为了冗余。其次,我的理解是该initramfs方法需要mdadm在启动时加载到 rootfs 中。但是,当我从 Live CD 启动并创建我的 RAID 阵列时,它mdadm已经加载到内存中,所以我不明白为什么安装程序在运行时总是出现致命错误grub-install

有人可以解释一下我在这里遗漏了哪些步骤,或者提供如何设置可以启动的多设备挂载的概要吗?

答案1

使用软件 RAID 启动几乎总是需要单独的 /boot 分区,尤其是使用旧版本的 GRUB 时。在为 /boot 创建 RAID-1 分区时还需要指定“--metadata=0.90”。

/boot 应为第一个分区,并保持较小。这主要是为了旧式 BIOS 启动。/boot 应为单独分区的另一个原因是,它通常应在 /etc/fstab 中以只读模式挂载。您应仅在进行内核升级之前将其重新挂载为读写模式。

我使用的典型驱动器设置是:

/dev/sda1 + /dev/sdb1 = /dev/md0 Software RAID-1 with metadata 0.90
/dev/sda2 + /dev/sdb2 = /dev/md### Software RAID-1 with LVM on top

我总是将 /dev/md0 用于 /boot 分区。对于 LVM 区域,我使用一个低于 125 的随机数作为 mdadm 设备号,主要是为了防止在启动时将此驱动器连接到其他服务器(即在恢复期间通过 USB)时出现问题。

在 /boot 上设置 RAID-1 后,您必须将 GRUB 安装到 RAID-1 阵列中的每个驱动器上。

RAID 故障(软件 RAID)后如何启动?

这个特殊的例子展示了如何设置 3 路 RAID-1 镜像,以便所有三个驱动器都可以通过 GRUB 启动。

# grub
grub> find /grub/stage1
 (hd0,0)
 (hd1,0)
 (hd2,0)
grub> device (hd0) /dev/sda
grub> root (hd0,0)
grub> setup (hd0)
grub> device (hd0) /dev/sdb
grub> root (hd0,0)
grub> setup (hd0)
grub> device (hd0) /dev/sdc
grub> root (hd0,0)
grub> setup (hd0)
grub> quit

相关内容