AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 781018
Accepted
Chadwicke
Chadwicke
Asked: 2024-07-30 01:36:45 +0800 CST2024-07-30 01:36:45 +0800 CST 2024-07-30 01:36:45 +0800 CST

Windows 11 删除 GRUB 数据,导致启动 Linux 很麻烦

  • 772

这不完全是一个“双启动”问题,因为我没有在内部驱动器上安装 Kali Linux。情况是,我使用Ventoy从 USB 棒将 Kali 安装在外部/可移动硬盘上。我已将 BIOS 启动优先级设置为首先循环浏览 USB 附件,然后再从装有 Windows 11 副本的内部驱动器启动。因此,只要我不在插入设备时启动 Win11,一切就都正常了。在启动 Win11 之前移除驱动器,可防止 Win11 删除 GRUB 数据,该数据可使其保持稳定的启动配置,并将 GRUB 安装在可移动驱动器上。但是,只要 Win11 启动,它就会进入我的 USB 驱动器并弄乱它,这是它不应该做的,但这不是重点……我该如何修复它,我应该忘记拔掉它吗,这样我就不必继续使用 Ventoy 重新安装整个东西?

作为参考,这篇文章最能反映当前的情况:在与 Windows 的双启动中,使用 GNU Grub 解决 Kali Linux 启动问题 很遗憾它有这么多反对票。如果他们能够进入 initramfs 提示符,显然他们做对了。深入研究了 GRUB 命令以及如何重新设置它,从工作系统中复制了命令行参数,并得出了以下结论:

grub> linux (hd0,gpt2)/boot/vmlinuz-6.8.11-amd64 BOOT_IMAGE=/boot/vmlinuz-6.8.11-amd64 root=UUID=[uuid-of-drive] ro quiet splash
grub> inirtrd (hd0,gpt2)/boot/initrd.img-6.8.11-amd64

这让我看到了这个屏幕:

initramfs cmd 提示符

这让我看到了那篇关于 kali/win 双启动的帖子,并启发我创建了这篇文章:人们从这里该去哪里?是否有启动参数或我遗漏了什么?如何让它从 GRUB 再次正常启动?

kali-linux
  • 3 3 个回答
  • 2593 Views

