我最近升级了我的 PC,我的新主板(ASUS M5A99X EVO)使用 UEFi 而不是常规的 MBR 选项。
我有一个 Ubuntu 11.10 安装,是在我之前的硬件(MSI MS 7267)上安装的,Ubuntu 单独启动正常,Windows 7 也是如此,但是 Windows 7 使用 UEFI(GPT)启动,而 Ubuntu 使用 MBR。
我将操作系统放在单独的驱动器中,这样 GRUB2 就不会被 Windows Bootloader 取代,反之亦然,正如我所说,两个操作系统都可以自行启动,但要做到这一点,我必须断开一个驱动器(在本例中是 Ubuntu 驱动器),因为它会阻止 Windows 加载。
现在我的问题是,我如何更改/转换 Ubuntu 的驱动器,以便使用 GPT 而不是 MBR 并允许 Windows 启动?
最好不要重新安装整个系统或丢失任何数据。
如果我要擦除驱动器,如何以 GPT、UEFI 或无论哪种模式安装 Ubuntu?
我已经使用 gdisk 从 MBR 转换为 GPT,但现在 Ubuntu 无法启动,好像 grub 无法启动。
我已经重新安装了操作系统,并且驱动器现在默认为 GPT,但grup-pc
仍被使用grub-efi
。
我如何让 Ubuntu 从 EFI 启动?
答案1
目录:
- 术语
- 转换
- 配置(+双启动)
术语
BIOS = 基本输入/输出系统
(U)EFI = (统一)可扩展固件接口
MBR = 主引导记录
GPT = GUID 分区表
UEFI / EFI / BIOS = 固件接口
MBR / GPT = 计算机如何知道(每个硬盘)驱动器上有哪些分区以及如何从它们启动。
UEFI/BIOS
A固件接口是固件(设备内的软件)与操作系统交互的方式。它初始化硬件,然后运行操作系统并确保操作系统驱动程序可以操作硬件。
BIOS 一直是常用的固件接口。UEFI 是一种较新的接口,具有多种功能,例如速度更快、具有 GUI 以及能够启动网卡并获取 IP 地址。UEFI 取代了 EFI。(开发 EFI 的人看到其他人在做类似的事情,于是加入了他们,带来了 EFI 的理念。这后来成为了 UEFI)。
BIOS 要求引导加载程序位于磁盘的起始位置,但 UEFI 使用一个分区来实现这一点,并且可以在多个引导加载程序中进行选择。
MBR/GPT + GRUB
这膜生物反应器是磁盘启动处的一段代码,其中包含引导加载程序(用于 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 Mac 上使用。
现在...
您需要在实时 CD(或安装到不同磁盘的另一个 Linux 安装)上执行此操作。
处理 GPT 磁盘时,我们需要使用支持 GPT 的程序。'GPT fdisk' 是一款很好用的工具,我将使用它。它可以根据发行版调用gptfdisk
或 (Ubuntu 调用它)。Parted(和 Gparted)也支持 GPT,因此可以“安全地”与 GPT 磁盘一起使用。gdisk
gdisk
要转换您需要:
- 调整分区大小以适合 GPT 数据和 EFI 系统分区。
- 转换磁盘并添加分区
- 将 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 系统”。它应该在开头找到可用空间(我建议使用一些较低的扇区号,如 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 -F 32 /dev/partition
)将分区格式化为 FAT32。
3)安装 GRUB
由于我自己没有尝试过,因此这部分没有前一部分那么有保证。
我不确定这一步,所以我猜使用RAOF 的指示:
要切换到 grub-efi,你需要
- 找到您的 EFI 分区;将其挂载到 /boot/efi。将其添加到 /etc/fstab¹
- 安装 grub-efi 包
- 将 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 模式启动时才会起作用。
如果不起作用,你可以尝试这些grub-efi
安装完成后,按照一步一步的说明(“在 (U)EFI 系统中安装 GRUB2”下)进行操作。
配置(+双启动)
如果 RAOK 的说明有效,您应该能够将以下行添加到
/etc/grub.d/40_custom
menuentry "Windows 7" {
set root='(hd0,gpt1)'
chainloader /EFI/microsoft/bootmgfw.efi
}
假定 Windows 被hd0
GRUB 识别为。可能需要将其更改为hd1
才能正常工作。
现在运行
update-grub
更新配置文件。
参考文献和进一步阅读
我使用了多个来源。
- 罗德·史密斯的“GPT fdisk 教程“。更多信息很有用。
- 维基百科页面UEFI,BIOS,膜生物反应器和谷氨酰胺磷酸酶。
- Ubuntu 的UEFI 启动 wiki 页面。如果您遇到困难,可以获得更多操作方法。
- UEFI 自己的关于页面。
答案2
这个答案不完整;我还没有测试过这些。它不太可能吞噬你的任何数据,但我已警告你!
我猜测这里发生的情况是,您的 BIOS 优先从旧式 MBR 启动,因此可怜的旧式 UEFI Windows 7 被忽视了。
UEFI 的优点之一是您不再需要担心 Windows 会覆盖 GRUB;它们应该可以在 EFI 分区上很好地共存。因此,一个选择是切换到grub-efi
。 笔记:我不确定是否grub-efi
理解MSDOS风格的分区;我思考确实如此。如果未安装,则无法启动,您需要 LiveCD 来恢复。事实上,无论如何都要准备好 LiveCD!
要切换到grub-efi
你需要
- 找到你的 EFI 分区;将其挂载到
/boot/efi
。将其添加到/etc/fstab
¹ - 安装
grub-efi
包 - 将 BIOS 启动优先级从
UEFI and Legacy
切换为UEFI only
(或类似选项)
那应该让你拥有一个 UEFI 启动的 Ubuntu 安装。如果没有,请启动你信任的 LiveCD(或 Ubuntu 备用安装 CD - “修复损坏的系统”选项是你想要的 ☺),chroot 进入你的系统,然后grub-pc
重新安装。
¹:此步骤的更多详细信息:您需要找到 Linux 内核对您的 EFI 系统分区的称呼。它将类似于/dev/sda2
、/dev/sdb3
或类似的²。然后您需要创建目录/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,因为在添加/移除硬盘时 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
。
答案3
我的操作系统位于单独的驱动器中,因此 GRUB2 不会被 Windows Bootloader 替换,反之亦然
这是理想的,因此您很可能在分区表中至少有一个可用的主分区。
现在我的问题是,我如何更改/转换 Ubuntu 的驱动器,以便使用 GPT 而不是 MBR 并允许 Windows 启动?
您无需将 MBR 转换为 GPT 即可进行 UEFI 启动,只需创建一个主 FAT 分区,安装软件包grub-efi-amd64-bin
并按照将 ESP 添加到具有 MBR 的现有安装它应该可以与 Ubuntu 的当前版本兼容。
答案4
补充Portablejim 的回答(这真的帮助我从 MBR 转换为 GPT,谢谢!),你可以使用启动修复重新安装 grub。在我无法完成第 3 步后,它就像魔法一样修复了我的启动,并且当 Windows 10 的安装使 linux 启动选项消失时,它再次修复了我的启动。