创建分区 raid1 阵列以启动 debian squeeze 系统

创建分区 raid1 阵列以启动 debian squeeze 系统

我想要有以下 raid1 (镜像) 设置:

/dev/md0 consists of /dev/sda and /dev/sdb

我使用以下方法创建了这个 raid1 设备

mdadm --create --verbose /dev/md0 --auto=yes --level=1 --raid-devices=2 /dev/sda /dev/sdb

这给出了一个警告,说明元数据是 1.2,我的系统可能无法启动。我不能使用 0.9,因为它将 raid 的大小限制为 2TB,我认为最新的 debian (squeeze) 附带的 grub 应该能够处理元数据 1.2。

因此我创建了所需的分区,如下所示:

# creating new label (partition table)
parted -s /dev/md0 mklabel 'msdos'

# creating partitions
sfdisk -uM /dev/md0 << EOF
0,4096
,1024,S
;
EOF

# making root filesystem
mkfs -t ext4 -L boot -m 0 /dev/md0p1

# making swap filesystem
mkswap /dev/md0p2

# making data filesystem
mkfs -t ext4 -L data /dev/md0p3

然后我挂载了根分区,复制了一个最小的 debian 安装到里面,并临时挂载了 /dev /proc /sys。之后我 chroot 到新的根文件夹并执行:

grub-install --no-floppy --recheck /dev/md0

然而这失败了:

/usr/sbin/grub-probe:错误:未知文件系统。自动检测 /dev/md0p1 文件系统失败。请将此信息与“/usr/sbin/grub-probe --device-map=/boot/grub/device.map --target=fs -v /boot/grub”的输出一起报告给

我不认为这是 grub 中的错误(所以我还没有报告),而是我自己的错误。所以我真的很想知道如何正确设置我的 raid1,到目前为止我尝试的所有方法都失败了。

答案1

您应该将 grub 安装在磁盘 MBR 上,而不是 /dev/md0 上,因此请运行grub-install /dev/sda ; grub-install /dev/sdb。这样效果会更好吗?

答案2

我认为在 raid 上创建分区不是一个好主意。更好的方法是在每个设备上创建分区,然后相应地创建 raid。

此外,创建 2 个大小完全相同的可启动分区(就像 raid 分区的大小应该匹配一样),它们不会成为 raid 的一部分,并确保它们完全相同,以便系统可以从其中任一个启动。

我还更喜欢为常用位置(例如 /var、/tmp、/usr、/home 等)设置单独的分区。

例如:

/dev/sd[ab]1 - /boot
/dev/sd[ab]2 - swap
/dev/sd[ab]3 - /
/dev/sda[ab]4 - /usr
/dev/sda[ab]5 - /tmp
/dev/sda[ab]6 - /var
/dev/sda[ab]7 - /home

为除第一个分区之外的每个分区创建 RAID。例如:

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[ab]2

等等。

然后将 /boot 分配给 /dev/sda1,并确保 MBR 保存到 /dev/sda 和 /dev/sdb。整个系统安装完成后,您可以这样做(bs=500M 将大大加快 dd 的速度,将 500M 调整为系统内存的 2/3 左右):

dd bs=500M if=/dev/sda1 of=/dev/sdb1

现在,只要 bios 尝试从任一磁盘启动,那么如果其中一个磁盘发生故障,系统将自动从另一个磁盘启动,因为 UUID 完全相同。如果 /boot 发生变化(例如内核升级),请不要忘记有时重复 dd 命令。

不过,您确实需要通过更改 bios 启动优先级来测试它。如果您觉得幸运的话,可以通过拔出一个磁盘来测试它 :-)

这也适用于 raid10,我已经使用 raid1 和 raid10 甚至 3 磁盘 raid10 完成了此操作(实际上使用 mdadm 可以实现)。

顺便说一句,您必须使用不属于 raid 的启动分区,否则您的系统将无法启动。必须有一种方法可以启动 raid,而且由于它是软 raid,因此必须先加载内核才能识别 raid。

答案3

请执行sudo update-grub。有可能您的设备/boot/grub/device.map地图不是最新的,并且过时的设备地图的错误是相同的。

相关内容