Windows + Debian 双系统安装心得

背景

昨天试图安装 Windows11 + Debian13 双系统,完成安装后重启总是直接进入Windows。历经折腾解决了问题(启动后进入Grub菜单,菜单列表中有Windows启动项)。

  • 条件:Windows + Debian 安装在同一硬盘,采用同一 ESP 引导。
  • 关键动作:Debian分区时,选择既有 ESP 设置挂载点为 /boot/efi
  • 重点说明:Windows 和 Debian 引导程序共享同一个 ESP (EFI 系统分区)。

心得

以下是经历本次安装后的心得,没有详细操作说明。

  1. 安装前检测 UEFI 中的选项

    • Secure Boot 设置为 Disabled。
    • Boot Mode 设置为 UEFI Only 或 UEFI First。(找不到该项目就跳过)
  2. Debian安装镜像

    安装镜像主要有3种:netinst (网络安装镜像)、完整 DVD/CD 镜像、Live 镜像。对应 Debian13,名称分别为:debian-13.6.0-amd64-netinst.iso、debian-13.6.0-amd64-DVD-1.iso、debian-live-13.6.0-amd64-kde.iso。

    建议初学者采用 Live 镜像,它可以像运行一个完整的操作系统一样,直接从U盘启动进而操作计算机,方便安装出现异常后解决问题。

    建议用 Rufus 制作 Debian 镜像。

  3. 先安装 Windows

    先安装 Windows,并在安装分区时给 ESP 留出 500 MB 的空间。在完成 Windows 后,ESP 中就存在了一个 EFI 文件夹,包含: Boot 和 Microsoft 两个子文件夹。

    /EFI/Microsoft 这个路径,用来存放Windows的引导文件。而 /EFI/Boot 是UEFI规范规定的默认启动路径,用于兼容性引导(当UEFI找不到其他有效的启动项时,会尝试这个路径)。

ESP (FAT32分区)
└── EFI
    ├── Boot
    │   └── bootx64.efi      (默认的UEFI启动文件)
    └── Microsoft
        ├── Boot
        │   ├── bootmgfw.efi (Windows的引导管理器)
        │   └── BCD          (Windows的启动配置数据)
        └── Recovery         (Windows恢复环境)
  1. 再安装 Debian

    在分区时,注意保留 ESP,不能格式化,否则无法启动 Windows 。并将 ESP 挂载点设置为 /boot/efi,同时不要选择 boot 选项(这里有反例)。

    令我困惑的是,我之前用 debian-13.6.0-amd64-DVD-1.iso 反复安装时,ESP 选择后没有选择挂载点的选项。在之后用 debian-live-13.6.0-amd64-kde.iso 安装时,是先进入了桌面,通过图标启动的安装,到了分区时,ESP 就有了挂载点设置选项。

    安装完成后,ESP 中的目录结构为:

ESP (FAT32分区,比如挂载在 /boot/efi)
└── EFI
    ├── Boot
    │   └── bootx64.efi      (UEFI的默认后备启动文件)
    │
    ├── Microsoft            (Windows的“鞋盒”,完全独立)
    │   └── Boot
    │       ├── bootmgfw.efi (Windows的引导管理器,核心文件)
    │       ├── bootmgr.efi  (Windows的引导管理程序)
    │       └── BCD          (Windows的启动配置数据库,包含启动菜单)
    │
    └── debian               (Debian的“鞋盒”,完全独立)
        ├── grubx64.efi      (GRUB的主引导文件,Debian的引导管理器)
        ├── shimx64.efi      (启用Secure Boot)
        └── grub.cfg         (GRUB的配置文件/boot/grub/grub.cfg)
 
  1. UEFI 缓存启动项清除

    由于历史安装可能导致 UEFI 的缓存 NVRAM 上有历史操作系统项,在 UEFI 设置启动顺序时会造成困惑。可能通过 Debian 中安装 efibootmgr,对不存在的启动项清除。这里不再详细说明。

  2. 手动安装 Grub

    若手动安装 Grub,需注意明确路径和 id,如:

    sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian

  3. 双硬盘或双 ESP

    有时在安装双系统时,会采用双硬盘或双 ESP。所谓双硬盘,即各自安装于一块硬盘上,各自硬盘上都拥有自己的 ESP。而双 ESP,是同一块硬盘上各自采用一个 ESP来引导系统。这种情况会带来系统升级(无论是Windows 还是Debian)后找不到另一个 ESP 的问题(启动时只进入一个系统), 是高段位选手的操作空间,我们初学者还是尽量避免吧。

  4. Grub中没有Windows启动项

    要在 /etc/default/grub 中启用 os-probe 扫描系统,并更新 grub.cfg。再启动时就会找到 Windows 了。

总结

  • 我遇到的问题和解决的办法同于 debian13安装 - #11,来自 beiluo ,所谓的 /boot 在 Debian 中就是 ESP, /boot/efi 挂载点就是 ESP 中的 EFI 文件夹。
  • 请教debian12的uefi安装 - #7,来自 o1345 描述的解决办法是在手动拷贝 /boot/efi 中应该有的文件。只有概念清晰,也是可以解决问题的。
  • 双系统可以共享分区中的文件,比如将 Windows 的 D 盘共享给 Debian 中的一个文件夹,只要配置好 /etc/fstab 即可,见参考链接。

参考

个人更建议用 Ventoy,它的话只需要把 iso 镜像放到 U 盘的数据分区里即可,不需要每次更换镜像时都重新烧录一次 U 盘。此外 Ventoy 还可以向 U 盘中放多个 iso 镜像,比如可以放 Debian 的安装镜像后,再放个 WinPE,方便处理不同情况。

不过据说 Ventoy 在个别机器上会有问题,那时候再换 Rufus 即可。

如果是用了 Live 镜像,安装系统时,可以先进入 Live 系统,然后直接打开 Live 系统桌面上的安装器,那个工具可以自动处理与 Windows 的关系以及 ESP 分区的挂载,不用手动干预。

如果是 NTFS 分区,个人经验是要加一些额外的参数,比如:

/dev/disk/by-uuid/xxx /mnt/Data ntfs defaults,noatime,uid=1000,gid=1000,dmask=022,fmask=133,x-gvfs-show 0 0

其中,

  • /dev/disk/by-uuid/xxx:以 UUID 形式表示的、NTFS 分区对应的设备名称
  • /mnt/Data:挂载点
  • noatime:读取文件时不将文件访问时间写入驱动器,开启此选项可减少硬盘数据写入。
  • uid=1000gid=1000:当前用户的用户编号、组编号,让分区上文件的所有者、所有组为当前用户、当前组。
  • dmask=022fmask=133:设置该分区上文件的权限。如不这样设置,分区上所有文件都会被授予可执行权限,而且所有用户都可读写,这样有一定的安全隐患。
  • x-gvfs-show:在文件管理器中显示该分区。

“亿速云”、“阿里云”、“腾讯云”、“华为云” 等,名称叫 “xx 云” 的网站,以及 CSDN,它们上面给出的技术资料,很多都是 “内容农场” 性质的,可能是爬虫从其他地方爬取、东拼西凑的,内容未必可靠。

个人建议去看 Arch Wiki 或者 Debian 的官方参考手册,那上面的资料权威一些,而且经常更新。比如: