如何将Ubuntu MBR驱动器更改/转换为GPT,并使Ubuntu从EFI引导?


65

我最近升级了PC,新的主板(ASUS M5A99X EVO)使用UEFi而不是常规MBR选项。

我安装的是Ubuntu 11.10,安装时使用的是以前的硬件(MSI MS 7267),Ubuntu可以正常启动,Windows 7也可以,但是Windows 7使用UEFI(GPT)引导,而Ubuntu使用MBR。

我的操作系统位于单独的驱动器中,因此GRUB2不会被Windows Bootloader取代,反之亦然,因为我说两个操作系统都可以正常启动,但是在这种情况下,我必须断开一个驱动器的连接它阻止Windows加载。

现在我的问题是,我该如何更改/转换Ubuntu的驱动器,以便它不使用MBR,而是使用GPT并允许Windows启动?

最好不要重新安装整个系统或丢失任何数据。

如果要擦除驱动器,无论如何运行,如何在GPT,UEFI中安装Ubuntu?

我曾经用gdisk从MBR转换为GPT,但是现在Ubuntu无法启动,好像grub不能启动。

我已经重新安装了操作系统,默认情况下该驱动器现在是GPT,但grup-pc仍代替而不使用grub-efi

我如何使Ubuntu从EFI引导?


希望这可以帮助您rodsbooks.com/gdisk/booting.html
零零

Answers:


113

目录:

  1. 术语
  2. 转换中
  3. 配置(+双启动)

术语

BIOS =基本输入/输出系统

(U)EFI =(统一)可扩展固件接口

MBR =主引导记录

GPT = GUID分区表

UEFI / EFI / BIOS =固件接口

MBR / GPT =计算机如何(每个硬盘)知道驱动器上有哪些分区以及如何从中引导。

UEFI / BIOS

一个固件接口是固件(设备内部的软件)的方式与操作系统交互。它会初始化硬件,然后运行操作系统,并确保操作系统驱动程序可以操作硬件。

BIOS一直是常用的固件接口。UEFI是一种较新的界面,具有多个功能,例如更快,具有GUI以及能够启动网卡并获取ip地址。UEFI取代了EFI。(那些正在开发EFI的人看到有其他人在做类似的事情,因此加入了他们,将EFI的思想带入了他们。这就是UEFI)。

BIOS要求引导加载程序位于磁盘的开始位置,但是UEFI为此使用分区,并可以在多个引导加载程序中进行选择。

MBR / GPT + GRUB

MBR是一个包含引导装载程序(用于BIOS),以及分区映射和一个唯一的盘标识符的盘的开始的代码段。

要将GRUB安装到具有MBR的磁盘上,GRUB会在MBR中放置一个小程序,以从磁盘的另一部分加载其余的GRUB。(之所以这样做,是因为MBR太小,无法包含所有GRUB)。选择的空间是MBR和通常存在的第一个分区之间的空间。

GPT是如何指定分区的标准。它确实具有“保护性” MBR,但这仅用于允许基于BIOS的计算机启动和停止仅了解MBR的工具,以免破坏GPT。它可以有

(如何处理GPT取决于它是使用BIOS(或BIOS仿真模式下的UEFI系统)还是UEFI引导。我将重点讨论UEFI,因为它与问题有关。)

操作系统的引导加载程序存储在称为EFI System Partiton的分区中,该分区(通常)使用FAT32进行格式化。这是GRUB的安装位置。

转换中

第一...

我们正在使用分区表,因此无法保证安全。这是一个冒险的操作。但是,该方法不应丢失数据。

其他遇到的问题:不要在Apple Macs上使用。

现在...

您将需要在活动CD上执行此操作(或将另一个Linux安装安装到其他磁盘上。)

处理GPT磁盘时,我们需要使用GPT感知程序。“ GPT fdisk”是一个很好的工具,可以用来和我将要使用的工具。它可以被称为gptfdiskgdisk依赖于分布(Ubuntu的卡列斯它gdisk)。Parted(和Gparted)也了解GPT,因此可以“安全地”与GPT磁盘一起使用。

