哪些命令可以在单启动硬件上将 Ubuntu BIOS 安装转换为 EFI/UEFI 而无需启动修复?

哪些命令可以在单启动硬件上将 Ubuntu BIOS 安装转换为 EFI/UEFI 而无需启动修复?

意外安装 BIOS 模式

我有带 UEFI 设置实用程序的 Intel 64 位硬件。Ubuntu 14.04.1 LTS 是作为唯一连接的驱动器上的唯一操作系统安装的。Ubuntu 意外地安装在 BIOS/CSM/旧模式下。

转换为 UEFI

稍后学习 UEFI 时,目标是将现有的 Ubuntu 安装更改为通过 EFI/UEFI 进行(更快)启动。我仍然希望有某种 - 显示 2 秒 - 启动菜单,允许我进入 UEFI 设置实用程序。因此我认为我确实需要使用 Grub(不能使用 EFI 启动存根)和GOP 支持需要 Grub 1.99 或更高版本。我已经使用 Live CD 对驱动器进行了重新分区,并在驱动器的开头插入了一个 200 MiB 的 EFI 分区,并将该 fat16 格式的分区标记为类型 id 0xEF。

前:

# fdisk -l /dev/sda
...
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   108478463    54238208   83  Linux
/dev/sda2       108480510   125044735     8282113    5  Extended
/dev/sda5       108480512   125044735     8282112   82  Linux swap / Solaris

后:

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *      411648   108478463    54033408   83  Linux
/dev/sda2       108480510   125044735     8282113    5  Extended
/dev/sda3            2048      411647      204800   ef  EFI (FAT-12/16/32)
/dev/sda5       108480512   125044735     8282112   82  Linux swap / Solaris

Partition table entries are not in disk order

请勿进行引导修复

Ubuntu 社区 wiki 建议使用启动修复来将 Ubuntu 转换为 EFI 模式。我不想使用 GUI,也不想安装任何额外的软件包,也不想任何数据被意外发送到 pastebin.com,而且因为我确实想知道到底会更改什么,所以我不想使用引导修复

内部原理

为了弄清楚启动修复实际上做了什么,我发现了以下代码片段:

如果采用 gpt 分区,Boot-Repair 将通过卸载 grub-pc 并安装 grub-efi 将 BIOS 安装转换为 UEFI。

来源:http://ubuntuforums.org/showthread.php?t=2147295&p=12657352#post12657352

UEFI 模式安装比较

在 UEFI 模式下全新安装的 Ubuntu 14.04.1 会创建一个 512 MiB Fat32 格式的 EFI 分区。该分区包含一个目录,/EFI/ubuntu其中包含 4 个文件:grub.cfggrubx64.efi和。grub.cfg 包含:MokManager.efishimx64.efi

search.fs_uuid 7d843e47-3917-4114-8725-55dfa1fbe002 root hd0,gpt2
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

Search.fs_uuid 指向 Linux 安装分区的 UUID,在此比较中 UEFI 安装的 Linux 安装分区为 /dev/sda2 (相对于 BIOS 模式安装中的 sda1)

未发现潜在的 Asrock 固件问题

在固件中仍禁用 CSM 并使用干净的 UEFI 模式 Ubuntu 安装。使用 Live CD 将 512 MiB EFI 分区的大小调整为 200 MiB,gparted导致其格式从 FAT32 更改为 FAT16。Asrock 固件 P1.50 (在启动消息“BIOS 日期”中被 AMI 错误地称为 BIOS)仍然能够启动到 UEFI 模式 Ubuntu:UEFI+FAT16=好的
将分区表从 GPT 转换为 MBR(msdos)使用相同的 Live CD 终端命令gdisk及其命令r g p w也会在 MBR 分区驱动器上产生可 UEFI 启动的 Ubuntu:UEFI+膜生物反应器=好的

问题

这是否意味着我需要执行的唯一命令 - 从旧版 Ubuntu 安装按此顺序 - 是:

# apt-get install grub-efi
# apt-get remove grub-pc

? 或者还需要做更多吗?

答案1

在 UEFI 模式下启动 Ubuntu Linux (14.04) Live CD。如果是 USB 启动设备,请在 UEFI 中禁用“快速启动”。

打开终端窗口(Ctrl++ AltT

要验证您是否实际在 UEFI 模式下运行,请使用以下 bash 命令:

$ [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS

最终的输出结果应为:

UEFI

如果出现此情况BIOS,请重新启动您的固件并更正启动设备首选项。

要将 BIOS 转换为 EFI/UEFI,请输入以下命令:

$ sudo mount /dev/sda1 /mnt
$ sudo mkdir -p /mnt/boot/efi
$ sudo mount /dev/sda3 /mnt/boot/efi
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys
$ sudo mount --bind /run /mnt/run
$ modprobe efivars
$ sudo chroot /mnt
# apt-get install grub-efi-amd64

Apt-get 网络失败?

# rm /etc/resolv.conf
# ln -s ../run/systemd/resolve/stub-resolv.conf resolv.conf
# apt-get install grub-efi-amd64

没有 apt-get 失败

The following extra packages will be installed:
  efibootmgr grub-efi-amd64-bin
The following packages will be removed:
  grub-gfxpayload-lists grub-pc
...
After this operation, 2,399 kB of additional disk space will be used.

# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck --no-floppy --debug

尽管以错误消息结尾:

Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.

下次重启已经显示“Ubuntu“在固件的启动选项菜单中,并像以前一样启动到控制台,除了现在以 efi 模式启动:

$ dmesg | grep EFI
efi: EFI v2.31 by American Megatrends
fb0: EFI VGA frame buffer device
EFI Variables Facility v0.08 2004-May-17
fb: switching to inteldrmfb from EFI VGA

如果出现问题,https://superuser.com/questions/376470/how-to-reinstall-grub2-efi可能有帮助。

答案2

我也用这个方法,但做了一点小改动。尽管网络正常,但我还是找不到apt-get install grub-efi-amd64任何包裹服务器。

我通过最后一次在 BIOS 模式下启动并安装 grub-efi-amd64 来解决这个问题。

然后我可以按照这里的程序进行,但需要省略apt-get install grub-efi-amd64

答案3

小修正:

sudo apt-get install -y grub-efi-amd64
sudo mount /dev/sda1 /mnt
sudo mkdir -p /mnt/boot/efi
sudo mount /dev/sda3 /mnt/boot/efi
for d in dev sys proc usr run; do sudo mount -B /$d /mnt/$d; done
sudo modprobe efivars
sudo chroot /mnt
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck --no-floppy --debug

完毕。

相关内容