使用 Fake RAID 安装 Arch Linux
本指南旨在启用使用板载 BIOS RAID 控制器创建的 RAID 阵列,从而允许从 RAID 阵列内部的分区使用 GRUB 双启动 Linux 和 Windows。当使用所谓的“fake RAID”或“host RAID”时,磁盘集从 /dev/mapper/chipsetName_randomName
访问,而不是 /dev/sdX
。
什么是“fake 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 安装映像。
- 备份所有重要文件,因为目标分区上的所有内容都将被销毁。
配置 RAID 阵列
- 进入 BIOS 设置并启用 RAID 控制器。
- BIOS 可能包含将 SATA 驱动器配置为“IDE”、“AHCI”或“RAID”的选项;确保选择“RAID”。
- 保存并退出 BIOS 设置。在启动期间,进入 RAID 设置实用程序。
- RAID 实用程序通常可以通过启动菜单(通常是 F8、F10 或 CTRL+I)或在 RAID 控制器初始化时访问。
- 使用 RAID 设置实用程序创建首选的条带/镜像集。
启动安装程序
有关详细信息,请参阅 安装指南#预安装。
使用 mdadm 和 Intel FakeRAID 的 MBR 安装示例
这里之所以放这段内容,是因为我花了几个小时才使其工作,因为有很多关于不同方法的信息,以及过时的信息。它可能需要更好地集成到此页面中,并提供更多解释和 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)
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
加载 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 的详细信息,请参阅 GRUB2。 grub-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 并从单个驱动器启动
- 编辑 GRUB 菜单中的 kernel 行
- 删除对 dmraid 设备的引用(例如,将
/dev/mapper/raidSet1
更改为/dev/sda1
) - 附加
disablehooks=dmraid
以防止当 dmraid 发现降级阵列时内核崩溃
- 删除对 dmraid 设备的引用(例如,将
- 启动系统
错误:无法确定根设备的主/次号码
如果您在内核更新后遇到启动失败,并且启动过程无法确定根设备的主/次号码,这可能只是一个时序问题(即 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.conf
的HOOKS
数组中,放在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 对于诊断和修复大多数问题很有用。不幸的是,您可能必须从头开始重新分区。