跳转至内容

使用 Fake RAID 安装 Arch Linux

来自 ArchWiki
(重定向自 Fakeraid)

本指南的目的是允许使用板载 BIOS RAID 控制器创建的 RAID 组,从而允许使用 GRUB 从 RAID 组 **内部** 的分区双启动 Linux 和 Windows。在使用所谓的“Fake RAID”或“Host RAID”时,磁盘组通过 /dev/mapper/chipsetName_randomName 访问,而不是 /dev/sdX

什么是“Fake RAID”

来自 Wikipedia:RAID

基于操作系统的 RAID 并不总是能保护引导过程,并且在 Windows 桌面版本上通常不实用。硬件 RAID 控制器价格昂贵且专有。为了填补这一空白,引入了廉价的“RAID 控制器”,它们不包含 RAID 控制器芯片,而只是一个带有特殊固件和驱动程序的标准磁盘控制器芯片。在引导的早期阶段,RAID 由固件实现。当加载了 Linux 或 Microsoft Windows 最新版本等受保护模式操作系统内核时,驱动程序就会接管。
这些控制器被制造商称为 RAID 控制器,但很少向购买者明确说明 RAID 处理的负担是由主机中央处理单元承担——而不是 RAID 控制器本身——从而引入了硬件控制器不会遇到的 CPU 开销。固件控制器通常只能在其 RAID 阵列中使用特定类型的硬盘(例如,Intel Matrix RAID 的 SATA,因为现代 Intel ICH 南桥不支持 SCSI 或 PATA;但是,主板制造商会在某些主板上将 RAID 控制器实现到南桥之外)。在此之前,“RAID 控制器”意味着控制器执行处理,而这种新类型在技术上知识渊博的圈子里被称为“Fake RAID”,即使 RAID 本身是正确实现的。Adaptec 将其称为“Host RAID”。

另请参阅 Ubuntu 文档社区的 FakeRaidHowto 获取更多信息。

尽管存在术语上的差异,“fake RAID”(伪 RAID)通过 dmraid 实现,但它是一个健壮的软件 RAID 实现,它提供了一个可靠的系统,可以在多个磁盘之间镜像或条带化数据,并且对任何现代系统来说开销都可以忽略不计。dmraidmdadm(纯 Linux 软件 RAID)相当,但它有一个额外的优势,即能够在驱动器发生故障**之前**完全重建驱动器。然而,请注意,并非所有 BIOS RAID 实现都支持驱动器重建。相反,它们依赖非 Linux 软件来执行重建。如果您的系统无法在 BIOS RAID 设置实用程序中重建驱动器,强烈建议您使用 mdraid(通过 mdadm 实现的纯 Linux 软件 RAID - 请参阅 RAID)而不是 dmraid,否则在驱动器发生故障时您将无法重建阵列,或者在主板发生故障时无法从阵列中检索信息,除非进行大量额外的工作。

本文或本章节已过时。

原因:安装步骤未反映当前的 Arch Linux 安装过程。需要更新。顺便说一句,Intel 现在似乎推荐使用 mdadm 而不是 dmraid。有关使用 MBR 磁盘分区布局、Intel FakeRAID 和 mdadm 进行安装的示例,请参阅 #使用 mdadm 和 Intel FakeRAID 的 MBR 安装示例。(在 Talk:Install Arch Linux with Fake RAID#Out of date page? (use mdadm instead of dmraid) 中讨论)

准备工作

警告 在进行 RAID 操作之前,请备份所有数据。您对硬件的操作仅由您自己负责。RAID 条带上的数据极易因磁盘故障而丢失。定期备份或考虑使用镜像集。请自行承担风险!
  • 在另一台机器上打开任何需要的指南(安装指南)。如果您无法访问另一台机器,请将其打印出来。
  • 下载最新的 Arch Linux 安装镜像。
  • 备份所有重要文件,因为目标分区上的所有内容都将被销毁。

配置 RAID 组

警告 如果您的驱动器尚未配置为 RAID 并且 Windows 已安装,切换到“RAID”可能会导致 Windows 在启动时蓝屏。[1]
  • 进入 BIOS 设置并启用 RAID 控制器。
    • BIOS 可能包含一个选项,将 SATA 驱动器配置为“IDE”、“AHCI”或“RAID”;请确保选择了“RAID”。
  • 保存并退出 BIOS 设置。在启动过程中,进入 RAID 设置实用程序。
    • RAID 实用程序通常可以通过启动菜单(通常是 F8、F10 或 CTRL+I)或在 RAID 控制器初始化时访问。
  • 使用 RAID 设置实用程序创建首选的条带/镜像集。
