我在 USB 记忆棒中安装了 Linux(完整安装不是实时安装)。当我设置它时,它使用 BIOS 启动,但现在我需要将其更改为 UEFI,因为一些较新的机器只能在 UEFI 中启动。我读过很多文章,比如这和这并按照说明进行操作,但仍然不起作用。这就是我的 USB 使用的样子fdisk -l
Disk /dev/sdb: 238.5 GiB, 256087425024 bytes, 500170752 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x281a9f52
Device Boot Start End Sectors Size Id Type
/dev/sdb1 411648 143362047 142950400 68.2G 83 Linux
/dev/sdb2 143362048 159897599 16535552 7.9G 5 Extended
/dev/sdb3 159897600 500170751 340273152 162.3G 7 HPFS/NTFS/exFAT
/dev/sdb4 * 2048 411647 409600 200M ef EFI (FAT-12/16/32)
/dev/sdb5 143364096 159897599 16533504 7.9G 82 Linux swap / Solaris
其中 sdb1 是 Linux 安装,sdb2 和 sdb5 是交换区,sdb3 是存储,sdb4 是我创建的 EFI 分区。
我从桌面启动,插入 USB 驱动器,然后执行以下操作:
$ sudo mount /dev/sdb1 /mnt
$ sudo mkdir -p /mnt/boot/efi
$ sudo mount /dev/sdb4 /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
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu-usb --recheck --no-floppy --debug
Grub 似乎安装成功,并且我得到以下输出:
BootCurrent: 0001
Timeout: 2 seconds
BootOrder: 0002,0001,001B,001A,0000,0019,0017,0018,001C,0021
Boot0000* Windows Boot Manager
Boot0001* UBUNTU
Boot0010 Setup
Boot0011 Boot Menu
Boot0012 Diagnostic Splash Screen
Boot0013 Lenovo Diagnostics
Boot0014 Startup Interrupt Menu
Boot0015 Rescue and Recovery
Boot0016 MEBx Hot Key
Boot0017* USB CD
Boot0018* USB FDD
Boot0019* ATAPI CD0
Boot001A* ATA HDD0
Boot001B* USB HDD
Boot001C* PCI LAN
Boot001D* IDER BOOT CDROM
Boot001E* IDER BOOT Floppy
Boot001F* ATA HDD
Boot0020* ATAPI CD
Boot0021* PCI LAN
Boot0002* ubuntu-usb
Installation finished. No error reported.
然后我卸载了文件系统和 /mnt 并使用 USB 重新启动,但它没有使用 UEFI 启动。它仍然可以在支持 BIOS 的主板上启动,但不能在仅支持 UEFI 的主板上启动。
答案1
这仍然使用 DOS 分区表,该分区表无法在仅 UEFI 系统上用于引导目的。更严格地说,它应该在 CSM 系统上运行,但根据经验,它并不总是如此。
使用该工具将分区表转换为 GPTgdisk
它将自动转换为 GPT,然后您可以使用 来检查它是否正确p
。