我有一台三星 ATIV Book 9,装有 Windows 8,并且曾经使用过不同的 Linux 发行版。最近,我从 Debian 11 切换到 SuSE Tumbleweed,现在又切换到 Debian 12。自从切换到 Debian 12 以来我无法再从磁盘启动。当我更改 Linux 发行版/版本时,我会格式化并覆盖/
,swap
但保留所有其他分区。
当我启动时,系统告诉我无法找到要启动的系统,我应该按下以启动 Windows 救援系统。
然后我插入 Debian 12 安装介质(SD 卡),进入 grub 命令模式并输入以下代码来启动 Linux 系统:
grub> set root=(hd0,5)
grub> linux /boot/vmlinuz-6.1.0-11-amd64 root=/dev/sda5
grub> initrd /boot/initrd.img-6.1.0-11-amd64
grub> boot
(如何从 Grub Shell 启动)这种方法虽然有效,但是很繁琐。
这是我的分区表:
Device Start End Sectors Size Type
/dev/sda1 2048 1023999 1021952 499M Windows recovery environment
/dev/sda2 1024000 1638399 614400 300M Microsoft basic data
/dev/sda3 1638400 1900543 262144 128M Microsoft reserved
/dev/sda4 1900544 217001984 215101441 102.6G Microsoft basic data
/dev/sda5 217004032 278444031 61440000 29.3G EFI System
/dev/sda6 278444032 294828031 16384000 7.8G Linux swap
/dev/sda7 294828032 470757375 175929344 83.9G Linux home
/dev/sda8 470757377 498020352 27262976 13G Windows recovery environment
/dev/sda9 498020353 500117504 2097152 1G Windows recovery environment
Device Start End Sectors Type-UUID UUID Name Attrs
/dev/sda1 2048 1023999 1021952 DE94BBA4-06D1-4D40-A16A-BFD50179D6AC 1F2F0B2D-5B67-4F47-A273-FF56466FAA0E Basic data partition RequiredPartition
/dev/sda2 1024000 1638399 614400 EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 B103ECB1-3B97-4DA6-B8F2-BAC85C20E16F EFI system partition
/dev/sda3 1638400 1900543 262144 E3C9E316-0B5C-4DB8-817D-F92DF00215AE D0717FA8-DDAA-4966-8F76-53AB4571A31C Microsoft reserved partition
/dev/sda4 1900544 217001984 215101441 EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 07973992-B738-46E4-8743-09032C2F0621 Basic data partition
/dev/sda5 217004032 278444031 61440000 C12A7328-F81F-11D2-BA4B-00A0C93EC93B 58F769CE-1A2F-4266-AF6B-3F27A5EE053D Root LegacyBIOSBootable
/dev/sda6 278444032 294828031 16384000 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F D5E27C09-786F-46B9-81A8-BD15053043FC Swap
/dev/sda7 294828032 470757375 175929344 933AC7E1-2EB4-4F13-B844-0E14E2AEF915 65F8E696-9D05-4605-9B00-DE061A9A8ED5 Home
/dev/sda8 470757377 498020352 27262976 DE94BBA4-06D1-4D40-A16A-BFD50179D6AC 002EF7EB-5D99-4584-922A-34D7E1611290 Basic data partition RequiredPartition
/dev/sda9 498020353 500117504 2097152 DE94BBA4-06D1-4D40-A16A-BFD50179D6AC B9FB900E-BA45-4D16-4173-636C65706975 Basic data partition RequiredPartition
这是输出sudo efibootmgr -v
BootCurrent: 0006
Timeout: 2 seconds
BootOrder: 0006,0007,0005,0000,0001,0002
Boot0000* opensuse-secureboot VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0001* opensuse VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0002* UEFI OS VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0005* debian VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0006* UEFI: Generic STORAGE DEVICE 0819 PciRoot(0x0)/Pci(0x1d,0x0)/USB(1,0)/USB(8,0)/HD(1,MBR,0x23261683,0x11a4,0x4a20)..BO
Boot0007* Generic STORAGE DEVICE 0819 BBS(USB,,0x0)..BO
有人知道我该怎么做才能直接从 HDD 启动吗?
谢谢,Jan
[更新]
- 重新安装了 debian 操作系统,包括擦除 /dev/sda2 (EFI)
- 确保 BIOS 中仅启动 EFI
- 已执行
efibootmgr --remove-dups
-> 没有改变任何内容 - 用于
efibootmgr -b [0|1|5] -B
手动删除一些条目 - 创建了一个新条目
efibootmgr --create --disk /dev/sda --part 2 --label "GRUB2" --loader \\EFI\\debian\\grubx64.efi
-> 给了我一个很好的条目Boot0000* GRUB2 HD(2,GPT,b103ecb1-3b97-4da6-b8f2-bac85c20e16f,0xfa000,0x96000)/File(\EFI\debian\grubx64.efi)
--> 重启后它看起来像Boot0000* GRUB2 VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
=> 为什么会发生这种情况? - 创建另一个条目“GRUB2 II”并且不重新启动 -> 这样你就可以看到与“GRUB2”的区别
efibootmgr-v
BootCurrent: 0006
Timeout: 2 seconds
BootOrder: 0001,0006,0000,0005,0002
Boot0000* GRUB2 VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0001* GRUB2 II HD(2,GPT,b103ecb1-3b97-4da6-b8f2-bac85c20e16f,0xfa000,0x96000)/File(\EFI\debian\grubx64.efi)
Boot0002* UEFI OS VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0005* debian VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0006* UEFI: Generic STORAGE DEVICE 0819 PciRoot(0x0)/Pci(0x1d,0x0)/USB(1,0)/USB(8,0)/HD(1,MBR,0x23261683,0x11a4,0x4a20)..BO
我还注意到显示的 UUID 与efibootmgr -v
显示的 UUID 不匹配lsblk -o +partuuid
(sdb(我用于启动的 SD)和新创建的条目除外):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS PARTUUID
sda 8:0 0 238.5G 0 disk
|-sda1 8:1 0 499M 0 part 1f2f0b2d-5b67-4f47-a273-ff56466faa0e
|-sda2 8:2 0 300M 0 part /boot/efi b103ecb1-3b97-4da6-b8f2-bac85c20e16f
|-sda3 8:3 0 128M 0 part d0717fa8-ddaa-4966-8f76-53ab4571a31c
|-sda4 8:4 0 102.6G 0 part 07973992-b738-46e4-8743-09032c2f0621
|-sda5 8:5 0 29.3G 0 part / 58f769ce-1a2f-4266-af6b-3f27a5ee053d
|-sda6 8:6 0 7.8G 0 part [SWAP] d5e27c09-786f-46b9-81a8-bd15053043fc
|-sda7 8:7 0 83.9G 0 part /home 65f8e696-9d05-4605-9b00-de061a9a8ed5
|-sda8 8:8 0 13G 0 part 002ef7eb-5d99-4584-922a-34d7e1611290
`-sda9 8:9 0 1G 0 part b9fb900e-ba45-4d16-4173-636c65706975
sdb 8:16 1 14.8G 0 disk
|-sdb1 8:17 1 738M 0 part 23261683-01
`-sdb2 8:18 1 9.3M 0 part 23261683-02
sudo 树 /boot/efi/
/boot/efi/
`-- EFI
`-- debian
|-- BOOTX64.CSV
|-- fbx64.efi
|-- grub.cfg
|-- grubx64.efi
`-- mmx64.efi
3 directories, 5 files
[更新 2]
/boot/efi 显示 /dev/sda2 的内容
$ mount
...
/dev/sda2 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
...
我使用安装介质进入 grub,然后通过 grub 命令行启动系统,如下所述: 如何从 Grub Shell 启动
$ sudo mount /dev/sda2 /mnt
$ sudo tree /mnt/
/mnt/
`-- EFI
`-- debian
|-- BOOTX64.CSV
|-- fbx64.efi
|-- grub.cfg
|-- grubx64.efi
`-- mmx64.efi
3 directories, 5 files
以下是 lsblk 的输出
$ lsblk -o +partuuid,UUID
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS PARTUUID UUID
sda 8:0 0 238.5G 0 disk
|-sda1 8:1 0 499M 0 part 1f2f0b2d-5b67-4f47-a273-ff56466faa0e 825667F15667E3FF
|-sda2 8:2 0 300M 0 part /mnt b103ecb1-3b97-4da6-b8f2-bac85c20e16f 604D-98BD
| /boot/efi
|-sda3 8:3 0 128M 0 part d0717fa8-ddaa-4966-8f76-53ab4571a31c
|-sda4 8:4 0 102.6G 0 part 07973992-b738-46e4-8743-09032c2f0621 5EA66ADEA66AB5E5
|-sda5 8:5 0 29.3G 0 part / 58f769ce-1a2f-4266-af6b-3f27a5ee053d 8c520857-fa9a-4943-a92b-9aa16fb9075c
|-sda6 8:6 0 7.8G 0 part [SWAP] d5e27c09-786f-46b9-81a8-bd15053043fc af973a94-fc1f-4797-a89c-fb4558d7609e
|-sda7 8:7 0 83.9G 0 part /home 65f8e696-9d05-4605-9b00-de061a9a8ed5 295faf9b-1536-4a9d-aa92-7cbb9d251312
|-sda8 8:8 0 13G 0 part 002ef7eb-5d99-4584-922a-34d7e1611290 74846D39846CFECC
`-sda9 8:9 0 1G 0 part b9fb900e-ba45-4d16-4173-636c65706975 E06C-1BB1
sdb 8:16 1 14.8G 0 disk 2023-06-10-10-25-55-00
|-sdb1 8:17 1 738M 0 part 23261683-01 2023-06-10-10-25-55-00
`-sdb2 8:18 1 9.3M 0 part 23261683-02 DEB0-0001
即使重新安装 Debian 后,通过 EFI 启动菜单启动仍然无法成功?—> 正确
您确定安装介质已在 UEFI 模式下启动安装吗?(在 BIOS 中禁用可移动介质的“传统启动”,在安装介质中启动时检查 efibootmgr -v 的输出。- 合格的输出表明所需的 UEFI 启动模式)。
$ efibootmgr -v
BootCurrent: 0006
Timeout: 2 seconds
BootOrder: 0005,0001,0006,0000,0002
Boot0000* GRUB2 VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0001* GRUB2 II HD(2,GPT,b103ecb1-3b97-4da6-b8f2-bac85c20e16f,0xfa000,0x96000)/File(\EFI\debian\grubx64.efi)
Boot0002* UEFI OS VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0005* debian HD(2,GPT,b103ecb1-3b97-4da6-b8f2-bac85c20e16f,0xfa000,0x96000)/File(\EFI\debian\grubx64.efi)
Boot0006* UEFI: Generic STORAGE DEVICE 0819 PciRoot(0x0)/Pci(0x1d,0x0)/USB(1,0)/USB(8,0)/HD(1,MBR,0x23261683,0x11a4,0x4a20)..BO
我将重新启动并再次打印输出efibootmgr -v
。......
$ efibootmgr -v
BootCurrent: 0006
Timeout: 2 seconds
BootOrder: 0006,0005,0000,0002
Boot0000* GRUB2 VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0002* UEFI OS VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0005* debian VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0006* UEFI: Generic STORAGE DEVICE 0819 PciRoot(0x0)/Pci(0x14,0x0)/USB(13,0)/HD(1,MBR,0x23261683,0x11a4,0x4a20)..BO
bios 中的设置如下:
Secure Boot Control -> off
OS Mode Selection -> UEFI OS (alternative options would be |CSM OS| or |CSM and UEFI OS|) It could be that I had |CSM and UEFI OS| during installation.
Fast BIOS Mode -> off
PXE OPROM -> off
答案1
为了总结评论中的进展,这里提到了一些已经完成的步骤。
也许你想查看详细信息以查看任何差异。
请注意,您提供的链接为“如何从 Grub Shell 启动“以传统模式处理 GRUB。这通常不再是当前安装的预期默认设置。一般来说,事情的运作方式相同或相似,但有些细节并不适用于 GPT/EFI。
尤其是在 EFI 处理的系统中,加载程序不会隐藏在磁盘开头未分区的空间中。这里 Grub 使用 EFI 分区作为其加载程序代码的第一部分。
先决条件:
更正分区类型
您的分区类型设置不正确。
a) 您有三个“Microsoft 救援分区”,这令人难以相信。
=> 检查它们并确定哪个是真正的 Microsoft 恢复分区以及其他两个 MS 恢复分区的内容是什么。
(这应该被解决,但对于当前的问题来说这并不相关)。
b) 与问题相关的是sda2
和的分区类型sda5
。它们应该如下所示:
$ sudo fdisk -l /dev/sda | grep -iE "(Sectors|sda[25])"
Device Start End Sectors Size Type
/dev/sda2 1024000 1638399 614400 300M EFI System
/dev/sda5 217004032 278444031 61440000 29.3G Linux filesystem
$ lsblk -o path,mountpoint,partflags,parttype,size,fstype,uuid /dev/sda{2,5}
PATH MOUNTPOINT PARTFLAGS PARTTYPE SIZE FSTYPE UUID
/dev/sda2 /boot/efi c12a7328-f81f-11d2-ba4b-00a0c93ec93b 300M vfat 604D-98BD
/dev/sda5 / 0fc63daf-8483-4772-8e79-3d69d8477de4 29.3G ext4 8c520857-fa9a-4943-a92b-9aa16fb9075c
尤其是PARTTYPE
EFI 分区的sda2
非常重要。
(此更新状态已获得以下机构的批准:简。
您的磁盘上感兴趣的分区类型:
fdisk Partition GPT
Number Type Type-UUID (=PARTTYPE)
------ --------------------------- -------------------------------------
1 EFI System C12A7328-F81F-11D2-BA4B-00A0C93EC93B
10 Microsoft reserved E3C9E316-0B5C-4DB8-817D-F92DF00215AE
11 Microsoft basic data EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
14 Windows recovery environment DE94BBA4-06D1-4D40-A16A-BFD50179D6AC
19 Linux swap 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
20 Linux filesystem 0FC63DAF-8483-4772-8E79-3D69D8477DE4
------ --------------------------- -------------------------------------
此时您的磁盘已准备好进行 UEFI 启动。
在 EFI 中启用 Grub(常规方式)
有两种方法可以启用 Grub:
使用可移动媒体启动到 Life Linux 系统,然后准备并
chroot
进入安装/dev/sda5
。您使用 Life Linux 系统启动到 GRUB,切换到 Grub 命令行并手动启动 Linux
/dev/sda5
。
这两种技术都会导致您处于 Linux 的活动环境中/dev/sda5
,即系统出现启动问题。
检查你的 EFI 系统分区是否已安装在/boot/efi
,即lsblk /dev/sda2
。
然后通过 安装 Grub
update-grub
grub-install
不要添加任何额外的参数!因为它是 EFI 并且您当前正在 Linux 中进行更新,所以这应该足够了。
结果:
- 该文件
/boot/grub/grub.cfg
已更新为当前系统设置(通过update-grub
) - 文件夹
/boot/efi/EFI/debian
及其内容已创建。 - EFI 启动菜单添加了一个从 EFI 系统分区调用 Grub 的条目。此新条目被设置为启动时使用的默认条目。
- 该文件
/boot/efi/EFI/debian/grub.cfg
应该转发到/dev/sda5/boot/grub/
(通过分区 UUID)search.fs_uuid 8c520857-fa9a-4943-a92b-9aa16fb9075c root hd0,gpt5 set prefix=($root)'/boot/grub' configfile $prefix/grub.cfg
- 检查以上内容并检查引用是否存在:
/dev/sda5/boot/grub/
与./grub.cfg
子文件夹中的内部和 Grub 的二进制文件./86_64-efi/
- 还请检查
efibootmgr -v
新条目。
当常规方法失败时:
更新固件
如果这不起作用,那么问题的根源就是您的 UEFI 固件。
- 如果您有机会更新固件,那么现在正是最佳时机。
- 然后通过外部媒体重新启动并再次执行
update-grub && grub-install
。 - 然后检查常规启动和 EFI 菜单项。
当你必须忍受有缺陷的固件时:
查找 UEFI 固件接受的路径
我见过一台 2012 年推出的 SONY VAIO,其固件存在缺陷。它只能接受最基本的 UEFI 设置。双启动 Linux/Windows 是不可能的。
请注意: 就像你通过外部 Grub 手动启动<sda2>/EFI/
一样/boot/efi/EFI/
。最后,我们要操作你的 EFI 分区的内容<sda2>
。
UEFI BIOS 启动中的默认设置应该知道路径
<boot-partition>/EFI/boot/bootx64.efi
正如我们上面保证的,<boot-partition>
由 EFI 系统 PARTTYPE 定义。sda2
因此生成适当的内容/boot/efi/EFI/boot/
将内容复制
/boot/efi/EFI/Debian/
到新目录中/boot/efi/EFI/boot/
从您的 Debian 12 安装媒体复制
bootx64.efi
(我使用 Debian 12 Live ISO):cp <Debian 12 Life Media>/EFI/boot/bootx64.efi` /boot/efi/EFI/boot/.
请注意,安装介质上的内容
*.efi
与您在<sda2>/EFI/Debian/
。设置 EFI 菜单项:
efibootmgr -c -l "\EFI\boot\bootx64.efi" -L "GRUB"
验证方式
efibootmgr -v
:- 输入正确
- 此条目是引导顺序中的第一个
- 如果设置了“下次启动”值,则此条目为“下次启动”的值。
无需外部启动媒体即可重新启动系统。
告诉结果看看我们是否需要变化。