在没有 UEFI 的 GPT 分区表上安装 Windows 7/8 64 位

在没有 UEFI 的 GPT 分区表上安装 Windows 7/8 64 位

首先我要说的是,我尝试了所有能找到的方法。但还是没有任何效果。

前言

我已经将旧的 MBR 转换为 GPT 分区表。我原本以为只需重新安装 GRUB2 并最终安装 Windows 就可以了。但事实并非如此。我使用 gdisk(GPT fdisk)进行转换,没有丢失数据。

问题

一开始,我的 Windows 无法加载。然后,我修复了问题所在的 BCD,结果根本无法启动到 HDD,卡在 grub 救援屏幕上。尝试了全面修复,以及我遇到的所有其他修复,都是同样的问题。当我重新安装/修复 GRUB 时,我在 Windows 启动时收到 BCD 错误。

解决方案和其他问题

最明显的一个是重新安装 Windows。嗯,不会发生。如果没有 UEFI 硬件,它就无法安装在 GPT 上。保护我自己,微软风格。我犯了一个可怕的错误,没有意识到问题出在分区表上,而不是分区本身,以及格式化的 Windows 分区。我没有丢失任何重要的东西——嗯,除了 Windows。

我接下来尝试的是混合 MBR。我想没人告诉 Windows 安装程序这一点,因为它给出了相同的错误(尝试了 Windows 7 和 8,均为 64 位)。我为此使用了 gdisk 恢复菜单,并检查了所有输入,最终正常工作。

接下来是尝试安装 DUET。我以为它会启动失败,但由于我的 AMD CPU,它甚至无法安装。我使用了与文件一起下载的 duet-install 脚本这里。脚本总是停在同一个地方: Partition starts at sector 2048。我查看了脚本的源代码,它应该很快就会打印出下一行(它一下子打印了 13 行),但几个小时都没有发生任何事情。尝试重新运行、重新下载、从实时 CD 运行,但没有任何反应。这是整个输出:

将安装 SYSLINUX 到 MBR SYSLINUX 的路径是 /usr/share/syslinux

bootduet 的路径是 /home/ubuntu/Downloads/tianocore_uefi_duet_builds-tianocore_uefi_duet_installer/BootSector

UEFI DUET 的路径是 /home/ubuntu/Downloads/tianocore_uefi_duet_builds-tianocore_uefi_duet_installer

将安装UEFI版本UDK目标分区为/dev/sda1

将在目标分区上创建一个名为“ESP”的 FAT 文件系统

目标磁盘(用于存储 MBR 引导代码)为 /dev/sda 分区号为 1

分区从扇区 2048 开始

[编辑] 尝试安装 XP,但它无法格式化未格式化的空间。我尝试使用 GParted 将其格式化为 ntfs,但安装仍将其注册为未格式化的空间(除此以外没有其他内容)。但说实话 - 那张 CD 被搁置了很长时间,我几乎找不到它,我不知道它是否是 x64(可能不是,所以不会起作用)。

所以,我现在陷入困境。能帮忙吗?

此外,重新格式化整个硬盘不是一个选项。Windows 不值得,我宁愿使用 Linux。此外,转换回 MBR 也不行,因为据我所知,它包括格式化。此外,我有 7 个(或 8 个?)分区(5 个在旧 MBR 上,但我使用了扩展分区……很乱)。

眼镜

主板:华硕 M5A78l-M LX CPU:AMD Athlon II x3 450

当前的解决方法 (嗯,除了 obious(linux))

我已在 VirtualBox 中启动 Windows 8 安装。这取得了一些进展,但我不想每次启动 Windows 时都被困在 VM 中。

編輯

我尝试过一个 duet-install 脚本。如果我输入一些字母并按回车键,它会打印parted: invalid token: [letter]。如果该字母是“c”,它会打印Unknown partition table type ! Aborting!,这显然不是事实。我想我必须更深入地分析源代码才能找到问题的根源,因为那个脚本现在对我来说是最好的解决方案。

到达脚本停止执行的位置: ptLine=parted“${targetDisk}”print | grep“Partition Table”。将尝试通过跳过检查并设置值以匹配我的系统来找到解决方案。

我编辑了脚本,删除了不起作用的部分,最后终于成功安装了 DUET。或者至少它是这么说的……我注意到 BIOS 没有变化,一切都和开始时一样。仍然无法工作。

答案1

我最终使用与转换为 GPT 相同的工具将其转换回 MBR,并且分区表几乎和以前一样。

我尝试过的东西,将来可能会对某些人有用:

安装 DUET:我建议使用本指南,但我会很快解释我所做的事情。

首先,我为 EFI 创建了新的 200MB FAT32 分区。然后我从这里并使用 cd 进入我解压它的目录。然后,我运行chmod +x ./duet-install,你的 syslinux 的路径在./duet-install -64 -F -s /usr/lib/syslinux -m /dev/sda1哪里(默认应该是,但请搜索你的系统以获取更多信息)。你也可以从互联网上下载它,然后编译它。注意:它需要/usr/lib/syslinux/usr/share/syslinux国家音乐基金会,它有自己的依赖项,而且由于我没有使用它,所以我无法提供太多帮助。/dev/sda1 是您之前创建的分区的路径。

但是,脚本无法超过第 275 行,因此我删除了从第 275 行到外部 if 末尾(从第 276 行或第 277 行开始)的所有内容,并将其替换为 tableType="gpt"。

要创建混合 MBR:同样,我推荐一个长度适中的指南,这里。如需快速指南,请继续阅读。

我打开 gdisk 并使用 运行它gdisk /dev/sda,然后使用 进入恢复菜单,r并在恢复菜单中输入h。在提示符下,我输入了要添加到混合 MBR 的分区,然后输入 EFI GPT 分区y。如果您需要在恢复菜单中找出要使用的分区的分区号p,或者您最喜欢的分区工具(对我来说是 GParted)。之后,我输入了默认的 MBR 十六进制代码(ntfs 为 07),并且没有为任何设置可启动标志,因为我使用 GRUB。

就这样。这两次都没有给出任何结果 - 没有错误,什么都没有,它继续像通常的 BIOS 一样使用完整的 GPT。我可能在某个地方犯了一个错误,导致了这个问题 - 请随时纠正我。

我希望它能帮助到某些人,但如果没有,你总是可以转换回 MBR,如果你最初将 MBR 磁盘转换为 GPT,这应该不会很麻烦。只需使用你的 HDD(gdisk /dev/sda对我来说)输入 gdisk,输入r, Enter, g, Enter, q, Enter, YEnter如果你需要更全面的指南,请阅读第二部分本文

答案2

您可以从 BIOS 启动 GPT 上的 Windows如果你有什么小的您可以从 MBR 驱动器或软盘启动。这甚至不是黑客行为,甚至可以在 Windows 32 位上运行。

基本上启动 Windows 安装/修复光盘。只需在软盘上创建系统驱动器,然后使用bcdboot将启动文件放在软盘上。使用 添加引导扇区bootsect。将 更改为{bootmgr} deviceboot从软盘启动。

步骤很详细这里

相关内容