跳至正文
Wener Notes

Dual System Boot

约 3 分钟阅读
标签:OSBootUEFIWindowsLinux

UEFI QEMU

EDK II is a modern, feature-rich, cross-platform firmware development environment for the UEFI and PI specifications. EDK II is open source, using a BSD license.

Windows Boot Manager

bash
bcdedit /set {ID} device partition=c:
bcdedit /set {ID} path \linux.bin
bcdedit /displayorder {ID} /addlast
bcdedit /timeout 30

SSD Optimization

UEFI + GPT

ESP (EFI System Partition)

ESP分区是FAT32格式的,主要用来放Windows的引导文件。UEFI不支持从NTFS格式的分区启动。

MSR (Microsoft Reserved Partition)

  • MSR分区即 Microsoft Retain 微软保留分区。
  • 小于 16 GB 的磁盘,MSR 分区为 32 MB。
  • 大于 16 GB 的磁盘,MSR 分区为 128 MB。
  • 没有MSR分区Windows还是可以启动。

Windows Boot Files

  • Windows Boot Manager: 启动选项
  • bootmgfw.efi: 引导Windows的引导文件。
  • Bootx64.efi: UEFI的必需引导文件!
  • CS-M: Compatibility Support Module,兼容性支持模块。

Recovery

恢复引导项:在pe中运行cmd后输入 bcdboot c:\windows /f all /s f: /l zh-cn

GRUB

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

Add Windows 8.1 Entry

ini
# /boot/grub/grub.cfg

menuentry 'windows8' {
    insmod part_gpt
    insmod chain
    set root='(hd0,gpt2)'
    chainloader /EFI/microsoft/Boot/bootmgfw.efi
}

if [ "${grub_platform}" == "efi" ]; then
    menuentry "Microsoft Windows Vista/7/8/10 UEFI-GPT" {
        insmod part_gpt
        insmod fat
        insmod search_fs_uuid
        insmod chain
        search --fs-uuid --set=root $hints_string $fs_uuid
        chainloader /EFI/Microsoft/Boot/bootmgfw.efi
    }
fi

# BIOS+MBR
menuentry 'Windows ' {
    insmod ntfs
    set root='(hd0,msdos3)'
    search --no-floppy --fs-uuid --set=root 你的硬盘UUID
    chainloader +1
}

Tools

  • ms-sys: Write MBRs
  • efibootmgr: Manage EFI boot entries
  • Etcher
bash
ms-sys --partition /dev/sda1

Systemd EFISTUB Update

Monitor kernel updates to copy EFISTUB kernel to ESP.

/etc/systemd/system/efistub-update.path:

ini
[Unit]
Description=Copy EFISTUB Kernel to EFI System Partition

[Path]
PathChanged=/boot/initramfs-linux-fallback.img

[Install]
WantedBy=multi-user.target
WantedBy=system-update.target

/etc/systemd/system/efistub-update.service:

ini
[Unit]
Description=Copy EFISTUB Kernel to EFI System Partition

[Service]
Type=oneshot
ExecStart=/usr/bin/cp -af /boot/vmlinuz-linux esp/EFI/arch/
ExecStart=/usr/bin/cp -af /boot/initramfs-linux.img esp/EFI/arch/
ExecStart=/usr/bin/cp -af /boot/initramfs-linux-fallback.img esp/EFI/arch/

关联信息

反向链接、本文链接的其他页面和外部资料。

参考资料

GitHub3 条
其他外链14 条
最近更新commit 906e816编辑