要进行转换,您需要:

  1. 调整分区大小以适合GPT数据和EFI系统分区。
  2. 转换磁盘并添加分区
  3. 将GRUB安装到EFI系统分区。

1)调整分区大小

使用parted(命令行)或gparted(GUI)调整第一个和最后一个分区的大小。第一部分之前应有大约200MiB,最后一个分区应从末尾取出1MiB到2MiB。

2)转换磁盘

gdisk /dev/sdx

更改要转换的设备是/dev/sdx

它应该告诉您它将转换分区表。

GPT fdisk (gdisk) version 0.6.14

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format.
THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if
you don't want to convert your MBR partitions to GPT format!
***************************************************************


Command (? for help): 

现在添加一个新分区,使其成为“ EFI system”类型。它应该在开始时找到可用空间(我建议使用一些较低的扇区号,例如34)并自动使用所有可用空间。这些示例使用的是4GB USB闪存驱动器,该驱动器上已经有1个分区,按上面所述调整了大小。

Command (? for help): n
Partition number (2-128, default 2): 2
First sector (34-7831518, default = 34) or {+-}size{KMGTP}: 
Information: Moved requested sector from 34 to 2048 in
order to align on 2048-sector boundaries.
Use 'l' on the experts' menu to adjust alignment
Last sector (2048-421887, default = 421887) or {+-}size{KMGTP}: 
Current type is 'Linux/Windows data'
Hex code or GUID (L to show codes, Enter = 0700): L
0700 Linux/Windows data    0c01 Microsoft reserved    2700 Windows RE          
4200 Windows LDM data      4201 Windows LDM metadata  7501 IBM GPFS            
7f00 ChromeOS kernel       7f01 ChromeOS root         7f02 ChromeOS reserved   
8200 Linux swap            8301 Linux reserved        8e00 Linux LVM           
a500 FreeBSD disklabel     a501 FreeBSD boot          a502 FreeBSD swap        
a503 FreeBSD UFS           a504 FreeBSD ZFS           a505 FreeBSD Vinum/RAID  
a800 Apple UFS             a901 NetBSD swap           a902 NetBSD FFS          
a903 NetBSD LFS            a904 NetBSD concatenated   a905 NetBSD encrypted    
a906 NetBSD RAID           ab00 Apple boot            af00 Apple HFS/HFS+      
af01 Apple RAID            af02 Apple RAID offline    af03 Apple label         
af04 AppleTV recovery      be00 Solaris boot          bf00 Solaris root        
bf01 Solaris /usr & Mac Z  bf02 Solaris swap          bf03 Solaris backup      
bf04 Solaris /var          bf05 Solaris /home         bf06 Solaris alternate se
bf07 Solaris Reserved 1    bf08 Solaris Reserved 2    bf09 Solaris Reserved 3  
bf0a Solaris Reserved 4    bf0b Solaris Reserved 5    c001 HP-UX data          
c002 HP-UX service         ef00 EFI System            ef01 MBR partition scheme
ef02 BIOS boot partition   fd00 Linux RAID            
Hex code or GUID (L to show codes, Enter = 0700): ef00
Changed type of partition to 'EFI System'

您现在应该具有EFI分区。

Command (? for help): p
Disk /dev/sdd: 7831552 sectors, 3.7 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 669247F2-37F7-4797-98F9-9CE56F7EA8C8
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 7831518
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1          421888         7829503   3.5 GiB     0700  Linux/Windows data
   2            2048          421887   205.0 MiB   EF00  EFI System

然后退出 gdisk

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed, possibly destroying your data? (Y/N): y
OK; writing new GUID partition table (GPT).
The operation has completed successfully.

现在,使用Gparted(或命令行mkfs.vfat)将分区格式化为FAT32。

3)安装GRUB

这并不能保证我之前没有亲自尝试过前面的部分。

我不确定这一步,所以我会猜测使用RAOF的说明

要切换到grub-efi,您需要

  1. 查找您的EFI分区;将其安装在/ boot / efi中。将此添加到/ etc /fstab¹
  2. 安装grub-efi软件包
  3. 将您的BIOS引导优先级从UEFI和Legacy切换到仅UEFI(或类似选项)

您应该确定要安装的grub-efi版本