3 个回答

  • Voted
  1. Best Answer
    Philip Couling
    2024-07-30T14:33:47+08:002024-07-30T14:33:47+08:00

    下一步该怎么办?是否有启动参数或我遗漏了什么?

    您的问题中细节太少,无法说明您遗漏了什么。但由于您似乎在这个阶段陷入了困境,我会尝试提供一些指示,帮助您了解自己处于什么位置以及要寻找什么。 这种类型的问题是我们经常说 Kali 是渗透测试人员并且通常需要 Linux 专家的原因之一。

    你被困在哪儿了?

    BIOS --> EFI 存根 --> Grub --> Initramfs --> 运行系统 (systemd)

    这些步骤中的每一个步骤都可以在笔记本电脑和台式机上配置。有些嵌入式硬件没有以同样方式配置的 BIOS。

    • BIOS - 主板上的软件和配置。请参阅主板的用户手册以了解如何重新配置​​它
    • EFI“存根”(“grub stub”)通常是存储在 EFI 中的二进制单一配置文件grub.cfg。配置文件足以告诉 grub 在哪里找到其主配置文件。
    • Grub - 与“存根”相同的程序继续加载主配置文件和任何必要的模块。主配置文件通常不在 EFI 上,而是存储在/boot/grub正在运行的系统的文件系统中。因此,实际上,如果您没有专用分区,那就是主 Kali 分区/boot。
    • Initramfs 是引导加载程序在加载 Linux 时加载的临时文件系统。它包含内核模块和配置脚本,这些脚本仅安装主文件系统的足够部分以启动系统管理器 (systemd)。
    • 正在运行的系统 - 系统管理器负责运行其他所有程序,如果它死机,整个系统就会“崩溃”。系统管理器完全从主根文件系统加载。

    要检查什么?

    嗯,有很多事情需要检查。

    仅仅因为您设法进入 initramfs,并不意味着它是使用所有正确的参数启动的,也不意味着系统按照预期布局。

    • 对于可移动驱动器,您可能有两个 EFI 分区:一个在装有 MS Windows 的驱动器上,另一个在装有 Kali 的可移动驱动器上。

      检查您是否只有一个 EFI 分区中只有一个 grub 存根。我从未见过 MS Windows “干扰”其他安装,但我见过它完全擦除并重写 EFI。如果您有两个 grub 存根,一个配置正确,另一个损坏,那么 Windows 可能会擦除 EFI 并只留下损坏的那个。

    • 必须配置 Grub stub 才能找到正确的驱动器。

      检查EFI 中的是否grub.cfg正确指向了 驱动器,/boot/grub并注意prefix。这取决于您是否有单独的启动分区。如果没有单独的分区,它应该看起来像这样:

      search.fs_uuid 9df3be1d-f619-4991-af0c-2c556f66595f root 
      set prefix=($root)'/boot/grub'
      configfile $prefix/grub.cfg
      
    • 从 Grub 中,查看是否可以手动运行该配置。例如,输入:

      set root=(hd0,gpt2)
      set prefix=($root)'/boot/grub'
      configfile $prefix/grub.cfg
      

      这可能会给你带来更明显的错误。

    • 您可以阅读的内容来了解​​和(hd0,gpt2)/boot/grub的正确参数是什么。linuxinitramfs

    • 在 initramfs 中,检查当您尝试使用 手动挂载分区时会发生什么。使用您在问题中提到的mount相同方法进行挂载。检查您挂载的文件系统是否确实是您想要的文件系统。 检查它是否具有。UUID=[uuid-of-drive]/usr/sbin/init

    • 14
  2. Marcus Müller
    2024-07-30T02:35:40+08:002024-07-30T02:35:40+08:00

    在启动 Win11 之前移除驱动器,可防止 Win11 删除 GRUB 数据,从而保持其稳定的启动配置,并将 GRUB 安装在可移动驱动器上。

    我非常确定情况并非如此。实际情况是,您的 UEFI 系统看到两个不同的支持 UEFI 的引导加载程序,您选择 Windows,但在下次启动时,内部顺序不同,而且由于您的 grub 和 initrd 未设置为无论设备编号如何都能找到设备,因此系统停止运行。

    解决方案就是不要那样做:这里简单的部分是确保您的 initrd 的 fstab 不包含 /dev/sda1 之类的内容,但使用不受内部设备排序影响的 UUID。

    我认为您所指的帖子与您的情况在技术上没有太多相似之处(他们在 MSDOS 分区的 MBR 启动系统上使用 GRUB,您在 GPT 分区的 EFI 系统上使用 GRUB2,但中间却有一个陌生人,这个 ventoy 东西)。

    我认为如果您不使用 ventoy,直接安装到外部介质就有可能起作用。

    无论如何,这听起来根本不是 Windows 的错误。

    • 5
  3. Chris Petersn
    2024-07-30T23:27:57+08:002024-07-30T23:27:57+08:00

    我没有使用过 Windows 11,但我之前见过 Windows 10 似乎删除了 GRUB。它不会删除它,而是更改启动顺序。您需要从 Windows 中修复它,Microsoft 在此处解释了如何修复:

    https://support.microsoft.com/en-au/windows/windows-11-and-secure-boot-a8ff1202-c0d9-42f5-940f-843abef64fad

    • -1

相关问题

  • 如何修复错误的驱动器标签?

  • Kali Linux 安装 - 内核崩溃

  • 在 kali 滚动上使用专用 GPU

  • 在 Kali Linux 中的 Windows 7 分区上安装 grub

  • python2 和 OpenSSL 不能在 Kali 上一起玩 - 如何解决?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve