如何创建EFI系统分区?


34

TL; DR如何从头开始创建EFI系统分区?创建EFI固件后,如何将其放置在上面?

长版

我有东芝T430笔记本电脑。我在安装Windows 7时收到了它(但我认为它最初是Windows 8附带的)。我在上面安装了Ubuntu,但是删除了磁盘上的一些分区,因此最终清除了Windows,只安装了Ubuntu。在删除的分区中有EFI系统分区。我发现Ubuntu现在以传统模式(而不是UEFI)启动。我正在尝试按照本指南将Ubuntu安装从Legacy转换为UEFI。问题-由于从BIOS选择要使用UEFI进行引导时,没有EFI分区,所以无法引导。这不仅对硬盘驱动器重要,而且对USB和DVD也很重要。我认为这是合乎逻辑的-它期望有一个EFI分区,并且由于找不到它,因此无法继续从HDD或DVD启动。那么如何重新创建EFI分区?

上面的指南说:

创建一个EFI分区

如果要在Ubuntu安装程序中手动分区磁盘,则需要确保已设置EFI分区。

  1. 如果您的磁盘已经包含EFI分区(例如,如果您的计算机已预装Windows8),那么它也可以用于Ubuntu。不要格式化它。强烈建议每个磁盘只有1个EFI分区。

  2. 可以通过最新版本的GParted(可以在12.04磁盘中包含的Gparted版本)创建EFI分区,并且必须具有以下属性:

    1. 挂载点:/ boot / efi(注:使用手动分区时无需设置此挂载点,Ubuntu安装程序将自动检测到该挂载点)

    2. 大小:最小100Mib。推荐200MiB。

    3. 类型:FAT32

    4. 其他:需要一个“启动”标志。

我在创建此分区时遇到了一些麻烦:

  • 我从实时Ubuntu DVD引导,打开GParted,创建200MB分区并将其格式化为FAT32。
  • 在GParted中,我无法设置安装点,因此无法设置引导标志。
  • 我没有设置挂载点,/etc/fstab因为它是实时CD,与普通启动相比,fstab看起来与我期望的完全不同。无论如何,我只是不知道该设置什么值。

我通过实时DVD重新启动,然后选择安装Ubuntu。然后,我使用提到的条件创建了一个分区-挂载点,200MB,FAT32,引导标志。

但是,我仍然遇到这个问题,我想这是因为在该分区上没有EFI固件,它只是一个空分区,适合使用EFI固件。

再说一次,如何创建一个具有EFI软件的EFI分区,以便笔记本电脑可以再次以UEFI模式启动?

解决方案谢谢你们的回答。我所做的是通过格式化整个磁盘从头开始安装Windows 8.1,然后在其旁边安装(这次是正确的)Ubuntu。现在是我的分区:

磁盘分区

在Win 8安装过程中,一旦我删除了所有现有分区并让Windows重新格式化磁盘,它就会在主安装分区之外自动创建三个附加分区,即1、2、3。现在,在我有了适当的ESP之后,我可以在UEFI模式下从HDD或DVD引导。

您说默认情况下,ESP不存储任何信息,但是我想当操作系统安装时,ESP会在其中存储一些信息。所以我想我的情况是这样的:我已经擦除了它,即使我重新创建了它,也没有任何信息,因为ESP的创建是在安装操作系统之后完成的。我丢失了Ubuntu安装(没什么大不了的,无论如何这是一个全新的安装),但是我想为了保存它,我应该遵循grawity的建议。虽然没有时间,但是很高兴现在一切都很好。


1
ESP存储引导加载程序。因此,如果您已有安装并删除ESP,则将无法启动计算机。这种类型的问题实际上很容易解决- 如果您知道怎么做!
Rod Smith

好吧,我的问题是:)
Alex Popov 2014年

Answers:


37

首先,您没有在GParted中设置挂载点;这可以通过mount命令手动(或临时)完成,也可以通过编辑永久完成/etc/fstab。因此,您对此问题的关注被放错了位置。

其次,EFI系统分区(ESP)只是具有特定类型代码(即GPT磁盘上的C12A7328-F81F-11D2-BA4B-00A0C93EC93B)设置的FAT分区。请注意,安装点/etc/fstab不是ESP定义的一部分。通过在ESP上安装ESP(/boot/efi通常通过一个/etc/fstab条目)来访问ESP,这在Linux中是常规的(但不是必需的)。设置类型代码的方式因一个程序而异:

  • 在中gdisk,将类型代码设置为EF00。(gdisk使用扩展为磁盘上实型代码的两字节类型代码;“ EF00”只是“ C12A7328-F81F-11D2-BA4B-00A0C93EC93B”的助记符。)
  • 在GParted或中parted,设置“启动标志”。但是请注意,这仅适用于GPT磁盘。您不能使用这些程序在MBR磁盘上设置ESP类型代码。(因为基于EFI的计算机通常从GPT磁盘启动,所以通常这没什么大不了的。)
  • 在Ubuntu安装程序中,将分区标识为“ EFI引导分区”。然后设置类型代码并进行/etc/fstab适当设置。
  • 在最新版本的Linux中fdisk,您可以通过分区号(在GPT磁盘上为“ EFI System”指定1,在MBR磁盘上为0xEF)或在GPT磁盘上输入完整类型代码来设置分区类型。

第三,ESP不保存固件-顾名思义,固件存储在主板上的芯片中。因此,您在ESP上安装EFI固件的努力简直是白痴。(此规则有两个例外。首先,您可以在ESP上存储固件文件以更新计算机上的固件。不过,这只是一个临时存放区。第二,DUETClover引导加载程序, EFI从加载ESP作为常规程序,通常这些工具是BIOS引导装载程序,虽然,使BIOS,仅计算机开机,好像他们是EFI的机器;他们是通常在您拥有计算机的带有EFI固件的计算机上使用。从技术上讲,DUET和Clover都不是固件。它们是BIOS引导加载程序,其作用与EFI相同。)

