将 grub 0.97 安装到新的 4TB 磁盘

将 grub 0.97 安装到新的 4TB 磁盘

弯腰问问题,但我不明白为什么它不起作用。

我有 rhel 5.5 内核 2.18。我将操作系统从 750 GB 磁盘克隆到另一个 4 TB 磁盘。

我将磁盘分成 2 个分区。

  1. 10GB sda1
  2. 40 GB sda2

我通过 rsync 将数据从 750gb 磁盘克隆到 4tb。
chroot到 4tb 磁盘并尝试安装 grub。
我通过两种方法将 grub 安装到 sda1

1) grub-install /dev/sda1-不起作用,它说什么看不到第 1 阶段和第 2 阶段。

grub/device map is ok ( consist hd0 sda )

2) echo -en 'root (hd0,0)\nsetup (hd0)'| grub --batch. 它是 grub 批处理模式。安装过程顺利结束,但之后无法启动(我将在下一篇文章中介绍)。

我尝试使用 gpt 和旧的 fdisk(msdos 表)进行 maketable,
我知道通过使用 gpt 进行 parted 可以制作出大于 2TB 的磁盘。

当我分开时gparted,它首先使用id = 0xee。如果我启动系统,grub 会出错“未知类型的分区”。如果我在 grub 中(按 parttype)选择id=0x83grub,它会说 -“ unknown filesystem”。还有更多。在我使用 livecd gparted 启动后,只能看到一个分区(只有 sda1 而看不到 sda2),为什么?

当我使用 fdisk 分割 4TB 磁盘并通过 grub 批处理模式安装时。然后我启动 grub,它在加载阶段 1.5 后以“错误 5”结束

我通过 解决了我的问题,dd if=/dev/sda of=/dev/sdb但它太愚蠢了。为什么我不能通过 分割 4TB 磁盘gparted并且它无法工作?
请将我引导到正确的目标。

答案1

分区类型0xee是 MBR 分区表中的一个虚拟条目,它告诉不支持 GPT 的设备磁盘已被它们无法理解的东西占用。

RHEL 5.5 中的 GRUB 版本无法理解 GPT 样式的分区:它只知道 MBR。

如果您需要支持如此老旧的系统,标准建议是尽可能对其进行虚拟化。虚拟化通常会为您提供向 VM 呈现磁盘空间的工具,而这些方式与实际物理磁盘的大小无关。在这种情况下,您可以将 4 TB 磁盘呈现为多个虚拟设备,每个虚拟设备的大小为 2 TB 或更小。


如果您无法虚拟化此系统,那么可能会存在一种肮脏的黑客行为。在您确定您理解该过程及其效果之前,请不要尝试此操作。如果您将硬件升级为在固件级别支持 GPT 的硬件,则此设置可能会停止工作……但无论如何,您将有新的方法来解决您的问题。

首先,创建一个包含所需分区的 GPT 分区表。包含目录的分区/boot(通常为根文件系统或专用/boot文件系统)应完全位于磁盘的前 2 TB 内。记下此分区的确切起始和结束块号。在每个分区上将 GPT 分区类型设置为常规“Linux 文件系统”。

创建 GPT 分区表时,gparted还将创建一个“保护性”假 MBR 分区,该分区具有类型0xee并覆盖从块#1 开始到 MBR 的最大可能值(2 TB)结束的整个磁盘。

下一步是仔细编辑 MBR 分区表,fdisk以便它有一个具有 MBR 分区类型的分区0x83及其起始和结束块值完全匹配GPT 分区表中指定的第一个分区。您甚至可以将此 MBR 分区标记为活动分区,以便 BIOS 可以确定地检测到磁盘可启动。第二个分区条目应覆盖磁盘的其余部分(最多 2 TB)并具有类型0xee

现在,你将拥有杂交种分区方案,其中第一个分区可以通过 MBR 和 GPT 分区方案识别,但第二个分区(超过 2 TB 的分区)仅在 GPT 分区方案下有效。

在这样的磁盘上安装 GRUB 0.97 时,您必须记住,您不能将 GRUB stage1.5 嵌入到 MBR 之后和分区开始之前的区域,因为该区域是 GPT 分区表所在的位置。您不想损坏它。为了确保不会发生这种情况,您可能需要使用installGRUB shell 中的命令来安装引导加载程序,而不是依赖于GRUB shell提供的自动化grub-install或命令。setup

现在,当系统启动时,BIOS 应该会看到一个有效的 MBR,0xee其中包含一个有效的可启动分区(以及一个可以忽略的奇怪东西)。BIOS 将读取 MBR 并执行其中的启动代码,这将是 GRUB 0.97 的第一阶段。

GRUB 现在将使用 BIOS 功能从第一个分区内预先记录的位置加载其第二阶段,然后激活其自己的文件系统支持(仍然使用 BIOS 功能进行低级磁盘访问)并menu.lst从指定的“GRUB 根分区”读取文件、Linux 内核和 initrd 文件,然后启动 Linux 内核。此时,GRUB 的工作就完成了。

现在,Linux 内核启动并从 initrd 加载自己的存储驱动程序。与 BIOS 不同,Linux 现在可以处理磁盘的全部容量并理解 GPT 分区表(RHEL 从 RHEL 4 开始支持 GPT)。由于存在有效的 GPT 分区表,因此 MBR 是次要的,将被忽略。Linux 将看到并能够使用这两个分区。

答案2

内核 2.18 确实很旧,但它应该支持 GPT 分区。使用 GRUB 0.97 从 GPT 分区启动应该没有问题,但您需要一个 GRUB 能理解的文件系统。如果 GRUB 说unknown filesystem,那么 GRUB 可能不知道该文件系统。您没有提到您使用的是什么文件系统。更改文件系统不会改变磁盘上文件系统的类型,它只是指示分区内应该使用什么文件系统。

在磁盘的起始处有一个 1GB 大小的分区,并且使用 EXT2 文件系统,应该没问题。将 GRUB 通常需要的文件复制到该分区,然后运行 ​​GRUB 并执行以下命令:

device (hd0) /dev/sda
root (hd0,0)
setup (hd0)

你的磁盘现在应该可以启动了。

相关内容