使用 Fake RAID 安装 Arch Linux

来自 ArchWiki

本指南旨在启用由板载 BIOS RAID 控制器创建的 RAID 阵列,从而允许从 RAID 阵列内部的分区双启动 Linux 和 Windows,使用 GRUB。当使用所谓的“假 RAID”或“主机 RAID”时,磁盘集从 /dev/mapper/chipsetName_randomName 而不是 /dev/sdX 访问。

什么是“假 RAID”

来自 维基百科: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 控制器”意味着控制器完成了处理,而新型控制器在技术知识圈中被称为“假 RAID”,即使 RAID 本身实现正确。Adaptec 称它们为“主机 RAID”。

另请参阅 FakeRaidHowto @ Community Ubuntu Documentation 以获取更多信息。

尽管存在术语上的争议,但通过 dmraid 实现的“假 RAID” 是一种稳健的软件 RAID 实现,它提供了一个可靠的系统,可以在多个磁盘上镜像或条带化数据,对于任何现代系统来说,开销都可以忽略不计。dmraid 可与 mdadm(纯 Linux 软件 RAID)相媲美,并且具有在系统启动之前完全重建驱动器的额外好处。但是,请注意并非所有 BIOS RAID 实现都支持驱动器重建。相反,它们依赖于非 Linux 软件来执行重建。如果您的系统无法在 BIOS RAID 设置实用程序中重建驱动器,强烈建议您使用 mdraid(通过 mdadm 的纯 Linux 软件 RAID - 请参阅 RAID)而不是 dmraid,否则您会发现自己无法在驱动器故障时重建阵列 - 或者在主板故障时无法在没有大量额外工作的情况下检索阵列中的信息。

本文或章节已过时。

原因: 安装步骤未反映当前的 Arch Linux 安装过程。需要更新。顺便说一句,看起来 Intel 现在推荐 mdadm 而不是 dmraid(请参阅讨论)。更新正在进行中。有关使用 MBR 磁盘分区布局和 intel FakeRAID 和 mdadm 进行安装的示例,请参见下面的“MBR 安装”...(在 Talk:Install Arch Linux with Fake RAID 中讨论)

准备工作

警告: 在操作 RAID 之前备份所有数据。您对硬件的操作完全是您自己的责任。RAID 条带上的数据非常容易受到磁盘故障的影响。创建定期备份或考虑使用镜像集。请注意警告!
  • 在另一台机器上打开任何需要的指南(安装指南)。如果您无法访问另一台机器,请打印出来。
  • 下载最新的 Arch Linux 安装映像。
  • 备份所有重要文件,因为目标分区上的所有内容都将被销毁。

配置 RAID 阵列

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

启动安装程序

有关详细信息,请参阅 安装指南#预安装

在 Intel FakeRAID 上使用 mdadm 的 MBR 安装示例

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

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

之所以在这里,是因为我花了几个小时才使其工作,因为有很多关于不同方法的信息,以及过时的信息。可能需要更好地将其集成到此页面中,并提供更多解释和 Arch Linux WIKI 语法,但我目前正在总结。这是一个基本的命令行转储,显示了使用 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

创建文件系统/交换分区/激活交换分区

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 -p /mnt/boot
mount /dev/md/ZERO_0p1 /mnt/boot/
nano /etc/pacman.conf

取消注释 x64 上的 multilib(为什么不呢)(也在 chroot 后执行)

pacstrap -K -i /mnt base base-devel
genfstab -U /mnt > /mnt/etc/fstab
cat /mnt/etc/fstab
nano /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
nano /etc/locale.gen

en_US.UTF-8 UTF-8

nano /etc/locale.conf

LANG=en_US.UTF-8

locale-gen en_US en_US.UTF-8
tzselect
ln -sf /usr/share/zoneinfo/America/Chicago /etc/localtime

处理一些 grub 内容

pacman -Sv grub
nano /etc/default/grub 
  • 取消注释 GRUB_DISABLE_LINUX_UUID=true

Raid 内容

mdadm_udev 添加到 /etc/mkinitcpio.conf 中的 HOOKS 数组

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
cat /boot/grub/grub.cfg
echo your-hostname > /etc/hostname
nano /etc/hosts
systemctl enable dhcpcd@enp13s0.service
exit
umount -R /mnt
reboot

移除 CD

加载 dmraid

本文或章节已过时。

原因: dmraid 目前无人维护,可能会在新 linux 版本中崩溃。强烈建议使用 mdadm。(在 Talk:Install Arch Linux with Fake RAID 中讨论)

加载 device-mapper 并查找 RAID 阵列

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

示例输出

/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 以修改配置(超时、颜色等)。

故障排除

在降级阵列中启动

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

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

  1. 编辑 GRUB 菜单中的kernel
    1. 删除对 dmraid 设备的引用(例如,将 /dev/mapper/raidSet1 更改为 /dev/sda1
    2. 附加 disablehooks=dmraid 以防止当 dmraid 发现降级阵列时发生内核 panic
  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 内核
  • udev hook 之后,在 /etc/mkinitcpio.confHOOKS 数组中插入 sleep 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 对于诊断和修复大多数问题非常有用。不幸的是,您可能必须从头开始重新分区。

参见