提示 请参阅主板文档了解详细信息。确切的步骤可能有所不同。

启动安装程序

有关详细信息,请参阅 Installation guide#Pre-installation

使用 mdadm 和 Intel FakeRAID 的 MBR 安装示例

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:请参阅 Help:Style (在 Talk:Install Arch Linux with Fake RAID 中讨论)

之所以在此处添加此内容,是因为我花了数小时才使其正常工作,因为网上有很多关于不同方法的不同信息,还有过时的信息。它可能需要更好地整合到本页面中并提供更多解释,但我目前要结束它。这是一个基本的命令行转储,显示了使用 MBR 分区结构成功设置 RAID。

看起来一旦你在 Intel 实用程序中创建了阵列,它就会写入 RAID 元数据。因此,组装/创建阵列不需要发生。我在 Intel 实用程序中将我的阵列命名为 ZERO,您可以在此示例中看到它。

我将整个安装示例保留原样,因为它显示了在安装过程中何时配置各项。您需要修改一些内容才能使其正常工作,请不要直接复制粘贴!

# ls /dev/md/
# parted /dev/md/ZERO_0
# mklabel msdos
# mkpart primary ext4 1MiB 100MiB
# set 1 boot on
# mkpart primary ext4 100MiB 16.5GiB
# mkpart primary linux-swap 16.5GiB 100%

仅用于查看更改

# fdisk -l /dev/md/ZERO_0

创建文件系统/swap 并激活 swap

# mkfs.ext4 /dev/md/ZERO_0p1
# mkfs.ext4 /dev/md/ZERO_0p2
# mkswap /dev/md/ZERO_0p3
# swapon /dev/md/ZERO_0p3
# mount /dev/md/ZERO_0p2 /mnt
# mkdir /mnt/boot
# mount /dev/md/ZERO_0p1 /mnt/boot/

编辑 /etc/pacman.conf 并为 x64 取消注释 multilib(为什么不)(在 chroot 后也这样做)。然后

# pacstrap -K -i /mnt base base-devel
# genfstab -U /mnt > /mnt/etc/fstab

编辑 /mnt/etc/fstab 并将 UUID 替换为(这可能是可选的)

/dev/md/ZERO_0p1
/dev/md/ZERO_0p2
/dev/md/ZERO_0p3

然后运行:

# mdadm --detail --scan >> /mnt/etc/mdadm.conf

Chroot 进入进行配置

# arch-chroot /mnt /bin/bash

编辑 /etc/locale.gen 并取消注释 en_US.UTF-8 UTF-8 和其他所需的 UTF-8 区域设置。运行以下命令生成区域设置:

# locale-gen

创建 locale.conf(5) 文件,并相应地设置 LANG 变量

/etc/locale.conf
LANG=en_US.UTF-8

设置 时区

# ln -sf /usr/share/zoneinfo/Region/City /etc/localtime

安装 grub编辑 /etc/default/grub 并取消注释 GRUB_DISABLE_LINUX_UUID=true

mdadm_udev 添加到 /etc/mkinitcpio.confHOOKS 数组中

HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block mdadm_udev filesystems fsck)

重新生成 initramfs。然后

# grub-install --recheck /dev/md/ZERO_0
# grub-mkconfig -o /boot/grub/grub.cfg

创建 主机名文件

/etc/hostname
yourhostname

相应地更新 /etc/hosts 文件。然后

# systemctl enable dhcpcd@enp13s0.service
# exit
# umount -R /mnt
# reboot

移除安装介质。

加载 dmraid

本文或本章节已过时。

原因: dmraid 目前未维护,并且可能在新版 Linux 中出现问题。强烈建议使用 mdadm。(在 Talk:Install Arch Linux with Fake RAID 中讨论)

加载设备映射器并查找 RAID 组

# modprobe dm_mod
# dmraid -ay
# ls -la /dev/mapper/
警告 命令 dmraid -ay 在启动到 Arch Linux Release: 2011.08.19 后可能会失败,因为初始 RAM 磁盘环境的镜像文件不支持 dmraid。您可以使用旧版本 Release: 2010.05。请注意,在安装后您必须在 grub 的 menu.lst 中更正您的内核名称和 initramfs 名称,因为这些版本使用不同的命名方式。

示例输出

