RAID6 mdraid -> LVM -> EXT4 根带有 GRUB2?

RAID6 mdraid -> LVM -> EXT4 根带有 GRUB2?

2012-03-31 Debian Wheezy 在 VirtualBox 4.1.2 中每日构建,6 个磁盘设备。

我迄今为止的重现步骤:

  1. 设置一个分区,使用整个磁盘作为每个磁盘的 RAID 物理卷
  2. 从所有这些中设置一个 RAID6 mdraid 阵列
  3. 使用生成的 md0 作为卷组的唯一物理卷
  4. 根据需要设置逻辑卷、文件系统和挂载点
  5. 安装系统

/ 和 /boot 都将位于此堆栈中。我已选择 EXT4 作为此设置的文件系统。

我可以进入 GRUB2 救援控制台,它可以看到 mdraid、卷组和 LVM 逻辑卷(所有级别上的命名均正确),但我无法 ls 其中任何一个的文件系统内容,也无法从它们启动。

据我从文档中看到的,附带的 GRUB2 版本应该可以很好地处理所有这些问题。

http://packages.debian.org/wheezy/grub-pc(撰写本文时为 1.99-17。)

它根据生成的 grub.cfg 文件加载 ext2、raid、raid6rec、dosmbr(这个模块在模块列表中每个磁盘出现一次)和 lvm 模块。此外,它还在生成的 grub.cfg 文件中定义了两次要加载的模块列表,根据快速的 Google 搜索,这似乎是 GRUB2 的常态,并且没问题。

如何进一步让 GRUB2 真正能够读取文件系统的内容并启动系统?

我对这里的功能假设有什么错误?

编辑(2012-04-01) 我生成的 grub.cfg:

http://pastie.org/3708436

似乎它首先将我的 /usr 逻辑卷设为根,这可能是失败的根源?grub-mkconfig 错误?还是应该在 / 和 /boot 之前访问 /usr 中的内容?/boot 对我来说在 / 上 - 没有单独的启动逻辑卷。

答案1

毕竟,这是Grub2 错误/问题导致软件 RAID 阵列性能下降

Grub2 1.9x 在从降级阵列启动时存在问题。在救援模式下启动系统并让 raid 自行恢复已修复原始设置中存在的问题。

顺便说一句,该设置在 Fedora 17、Arch(稳定版)和 Gentoo(稳定版 + 通过 Portage 的最新 grub2 bzr)上开箱即可运行(目前:2012-06-26):Grub2 2.0+ 已修复此问题。随着 Wheezy 即将冻结,我非常希望通过升级到 2.0 或反向移植修复程序来解决此问题。

对我来说,这仍然影响 Debian 6、7;Ubuntu 8.04、10.04、12.04。

对于家庭系统来说,让单用户模式恢复设置中的 raid 同步是一种可接受的解决方法,但是重新启动生产服务器(甚至是小型办公文件服务器)时可能会出现额外的问题,这让人三思而后行。

答案2

非常好的帖子,非常感谢,这对我在 Debian Wheezy 上安装 LVM - over - RAID 有很大帮助。以下是我克服这个问题所采取的步骤。

将 Grub2 更新至 V2+

将这些行添加到 /etc/apt/sources.list

deb http://http.debian.net/debian unstable main
deb-src http://http.debian.net/debian unstable main

apt-get 更新

安装 grub2

答案3

也许您设置的单个分区太大,没有为 GRUB2 安装留出足够的空间,并且它覆盖了部分 LVM 空间。这有点不太可能。尝试按照您的步骤重现您的问题,但这次使用单个磁盘(跳过 RAID),完全按照之前的方式创建单个分区,然后创建其余部分。如果我是对的,那么您应该有相同的行为。

更新:所以,这个答案是错误的。我浏览了 GRUB2 手册,发现了这个部分其中指出:

相反,如果您只得到一个救援 shell,这通常意味着 GRUB 由于某种原因未能加载“正常”模块。也许可以暂时解决这个问题:例如,如果失败的原因是“前缀”错误(可能它指向错误的设备,或者 /boot/grub 的路径相对于设备不正确),那么您可以更正此问题并手动进入正常模式:

 # Inspect the current prefix (and other preset variables):
 set
 # Find out which devices are available:
 ls
 # Set to the correct value, which might be something like this:
 set prefix=(hd0,1)/grub
 set root=(hd0,1)
 insmod normal
 normal

但是,如果您在救援 shell 中遇到任何问题,则可能意味着 GRUB 未正确安装。尝试使用 grub-install device 正确重新安装它可能更有用(请参阅调用 grub-install)。执行此操作时,需要记住以下几点:

  1. 操作系统中的驱动器顺序可能与固件使用的启动驱动器顺序不同。不要假设您的第一个硬盘驱动器(例如“/dev/sda”)是您的固件将从其启动的驱动器。可以使用 device.map(参见设备映射)来覆盖此顺序,但通常最好使用 UUID 或文件系统标签,并完全避免依赖驱动器顺序。
  2. 至少在 BIOS 系统上,如果您告诉 grub-install 将 GRUB 安装到某个分区,但 GRUB 已经安装在主引导记录中,那么该分区中的 GRUB 安装将被忽略。
  3. 如果可能,通常最好避免将 GRUB 安装到分区(除非它是仅供 GRUB 使用的特殊分区,例如 GPT 上使用的 BIOS 启动分区)。这样做意味着 GRUB 可能会因为文件系统移动块而无法读取其核心映像,例如在碎片整理、运行检查时,甚至在正常运行期间。安装到整个磁盘设备通常更可靠。
  4. 检查 GRUB 是否真正知道如何从包含 /boot/grub 的设备和文件系统读取。它无法从加密设备读取,也无法从尚未添加到 GRUB 的文件系统读取。

相关内容