将非 EFI/GPT 安装复制到 EFI/GPT 安装

将非 EFI/GPT 安装复制到 EFI/GPT 安装

我最近购买了 2 个 SSD(我的第一个),并将把我的系统移到那里。我使用 MD RAID 1 + LVM。我尚未决定是否要设置新的拉伸安装,或将我的 jessie 安装复制到新磁盘(如果可能的话)。

我想将新安装设为 UEFI/GPT。我已经在新磁盘上完成了测试延伸安装,但正在考虑将当前的 jessie 安装(//home/boot文件系统)复制到新安装上,但不触及 EFI 系统分区。问题是这是否有效。非 EFI/GPT 和 EFI/GPT 安装兼容吗?

我对 GRUB2 如何工作的粗略了解是,“正常”BIOS 设置通常将 GRUB 的第一阶段放在 MBR 中,第二阶段通常放在分区中/boot。而在 UEFI/GPT 设置中,可能全部都在 ESP 中。

答案1

复制应该相对容易; Linux 安装(几乎完全)只是文件。最大(唯一?)的例外是 BIOS 的引导加载程序;它被安装到主引导记录以及主引导记录和第一个分区之间的扇区。 UEFI 实际上消除了该异常;引导加载程序现在也只是一个文件。

BIOS 引导的工作方式(简单来说)是 BIOS 从磁盘 (MBR) 读取第一个扇区,并执行该扇区中的代码。该代码具有 BIOS 功能来读取可用的扇区,对于 grub,它会从 MBR 和第一个分区之间的剩余扇区中读取自身的其余部分。这需要提供足够的代码让 GRUB 理解文件系统,以便它可以从 /boot 读取配置和自身的其余部分。它执行此操作,然后还从那里读取内核和 initramfs。然后它启动内核。

UEFI 启动的工作方式(简而言之)是固件能够识别分区(至少是 GPT,也可能是 DOS)和文件系统(至少是 FAT)。它具有某种类型的 NVRAM(EFI 变量),用于存储要运行的命令 - 想想 shell 命令(UEFI 包括 shell)。即路径(磁盘、分区、文件系统上的路径)和参数。它运行该命令。对于 Linux,这将是以下之一:

  • 像 GRUB 这样的引导加载程序(在 Debian 下,可能位于EFI/debian/grubx64.efi)或其他几个引导加载程序(refind、systemd-boot 等)
  • Linux 内核(Debian 支持自从喘息以来
  • 用于安全启动的 Microsoft 签名垫片,然后加载上述内容之一。

该命令可以完全访问 UEFI 堆栈,包括读取文件、网络等。对于 GRUB,它包括自己的文件系统支持,可用于 ext4、mdraid、LVM 等。

最终,从您的 Linux 安装来看,这意味着它看到的差异是:GRUB 不是安装在磁盘开头的几个特殊扇区中,而是一个/boot/efi/.请注意,这是 GRUB 的不同版本;在 Debian 下它是 grub-efi-amd64 (或 -ia32)而不是 grub-pc。您需要切换已安装的 grub 软件包。

我预计您可能会遇到的唯一一件事是,操作 EFI 变量通常需要您已经通过 UEFI 启动。因此 grub 安装可能很难正常工作。一些解决方法:

  1. 复制系统并更改 grub 软件包后,启动到启用 UEFI 的救援光盘(例如 Stretch 安装程序,在救援模式下运行)并运行 grub-install 或 efibootmgr。

  2. 如果您的系统有启动选择菜单,即使没有通过 EFI 变量将其设置为启动选项,它也可能会找到 Debian 安装。

  3. 将 grub 复制到/boot/efi/EFI/debian/grubx64.efito /boot/efi/EFI/BOOT/bootx64.efi— 这是官方 UEFI 后备路径(至少对于 64 位计算机而言)。这可能足以让它显示在固件启动菜单中。

  4. 如果您的系统允许使用 UEFI shell 来引导系统。然后您可以使用 grub-install 或 efibootmgr 更新 EFI 变量。

完成此操作后,复制/转换的系统与最初使用 UEFI 安装的系统之间应该没有任何不同。

答案2

@derobert 的答案涵盖了许多不同的选项。我最终使用了类似他的号码的东西。 3,但我会对此进行一些详细介绍。

根据中描述的方法 将逻辑卷从一个卷组移动到另一个卷组,我使用 BIOS 将一些包含现有 Debian 9 系统的逻辑卷复制到我购买的一些新磁盘上。我还在这些磁盘上从头开始对 Debian 9 进行了新的 UEFI 安装。

然后问题是如何让这些磁盘上的系统副本进行引导。碰巧的是,我能够从新的/从头开始/UEFI 安装中使用 GRUB 启动菜单。当我点击e新安装的 GRUB 菜单项时,我能够使用以下形式将 GRUB 脚本中的设备名称更改为复制的 LV 的设备名称,(lvm/debian-root)其中debian是卷组的名称,root是卷组的名称。逻辑卷。这样我就能够启动到现有系统的副本。

但是,我仍然必须使系统可启动。在@debrobert 的帮助下,我执行了以下操作:

  1. 切换自grub-pcgrub-efi
  2. 将属于新安装的现有 EFI 系统分区挂载为/boot/efi
  3. grub-install --efi-directory=/boot/efi --bootloader-id=origdebian --force-extra-removable
    

    这做了两件事。

    • grubx64.efi在目录中 安装了一个 EFI 可执行文件/boot/efi/EFI/origdebian。新安装的grubx64.efi目录中已经有一个可执行文件/boot/efi/EFI/debian

      然后,EFI 固件能够origdebian在固件启动菜单中看到一个条目。

    • BOOTX64.EFI在目录中 安装了一个 EFI 可执行文件/boot/efi/EFI/BOOT。这就是所谓的“可移动媒体路径”。作为Debian Wiki 中描述,

所有固件实现都必须使用此路径才能运行操作系统安装程序。

因此,这条路径旨在充当临时后备路径。系统可启动后,即可将其删除。

相关内容