/dev/mapper/control            <- Created by device-mapper; if present, device-mapper is likely functioning
/dev/mapper/sil_aiageicechah   <- A RAID set on a Silicon Image SATA RAID controller
/dev/mapper/sil_aiageicechah1  <- First partition on this RAID set

如果只有一个文件(/dev/mapper/control),请使用 lsmod 检查您的控制器芯片组模块是否已加载。如果已加载,则 dmraid 不支持此控制器,或者系统上没有 RAID 组(请再次检查 RAID BIOS 设置)。如果正确,那么您可能被迫使用 软件 RAID(这意味着在此控制器上无法实现双启动 RAID 系统)。

如果您的芯片组模块**未**加载,请立即加载。例如

# modprobe sata_sil

有关可用驱动程序,请参阅 /lib/modules/`uname -r`/kernel/drivers/ata/

测试 RAID 组

# dmraid -tay

安装引导加载程序

GRUB2

有关配置 GRUB2 的详细信息,请参阅 GRUB2grub-bios 对 dm-raid 分区开箱即用。

 $ grub-install --target=i386-pc --recheck --debug /dev/mapper/sil_aiageicechah
注意 如果未设置 GRUB_DISABLE_LINUX_UUID=true,grub2 将生成带有 root=UUID=... 的行,这会导致挂载镜像 RAID 1 阵列的一侧。

如果您有其他操作系统(如 Windows),可以(可选)安装 os-prober

 $ grub-mkconfig -o /boot/grub/grub.cfg

就是这样,grub-mkconfig 将自动生成配置。您可以在 grub-mkconfig 之前编辑 /etc/default/grub 来修改配置(超时、颜色等)。

故障排除

降级阵列启动

Fake RAID 方法在 GNU/Linux 上有一个缺点,即 dmraid 目前无法处理降级阵列,并且将拒绝激活。在这种情况下,必须从另一个操作系统(例如 Windows)内部或通过 BIOS/芯片组 RAID 实用程序解决问题。

或者,如果使用镜像(RAID 1)阵列,用户可以暂时在启动过程中绕过 dmraid 并从单个驱动器启动。

  1. 编辑 GRUB 菜单中的**内核**行。
    1. 删除对 dmraid 设备(例如,将 /dev/mapper/raidSet1 更改为 /dev/sda1)的引用。
    2. disablehooks=dmraid 追加到内核参数中,以防止 dmraid 检测到降级阵列时发生内核恐慌。
  2. 启动系统

错误:无法确定根设备的主/次设备号

如果在内核更新后遇到引导失败,并且引导过程无法确定根设备的主/次设备号,这可能只是一个计时问题(即 dmraid -ay 可能在 /dev/sd* 完全设置和检测到之前就被调用)。这会影响正常和 LTS 内核镜像。启动“Fallback”内核镜像应该可以工作。错误看起来会像这样:

Activating dmraid arrays...
no block devices found
Waiting 10 seconds for device /dev/mapper/nvidia_baaccajap5
Root device '/dev/mapper/nvidia_baaccajap5' doesn't exist attempting to create it.
Error: Unable to determine major/minor number of root device '/dev/mapper/nvidia_baaccajap5'

为了解决这个问题

  • 启动 Fallback 内核
  • /etc/mkinitcpio.confHOOKS 数组中,将 sleep hook 放在 udev hook 之后,如下所示:
HOOKS=(base udev sleep autodetect microcode modconf kms keyboard keymap consolefont block dmraid filesystems fsck)
  • 重新生成内核镜像并重启

dmraid 镜像激活失败

以上所有内容第一次都能正常工作,但重启后 dmraid 找不到阵列了吗?

这是因为 Linux 软件 RAID(mdadm)在系统初始化过程中已尝试挂载 fakeraid 阵列,并将其置于无法卸载的状态。为了防止 mdadm 运行,请将负责的 udev 规则移开。

# cd /lib/udev/rules.d
# mkdir disabled
# mv 64-md-raid.rules disabled/
# reboot

现有 RAID 阵列上的分区没有块设备

如果您的现有阵列(在尝试安装 Arch 之前设置)出现在 /dev/mapper/raidnamehere 中,但没有分区(例如 raidnamehere1),请重新检查 RAID 分区的状态。

如果在其他操作系统中可以工作的分区存在某些(即使是微小的)问题,Arch 可能不会为这些分区创建块设备。

gparted 可用于诊断和修复大多数问题。不幸的是,您可能需要从头开始重新分区。

参见