使用 Fake RAID 安装 Arch Linux

出自 ArchWiki
(重定向自 Installing with Fake RAID

本指南旨在启用使用板载 BIOS RAID 控制器创建的 RAID 阵列,从而允许从 RAID 阵列内部的分区使用 GRUB 双启动 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”。

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

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

本文或章节已过时。

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

准备工作

警告: 在摆弄 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 设置实用程序创建首选的条带/镜像集。
提示: 有关详细信息,请参阅您的主板文档。确切的步骤可能会有所不同。

启动安装程序

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

使用 mdadm 和 Intel FakeRAID 的 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/
警告: 命令 dmraid -ay 在启动到 Arch Linux Release: 2011.08.19 后可能会失败,因为带有初始 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 上 fake RAID 方法的一个缺点是 dmraid 当前无法处理降级阵列,并且会拒绝激活。在这种情况下,必须从另一个操作系统(例如 Windows)或通过 BIOS/芯片组 RAID 实用程序解决问题。

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

  1. 编辑 GRUB 菜单中的 kernel
    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 内核
  • sleep hook 插入到 /etc/mkinitcpio.confHOOKS 数组中,放在 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 对于诊断和修复大多数问题很有用。不幸的是,您可能必须从头开始重新分区。

参见