无法从磁盘启动操作系统

无法从磁盘启动操作系统

我有一台三星 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

[更新]

  1. 重新安装了 debian 操作系统,包括擦除 /dev/sda2 (EFI)
  2. 确保 BIOS 中仅启动 EFI
  3. 已执行efibootmgr --remove-dups-> 没有改变任何内容
  4. 用于efibootmgr -b [0|1|5] -B手动删除一些条目
  5. 创建了一个新条目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)=> 为什么会发生这种情况?
  6. 创建另一个条目“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

尤其是PARTTYPEEFI 分区的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:

  1. 使用可移动媒体启动到 Life Linux 系统,然后准备并chroot进入安装/dev/sda5

  2. 您使用 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 固件。

  1. 如果您有机会更新固件,那么现在正是最佳时机。
  2. 然后通过外部媒体重新启动并再次执行update-grub && grub-install
  3. 然后检查常规启动和 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/

  1. 将内容复制/boot/efi/EFI/Debian/到新目录中/boot/efi/EFI/boot/

  2. 从您的 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/

  3. 设置 EFI 菜单项:

    efibootmgr -c -l "\EFI\boot\bootx64.efi" -L "GRUB"
    
  4. 验证方式efibootmgr -v

    • 输入正确
    • 此条目是引导顺序中的第一个
    • 如果设置了“下次启动”值,则此条目为“下次启动”的值。
  5. 无需外部启动媒体即可重新启动系统。

  6. 告诉结果看看我们是否需要变化。

相关内容