ioreg -l -p IODeviceTree | grep firmware-abi

如果显示EFI32安装grub-efi-ia32软件包,则显示EFI64 安装grub-efi-amd64软件包。您可以使用以下命令安装软件包

sudo apt-get install <package name>

仅当您以EFI模式启动时,这才可能起作用。

如果它不起作用,则可以在安装一次之后尝试这些逐步说明(在“在(U)EFI系统中安装GRUB2”下)grub-efi

配置(+双启动)

如果RAOK的指示有效,则您应该可以将以下行添加到 /etc/grub.d/40_custom

menuentry "Windows 7" {
        set root='(hd0,gpt1)'
        chainloader /EFI/microsoft/bootmgfw.efi
}

它假定Windows被hd0GRUB 识别。可能需要将其更改hd1为起作用。

现在运行

update-grub

更新配置文件。

参考资料和进一步阅读

我使用了几种来源。


哇,谢谢!..但是我仍然坚持将grub-efi安装到驱动器上,我已经重新安装了操作系统,并将驱动器制成了GPT,但是它仍然使用grub-pc而不是grub-efi。
Uri Herrera

如果您可以选择(由于我不拥有任何UEFI设备,我无法提供帮助会严重地削弱了您的能力),则需要以UEFI模式而非BIOS / MBR模式启动实时CD。
Portablejim

在活动CD中删除grub-pc和安装grub-efi(可能在安装之前)如何?
Portablejim

1
哇,这完美无瑕,谢谢!我刚刚将并行安装的Fedora 25和Windows 10从MBR + BIOS迁移到了GPT + UEFI,而没有重新安装任何东西。我已经从用UEFI启动的Fedora 25 Live USB闪存棒执行了步骤1和2。对于第3步,我使用chroot从Live系统访问现有系统,如wiki.ubuntuusers.de/GRUB_2/Reparatur/#chroot-Methode所述。我已经卸载了grub2,安装了grub2-efi和grub2-efi-modules,并明确地重新安装了垫片(如果不重新安装垫片,则不会出现Grub菜单)。终于...
菲利普·哈特维希

2
为了安装GRUB,我刚刚启动了实时USB并使用了启动修复功能。askubuntu.com/questions/226061/…感谢这篇文章!
jbrock

9

这个答案不完整;我还没有测试过任何一个。吞噬您的任何数据都不大可能,但是已经警告您!

我想这里发生的事情是您的BIOS优先从旧版MBR引导,因此可怜的旧UEFI Windows 7被忽略了。

UEFI的优点之一是您不再需要担心Windows覆盖GRUB。它们应该在EFI分区上很好地共存。因此,一种选择是切换到grub-efi注意:我不确定是否grub-efi了解MSDOS样式的分区;请参阅。我认为是的。如果没有,则将无法启动,并且您将需要LiveCD进行恢复。实际上,无论如何都可以使用LiveCD!

要切换到grub-efi您要

  1. 查找您的EFI分区;将它安装在/boot/efi。将此加到/etc/fstab¹
  2. 安装grub-efi套件
  3. 将您的BIOS引导优先级从切换UEFI and LegacyUEFI only(或类似选项)

应该让您进行UEFI引导的Ubuntu安装。如果没有,请启动可信任的LiveCD(或Ubuntu备用安装CD-☺修复“修复损坏的系统”选项),将chroot插入系统,然后grub-pc再次安装。


¹:此步骤的更多细节:您需要找到Linux内核称为EFI系统分区的内容。这将是这样的/dev/sda2/dev/sdb3或such²。然后,您需要创建/boot/efi目录,并在中添加一行/etc/fstab。如果您的EFI分区是/dev/sdb3,那么您将添加以下行:

/dev/sdb3    /boot/efi    vfat    defaults    0    1

运行后,sudo mount /boot/efi您将发现其中/boot/efi包含一个EFI目录以及Windows 7的子目录。


²:由于您有多个硬盘驱动器,所以最好找出分区的UUID,因为在添加/删除硬盘驱动器时该分区将保持稳定,但/dev/sda2不能保证名称不会更改。不过,可以在完成所有其他设置之后完成此操作。

