首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将非EFI/GPT安装复制到EFI/GPT安装

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

Unix & Linux用户
提问于 2017-06-19 10:17:14
回答 2查看 890关注 0票数 3

我最近购买了两个SSD(我的第一个),并将把我的系统移到那里。我正在使用MD 1+ LVM。我还没有决定是要设置一个新的扩展安装,还是将jessie安装复制到新磁盘(如果可能的话)。

我想做新的安装UEFI/GPT。我已经在新磁盘上进行了测试扩展安装,但考虑将我当前的jessie安装( //home/boot文件系统)复制到新安装中,但不涉及EFI系统分区。问题是这样做是否有效。非EFI/GPT和EFI/GPT是否兼容?

我对GRUB2工作原理的粗略了解是,“正常”的BIOS设置通常在MBR中有第一阶段的GRUB,在/boot分区中通常有第二阶段。而在UEFI/GPT设置中,大概都在ESP中。

EN

回答 2

Unix & Linux用户

发布于 2017-06-20 19:03:30

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

BIOS引导工作(简单地说),BIOS从磁盘(MBR)读取第一个扇区,并从该扇区执行代码。该代码具有BIOS函数来读取它可用的扇区,在grub的情况下,它从MBR和第一个分区之间的剩余扇区中读取其余的部分。这需要提供足够的代码让GRUB理解文件系统,这样它就可以从/boot读取配置和其馀部分。它会这样做,然后从那里读取内核和initramfs。然后启动内核。

UEFI引导工作(简单地说),固件可以理解分区(至少是GPT,可能还包括DOS )和文件系统(至少是FAT)。它有某种类型的NVRAM ( EFI变量)来存储要运行的命令-think命令(UEFI包括一个shell)。也就是说,路径(磁盘、分区、文件系统上的路径)和参数。它运行那个命令。在Linux的情况下,这可能是:

  • 类似GRUB的引导加载程序(在Debian下,可能在EFI/debian/grubx64.efi)或其他几个(refind、systemd等)
  • Linux内核( Debian 自从惠兹中支持)
  • 一个由微软签署的shim用于安全引导,然后加载上面的一个.

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

最终,从您的Linux安装来看,这意味着它所看到的不同之处在于:它不是在磁盘开始时安装在几个特殊扇区中,而是安装在/boot/efi/中的一个文件中。请注意,这是一个不同的grub构建;在Debian下,它是grub amd64 64(或-ia32),而不是grub。您需要切换出已安装的grub包。

我希望您可能会遇到的唯一一件事是,操作EFI变量通常要求您已经通过UEFI引导。所以很难让这个grub安装开始工作。有几个解决办法:

  1. 在复制系统并更改grub包后,启动到启用UEFI的救援磁盘(例如拉伸安装程序,以救援模式运行),然后运行grub或efibootmgr。
  2. 如果您的系统有一个引导选择菜单,它可能会找到Debian安装,即使它没有通过EFI变量设置为一个引导选项。
  3. 将grub复制到/boot/efi/EFI/debian/grubx64.efi/boot/efi/EFI/BOOT/bootx64.efi --这是UEFI的正式回退路径(至少对于64位计算机是这样的)。这可能足以让它显示在固件启动菜单中。
  4. 如果您的系统可用,请使用UEFI引导系统。然后,您可以使用grub或efibootmgr更新EFI变量。

在完成此操作之后,您复制/转换的系统与最初安装在UEFI中的系统之间不应该有什么不同。

票数 3
EN

Unix & Linux用户

发布于 2017-07-18 11:12:37

@derobert的答案涵盖了许多不同的选项。我最后使用了一些类似于他3号的东西,但我会详细介绍这方面的内容。

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

接下来的问题是如何在这些磁盘上启动我的系统的副本。正如所发生的那样,我能够从新的/ from -scratch/UEFI安装中使用GRUB启动菜单。当我在新安装的GRUB菜单条目上单击e时,我能够使用表单(lvm/debian-root)将GRUB脚本中的设备名称更改为复制的LV,其中debian是卷组的名称,root是逻辑卷的名称。这样,我就能够引导到现有系统的副本中。

然而,我仍然必须使系统可启动。在@debrobert的帮助下,我做了以下工作:

  1. grub-pc切换到grub-efi
  2. 将属于新安装的现有EFI系统分区挂载为/boot/efi
  3. 运行grub-install -efi-目录=/boot/efi--引导加载程序-id=origdebian-强制-可移动-这做了两件事。
    • 它在目录grubx64.efi中安装了EFI可执行文件/boot/efi/EFI/origdebian。新安装在目录grubx64.efi中已经有一个可执行的/boot/efi/EFI/debian。EFI固件能够在固件启动菜单中看到一个条目origdebian
    • 它在目录BOOTX64.EFI中安装了EFI可执行文件/boot/efi/EFI/BOOT。这就是所谓的“可移动媒体路径”。作为在Debian Wiki中描述

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

因此,这条路径的作用是作为暂时的退路。系统可引导后,就可以删除它。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/371946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档