我正在尝试设置一个可启动的软件 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 阵列中的每个驱动器上。
这个特殊的例子展示了如何设置 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