AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1253207
Accepted
ATLief
ATLief
Asked: 2020-06-24 13:11:26 +0800 CST2020-06-24 13:11:26 +0800 CST 2020-06-24 13:11:26 +0800 CST

为什么不能(以及如何)安装 grub-pc 和 grub-efi 软件包?

  • 772

我想同时安装grub-pc和grub-efi包,以便我的服务器可以使用任何一种方法启动;但是,当我尝试安装一个时,apt 只有在我删除另一个时才会继续。

根据apt info grub-pc:

替换:grub、grub-common (<= 1.97~beta2-1)、grub-coreboot、grub-efi-amd64、grub-efi-ia32、grub-ieee1275、grub-legacy、grub2 (<< 2.04-1ubuntu12.2 )

并且apt info grub-efi-amd64:

替换:grub、grub-common (<= 1.97~beta2-1)、grub-coreboot、grub-efi-ia32、grub-ieee1275、grub-legacy、grub-pc、grub2 (<< 2.04-1ubuntu12.2)

为什么要施加这种限制?否则两个包不能共存吗?我怎么能这样做呢?

software-installation grub2 apt grub-efi
  • 3 3 个回答
  • 2727 Views

3 个回答

  • Voted
  1. Best Answer
    ubfan1
    2020-06-24T13:57:50+08:002020-06-24T13:57:50+08:00

    在包装中下拉一级,然后安装 grub-pc-bin 和 grub-efi-amd-bin。这些软件包不会冲突,但它们既不会将 grub 作为活动引导加载程序安装,也不会在升级时更新 grub.cfg。安装您选择的用于更新功能的顶级软件包:grub-pc 或 grub-efi-amd。


    只有一个 /boot/grub/grub.cfg 文件,因此您必须选择要使用的格式(旧版或 UEFI)(它们没有太大区别,但像 chainloader 命令这样的一些东西却大不相同)。

    • 2
  2. mpb
    2020-09-19T08:27:49+08:002020-09-19T08:27:49+08:00

    2020 年 9 月 27 日更新的答案:

    根据额外的经验,我现在可以更新我的答案。

    大概您的目标(不仅仅是安装软件包)实际上是制作一个可以在 BIOS 和 EFI 系统上启动的磁盘。

    如果您的磁盘已经可以在 BIOS 系统上启动,您可以通过运行以下命令来添加 EFI 启动功能。请注意,(1) 磁盘需要有一个有效的、正确格式化的 ESP(EFI 系统分区),(2) ESP 需要安装在/boot/efi,(3) 磁盘可能需要有一个 GPT(GUID 分区)表)而不是 MBR(主引导记录)。假设所有这些,以下命令对我有用:

    $  sudo  apt-get  install  grub-efi-amd64-bin
    $  sudo  grub-install  --force  --removable  --target=x86_64-efi  \
         --efi-directory=/boot/efi  --bootloader-id=Ubuntu
    

    如果您的磁盘已经可以在 EFI 系统上启动,您可以通过运行以下命令来添加 BIOS 启动功能。请注意(1)您的磁盘可能需要有一个 GPT(它可能有)和(2)如果您的磁盘有一个 GPT,则 GPT 将需要指定一个“传统 BIOS 引导”分区。假设您满足这些先决条件,以下命令可能对您有用。(我没有测试过这些命令,但我怀疑它们可能会起作用。)用/dev/sdX适当的设备替换(通常/dev/sda)。

    $  sudo  apt-get  install  grub-pc-bin
    $  sudo  grub-install /dev/sdX
    

    update-grub无论哪种情况,在进行上述更改后重新运行可能都没有什么坏处。

    $  sudo  update-grub
    

    供您参考,这里是Grub 文档。

    旁白:我可以通过运行来查看我的 GPT 分区表sudo gdisk -l /dev/sdX。例如,我的 Legacy BIOS 引导分区如下所示:

    Number  Start (sector)    End (sector)  Size       Code  Name
       1              34            2047   1007.0 KiB  EF02  2004_bios_boot
    

    请注意,ubfan1 的回答说 Grub 的“legacy”和“UEFI”版本的配置文件之间的差异可能会导致问题。虽然存在这样的差异,但我认为它们可能与这种情况无关(或可能只是最小相关)。“Legacy Grub”是 Grub 的第 1 版。而“传统启动”是通过 BIOS 启动的。Grub 版本 2(通常称为“Grub”)确实支持 BIOS 和 EFI 引导。所以不要把“legacy Grub”和“legacy booting”混为一谈。

    2020 年 9 月 18 日的原始答案:

    如 ubfan1 的回答中所述,您可以同时安装grub-pc-bin和grub-efi-amd64-bin。

    grub-pc但请注意,和grub-efi包本身有一些文件。文件本身似乎都有不同的路径。所以文件本身不会冲突。

    https://packages.ubuntu.com/focal/amd64/grub-pc/filelist
    https://packages.ubuntu.com/focal/amd64/grub-efi/filelist
    https://packages.ubuntu.com/focal/ amd64/grub-efi-amd64/文件列表

    至于为什么要限制,我只能推测。一些可能的原因:

    1. 如果您查看此答案,似乎建议从以 EFI 模式启动的系统内部安装 Grub 的 EFI 版本。因此,EFI Grub 可能以系统特定的方式安装。

    2. Ubuntu 开发人员可能不想在同一系统上支持多个引导加载程序。为这样的设置测试和提供 QA 可能很困难。

    3. 有可能 EFI 和 BIOS Grub 都被配置为使用相同的配置文件(可能/boot/grub/grub.conf)。(而且,正如 ubfan1 所提到的,Grub 的 EFI 与 BIOS 版本可能具有不同的功能。)我相信这是一个任意限制,也就是说,不同的 Grub 安装可以配置为使用不同的配置文件。

    顺便说一句:我最近将我的 BIOS 系统转换为 EFI。似乎磁盘可以(至少目前)在任一模式下成功启动。

    如果你想创建一个在两种模式下启动的磁盘,我建议以 EFI 模式安装整个操作系统,然后手动尝试添加 GRUB 的 BIOS 版本(或使用 Syslinux)。我这样说是因为我在安装和排除 BIOS 引导加载程序方面有更多的经验。EFI 专家可能会建议相反。

    • 2
  3. sudodus
    2020-09-19T09:52:25+08:002020-09-19T09:52:25+08:00

    为什么不能(以及如何)安装 grub-pc 和 grub-efi 软件包?

    实时 Ubuntu 系统

    这两个软件包都可以在实时 Ubuntu 系统中安装(并已安装)。您在 USB 驱动器中有一个从 Ubuntu iso 文件克隆的实时系统。

    安装的 Ubuntu 系统

    在已安装系统的当前版本中,您必须删除已安装的程序包才能使用另一个。

    我们只能猜测为什么会这样。


    在两个 grub 软件包之间切换可以创建可以在 UEFI 模式和 BIOS 模式(别名 CSM 别名 legacy 模式)下引导的已安装系统。请参阅此链接。

    • 0

相关问题

  • 使用 apt-get upgrade 时如何强制安装内核更新?

  • 设置 LAMP 堆栈的最简单方法是什么?

  • 我应该在哪里安装 sagemath?

  • How do I install Adobe Flash player?对于 11.10 及更高版本明确修复 11.10 上的 64 位 Flash

  • 如何设置软件中心为非 root 用户安装软件?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve