使用Linux软件RAID设置可引导的多设备(RAID 1)

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

我有两个500GB SATA驱动器( /dev/sda/dev/sdb ),我将用它来构buildRAID 1arrays。 似乎有很多方法可以做到这一点,但是如何创build一个可引导的md0设备还有点不清楚。

我的第一个方法是使用Live Linux Mint安装光盘启动。 然后我会切换到bash提示符,并使用sfdisk手动分区/dev/sda 。 我创build了一个简单的分区表,其中包括一个主分区,以及一个交换分区。 然后我简单地将分区表从/dev/sda克隆到/dev/sdb

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

好的,现在我有两个驱动器可以组装成一个RAIDarrays。 我首先创build数组说:

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

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

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

 mke2fs -t ext4 /dev/md0 

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

所以,我一直在研究试图理解这里的原因。 我不完全确定为什么发生这种情况,但我的理解是,这与“一个不从/dev/md0启动”有关。 看起来,要创build一个可启动的多设备RAID 1arrays,您需要创build一个单独的非RAID /boot分区,或使用initramfs

不幸的是,我不完全明白这是什么意思。 首先,我不想创build一个单独的非RAID /boot分区,因为从md0引导的整个引导是为了冗余。 其次,我的理解是initramfs方法在启动的时候需要将mdadm加载到rootfs中。 但是,从Live CD启动并创buildRAIDarrays时, mdadm已经加载到内存中,所以我不明白为什么安装程序在运行grub-install时总是出现致命错误。

有人可以解释我在这里错过了什么步骤,或提供如何设置可启动的多设备安装大纲?

使用软件启动RAID几乎总是需要单独的/启动分区,尤其是在旧版本的GRUB中。 为/ boot创buildRAID-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-1arrays中的每个驱动器上。

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