最后,我可以想到造成您问题的许多可能原因,但是如果没有进一步的信息,我将需要写半本书来涵盖所有问题。我建议您在计算机上运行启动信息脚本。这将产生一个名为的文件RESULTS.txt。将其发布到pastebin网站,然后将URL连同文档一起发布回去。这将提供有关您的配置的硬数据,这将大大减少造成问题的可能原因的范围。


如何使用gdisk“将类型代码设置为EF00”?
B 2014年

@BSeven t1ef00
hobbs 2015年

11

EFI分区不保留固件(存储在主板上的芯片中)。它将引导加载程序保留为已安装的操作系统。基本上,这是EFI的替代方案,就像在BIOS PC中一样,将引导加载程序放在磁盘的第0个扇区中。

这意味着,一旦有了这样的分区,则在安装操作系统时应自动填充该分区。(尽管很有可能安装光盘本身也必须以EFI模式引导,否则它不会打扰设置UEFI引导……实际上,某些设置甚至都无法从BIOS模式完成。)

如果您已经安装了Ubuntu,则需要:

  1. 安装GRUB的UEFI版本;我认为它在grub-efi-amd64-signed包装中。

    grub-install --target=x86_64-efi-signed
    

    (对于未签名的grub-efi-amd64版本,为x86_64-efi。)

  2. 确保GRUB已像\EFI\Boot\bootx64.efi在EFI系统分区中一样自行安装。(我在这里使用EFI路径语法;如果将分区安装/boot在Linux上,则为/boot/EFI/Boot/bootx64.efi。)

    如果还没有,请grubx64.efi手动复制到该位置。

    这是必需的,因为grub-install除非系统已经以EFI模式启动,否则无法将自身添加到EFI引导菜单中。(“ BIOS模式”中无法访问“ EFI变量”。)因此,引导GRUB的唯一方法是将其放在“后备引导加载程序”位置。

  3. 重启。尝试在固件的启动菜单中选择某种EFI模式(EFI固件甚至在GRUB之前都有自己的启动菜单)。

  4. 检查是否dmesg | grep "efi:"显示任何内容,以确认您处于EFI模式。


1
我并不是要提出一个旧的线程,但我正在尝试找到解决问题的方法并遇到了这个线程。我正在尝试更新Dell计算机上的BIOS固件,并且Dell以Windows格式的EXE或应放在EFI格式的分区上的某些文件的形式提供它。即,要求我“将文件下载到可移动媒体设备上的EFI分区”。我不知道OP的意思是什么,只是想指出您在第一段中所说的话。

@Ray:您正在将将来的固件下载到该分区中。当您打开计算机时,它仍然没有用作实际的固件。它仅用作“固件更新程序”程序的数据文件,该程序会将其写入/刷新到主板中。(请记住,当此类说明曾经说“将文件下载到MS-DOS可引导软盘”时?还是,该磁盘也没有保存您的主BIOS。它只是保存了刷新程序和应该刷新的数据。 (这里也是。)
grawity

1
是的我知道。我想我只是说OP不一定是错误的,而是不精确的。同样,您说对了,固件存储在芯片上,现在我被要求在EFI分区上存储将来的固件。但是,如果不注意描述,就会有人说固件存储在EFI中。(即,不是完全错误,而是一半错误)
Ray

2

使用记事本创建两个文件,然后将它们保存到USB Windows安装驱动器。
另存为:CreatePartitions-UEFI.txt

select disk 0  
clean  
convert gpt  
rem == 1. System Partition  =====================  
create partition efi size=210  
format fs=fat32 quick label=”SYSTEM”  
active  
rem == 2. Microsoft Reserved (MSR) partition  ======  
create partition msr size=16  
rem == 3.  Windows partition  ===================  
create partition primary size=xxxxxx   
format fs=ntfs quick label=”Windows”   
assign letter=”W”  
rem == 4. Recovery tools partition  ================  
create partition primary size=460  
format fs=ntfs quick label=”Recovery”  
assign letter=:R”  
list volume

使用记事本创建另一个文本文件:
另存为:diskpart-UEFI.txt

diskpart /s D:\CreatePartitions-UEFI.txt   

REM where D:/ is the usb drive. This command runs the text file to install the partitions.

如果使用的是MBR,则将命令转换为mbr。

要获得Windows分区的大小,请乘以HD大小乘以1024,100 gig硬盘驱动器乘以1024等于102400减去210(efi大小)减去16(msr大小)减去460(保留大小)等于要放入的大小Windows分区大小。(xxxxxx)

您可以从终端(命令提示符)cd / d D更改分区大小:>记事本CreatePartitions-UEFI.txt

在USB驱动器中时,请使用记事本diskpart-UEFI.txt打开并保持打开状态或写下命令,以免出错。将分区的大小更改为自己喜欢的大小后,将其关闭,然后cd / dx:/ Sources然后运行diskpart / s D:\ CreatePartitions-URFI.txt。
按最后一个命令列出卷,显示分区,如果满意,请退出>关闭计算机>重新启动>安装


-2

使用gnome-disks,打包“ gnome-disk-utility”,非常方便。


2
欢迎来到超级用户!我不是DV-er,但是虽然一行的答案有时可能有用,但是如果您编辑答案以包含一个说明,它会更好:)他们将如何在gnome-disk-utility中创建EFI系统分区。
bertieb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.