我的想法是创建一个带有 Lubuntu 的 USB-Boot-Stick,它能够在旧的 BIOS 笔记本电脑和较新的 UEFI 系统上启动。
当 Stick 被设置为传统启动设备时,这会非常容易,但我希望它是一个支持 UEFI 的设备。
- 这有道理吗?!还是我对 UEFI 概念的理解完全错误?
- 如果有必要,可以安装两个不同的 Linux(一个用于 UEFI,一个用于传统,但都位于同一驱动器上)
- 在旧式 Bios 上启动 GPT 设备 - 可以吗?
我看不清楚,也许有一个单独的传统 Linux 启动棒是一个更好的主意,但我很好奇探索其边界:)
那么,我的想法是混合 linux-uefi-boot-usb-stick 可以与传统 bios 配合使用吗?
(3)对于使用 grub 的 Linux 来说似乎可以http://www.rodsbooks.com/gdisk/booting.html
此外,除了 Swap、Fat32 和两个 Ext4 分区之外,我在该棒上还准备好了一个 EF00 分区。
(1)似乎也有可能http://www.rodsbooks.com/bios2uefi/
但是,这些说明是 2012 年的,已经过去一段时间了 - 有没有人有更简单的实用示例?
对于此主题的其他研究人员:
在非 EFI 主板上从 GPT 磁盘启动 Windows 7 有没有办法使用 GPT 上的 BIOS 启动 Windows 7/8?
http://www.borncity.com/blog/2012/07/25/uefi-emulation-auf-pcs/
更新:
我已经设法使用 rEFInd 创建了 UEFI 部分,其中包括安全启动设置。
根据给出的建议,我将其dd
复制gptmbr.bin
到我的驱动器,现在它似乎至少在 BIOS 系统上做了一些事情:“这不是可启动磁盘”
但是,我按照建议设置了pmbr
磁盘标志和 gptlegacy boot
标志 - 仍然出现此错误,有什么想法吗?
我的 ESP 分区是磁盘上的第二个分区,并设置了 efi 文件。
设置:
- 64GB 空间
- GPT 分区表
- 磁盘已设置 pmbr 标志
- 第一个分区从 16MiB 开始,大约 45GB,是用于存储数据的 fat32 主分区
- 第二个分区大约有 45GB,是 EFI 系统 (fat32),带有可正常工作的 rEFInd 设置
- 第 3 到第 5 个分区是我正在使用的 Lubuntu 14.04.1 的主分区(ext4)、交换分区和根分区(ext4)
使用dd
我已经编译的 6.02 Syslinux 复制gptmbr.bin
到前 440 字节。
在 parted 3.2 下我可以看到我的分区 2 有一个boot
和legacy_boot
标志。
在启动过程中我得到未找到可启动磁盘- 如果我将第五个分区而不是第二个分区设置legacy_boot
为缺少操作系统
它还活着!
(因为我的旧问题被删除了https://askubuntu.com/q/516730/319747)
我的猜测是,我必须将一些
*.c32
和其他文件复制到系统Linux在我的 EFI 上 (在哪里?!) 或在我的根分区上 (/boot/syslinux
?!) 找到文件夹 eighter 以使其工作 - 我说得对吗?哪些文件是必需的?此外,我想我也需要该
syslinucx.cfg
文件-对吗?
我的目标至少是在根 ext4 分区上直接启动 lubuntu 系统。
更新:
虽然我不知道为什么,但我让它工作了 - 但不是通过手动安装。
- 这个
pmbr
标志是错误的,它禁止我的 UEFI 系统以 UEFI 方式启动该设备- 这个
legacy_boot
标志对于我的第五个分区(Linux 根)来说是必需的- 我不得不用
extlinux --install /path/to/root/parition
- 我必须
syslinux.cfg
在根分区的 boot 下的 syslinux 文件夹中创建一个我把所有这些操作都放到第二块较小的硬盘上,然后尝试复制 syslinux 文件夹,但是没有成功——这
extlinux --install
似乎是强制性的。有人知道具体
extlinux --install
是做什么的吗?可以手动完成吗?或者,如何安装较新的版本(如 6.02)而不将其安装到您的系统上?
让我的记忆棒能够与 BIOS、UEFI 和 UEFI SecureBoot 中提到的分区一起工作,真是一段艰难的旅程,学到了很多东西,差点用 parted 毁掉 2TB,要小心,祝你好运。
答案1
这是可能的,而且非常频繁通过外部 USB 记忆棒和内部驱动器完成。
关于分区表类型:
BIOS 通常不会需要任何分区表。它只关心引导代码部分,即 MBR 的前 440 个字节。(但也有例外。如果某些 BIOS 实现无法找到具有常见分区类型之一的 MBR,它们实际上会中断。但愿这种情况很少见。)
GPT 分区表没有身体上替换 MBR – 它始终从扇区 1 开始,而 MBR 位于扇区 0 – 因此磁盘可以同时具有这两种格式。事实上,大多数 GPT 磁盘做有一个仅包含一个覆盖整个磁盘的分区的“保护性 MBR”,以防止较旧的仅限 MBR 的分区工具意外破坏数据。
因此,您可以将 Syslinux 启动扇区安装到 MBR 中,然后它就会启动。(脚本
syslinux-install_update
将为您执行此操作,但您可以gptmbr.bin
在 syslinux 包中查找以手动执行此操作。)与 MBR 分区上的“活动”标志非常相似,Syslinux 将在 GPT 分区上查找“传统 BIOS 可启动”标志(位 2 - UEFI 规范 2.4 节 5.3.3 表 20);如果您安装了
sgdisk
(来自 gptfdisk),上述脚本也会自动设置该标志。也可以使用 GRUB,但它也有点烦人。由于 GRUB 2 想要将其自身的一部分“嵌入”到传统上未使用的扇区 1-62 中,因此它会覆盖存储在同一位置的 GPT。因此,您可能需要创建一个 2-4 MB 的专用分区并将其标记为 BIOS 可引导,这样它
grub-install
就会找到一个嵌入位置。另一方面,UEFI 规范做需要支持 MBR 分区类型(第 12.3.1 节)并将 MBR 分区类型分配
0xEF
给 EFI 系统分区(第 5.2.2 节)。因此,如果您出于某种原因无法让您的磁盘使用 GPT,您仍然可以在 MBR 上创建一个 EFI 系统分区,并且只要它具有正确的文件系统和所有必要的文件,它就会被使用(第 12.3.1.3 节):
对于可移动媒体设备,必须只有一个符合 UEFI 标准的系统分区,并且该分区的根目录中必须包含一个 UEFI 定义的目录。该目录将被命名为
EFI
。所有操作系统加载器和应用程序都将存储在下面的子目录中,EFI
名为BOOT
。目录中每个受支持的处理器架构只能有一个可执行 EFI 映像BOOT
。要使可移动媒体在 EFI 下可启动,必须按照第 3.4.1.1 节中列出的规则进行构建。
至于操作系统,Linux 通常根本不关心今天是从 BIOS 启动,明天是从 UEFI 启动。本周,我不得不将笔记本电脑从 UEFI 模式重新启动到“BIOS 兼容性”模式,然后再重新启动回来,大概有一百次,同时试图在 3.17 UEFI 支持中找出一个错误……
请注意,“BIOS 到 UEFI 转换”文章讲的是完全不同的事情。它描述了如何安装UEFI 本身– 名为“DUET”的 UEFI 实现 – 可从仅 BIOS 系统启动。这与直接从 BIOS 启动操作系统无关。
答案2
是的,这是可能的。
基本思想是GPT 分区你的 USB 记忆棒如下:
- BIOS 启动分区(GPT 类型
1686148-6449-6E6F-744E-656564454649
)- 1 MiB,无文件系统 - EFI 系统分区(GPT 类型
C12A7328-F81F-11D2-BA4B-00A0C93EC93B
)- 200 MiB,VFAT 文件系统 - Linux 启动分区(GPT 类型
0FC63DAF-8483-4772-8E79-3D69D8477DE4
) - 1 GiB,ext4 文件系统 - Linux 根/主文件系统(GPT 类型
0FC63DAF-8483-4772-8E79-3D69D8477DE4
)- 剩余空间,XFS 或 Btrfs 文件系统
此分区允许我们启动遗留系统因为 GPT 仍然有空间用于 MBR(出于向后兼容的原因),并且Grub2有足够的空间将一些中间阶段安装到 BIOS 启动分区中。旧版 BIOS 不关心分区方案,而 Grub2/Linux 内核在理解旧版系统上的 GPT 时没有任何问题。
在UEFI 系统,UEFI 固件忽略 MBR 并使用 EFI 系统分区作为入口点。
例如,使用 Fedora,您基本上必须执行以下操作:
确保 Linux Boot 文件系统已安装在 下,/boot
并且 EFI 系统分区文件系统已安装在 下/boot/efi
。
(重新)安装传统和 UEFI 引导加载程序:
grub2-pc grub2-efi-x64 shim-x64 efibootmgr
(重新)生成用于传统启动和 UEFI 启动的 grub 配置文件:
# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfg
根据您的系统是在传统模式还是 UEFI 模式下启动,您必须修复第一个或第二个文件并替换(linux|initrd)16
为(linux|initrd)efi
或反过来。
将 grub 安装到 MBR 中:
# grub2-install --target=i386-pc /dev/sd_your_usb_stick_device
瞧。