您可以通过查找来找到UUID /dev/disk/by-uuid。例如,我得到:

$ ls /dev/disk/by-uuid -lah
total 0
drwxr-xr-x 2 root root 100 Dec  5 09:12 .
drwxr-xr-x 6 root root 120 Dec  5 09:12 ..
lrwxrwxrwx 1 root root  10 Dec  5 09:12 27fae347-4c7f-45cb-92d6-5f3d410599a1 -> ../../sda3
lrwxrwxrwx 1 root root  10 Dec  5 09:12 4405-64C8 -> ../../sda1
lrwxrwxrwx 1 root root  10 Dec  5 09:12 5243e250-8da5-4fea-aa63-61466022661d -> ../../dm-0

就我而言,我知道/dev/sda1我的EFI系统分区,所以我有

UUID=4405-64C8  /boot/efi       vfat    defaults        0       1

在我的/etc/fstab


如果Windows 7从EFI引导,则它将已将其引导程序放置在EFI分区中-因此您必须有一个one。这在标准Ubuntu文件系统中的任何位置都不可见。您需要使用类似Disk utility程序的内容来找到它。在找到并挂载EFI分区之前,grub-efi它将无法工作-它需要将其引导加载程序粘贴到EFI系统分区中。
RAOF 2011年

仍然无法启动到Ubuntu,我已经使用livecd在fstab中添加了这些行,并且还在/ boot中创建了efi目录,但是它似乎没有任何作用。
Uri Herrera

既然已经安装了EFI分区,则需要运行,sudo grub-install然后sudo update-grub才能在EFI分区上实际安装和设置GRUB。进入安装后,您需要执行此操作(因为它需要了解有关硬盘驱动器安装的知识)。如果您需要帮助,可以在答案中添加详细信息。
RAOF 2011年

是的,请在我的安装中添加如何chroot并重新安装grub。
Uri Herrera

我按照此处的说明进行操作,但是新的EFI分区存在问题。当我尝试安装Windows 10预览版时,安装程​​序给出了此错误:“ Windows检测到EFI系统分区的格式设置为NTFS。将EFI系统分区的格式设置为FAT32并重新启动安装”,我能够通过使用解决问题。 Windows安装程序随附的diskpart工具,方法是删除第一个EFI分区并使用创建另一个分区create partition efi。有关diskpart的信息,请参见technet.microsoft.com/zh-cn/library/cc766465%28WS.10%29.aspx
Pathogen

2

我的操作系统位于单独的驱动器中,因此GRUB2不会被Windows Bootloader取代,反之亦然

这是理想的,因此您很可能在分区表中至少有一个主分区可用。

现在我的问题是,我该如何更改/转换Ubuntu的驱动器,以便它不使用MBR,而是使用GPT并允许Windows启动?

您无需将MBR转换为GPT即可进行UEFI引导,只需创建一个主FAT分区,安装该grub-efi-amd64-bin软件包,然后按照将ESP添加到使用MBR的现有安装中的说明进行操作即可,该版本应适用于当前版本的Ubuntu。


1
被低估的答案。Windows固执地要求GPT + UEFI或MBR + BIOS引导,但是Linux允许混合匹配,而grub可以链载另一个磁盘或直接引导Windows 7的bootmgr。
蒂姆·G

@timg这在事实之后可能是正确的,但是不幸的是,如果您是从头开始设置Windows 10的,它似乎显示了如果您启动EFI,安装程序将不允许您在没有GPT卷的情况下继续进行操作。
Merk

@Merk哦,我使用Windows安装程序以不同的方式:按住Shift键F10为您提供了一个命令行,你可以diskpartdism /apply-image的话bcdboot(在这两个过程中的更多的选择),使其安装MBR或不管如何引导GPT。
Tim G

1

为了补充Portablejim的回答(这确实帮助我从MBR转换为GPT,谢谢!),您可以使用Boot-Repair重新安装grub。在我无法完成第3步之后,当重新启动Windows 10时,Linux引导选项消失了,它就像一种魅力来修复我的引导。


我只有一个Ubuntu磁盘,在步骤3中使用Boot-Repair确实很有魅力!
Rael Gugelmin Cunha
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.