Tian Jiale's Blog

Windows & Linux 双系统启动引导问题

问题描述

该问题是 Windows 和 Linux 双系统中,因先安装 Windows 后安装 Linux 而导致 Linux 引导 Windows。该情况下系统可以正常启动,无论启动 Windows 还是 Linux 都是没问题的,至于为什么说这是问题呢?因为个人觉得 Linux 的启动引导太丑了,和 Windows 的风格差异过于巨大。 另外,我以为先装 Linux 后装 Windows 可以实现 Windows 引导 Linux,但看过些不知道对不对的资料,说是 Windows 系统无法识别 Linux 的启动项,可能会覆盖,导致无法启动 Linux,该问题留待查究。

实现目标

由上所说,Linux 的启动引导过于丑陋,且一般情况下使用 Windows,进入 Linux 的情况较少,所以最终结果是开机直接启动 Windows,可以通过电脑启动项进入 Linux。

实现方法

因为是两个系统都可以进入,所以我找到的方法也是系统正常启动下的方法,直接使用 Linux 系统自带的 efibootmgr 方法就可以完成我的要求。

在命令行中键入 efibootmgr 并执行,就可以得到如下结果,

aecra@UUIK:~$ efibootmgr
BootCurrent: 0009
Timeout: 0 seconds
BootOrder: 0004,0009,0008,0006,0007,9999
Boot0004* Windows Boot Manager
Boot0006* ubuntu
Boot0007* Solid State Disk
Boot0008* UOS
Boot0009* deepin
Boot9999* USB Drive (UEFI)

可以看到,我们第一行的结果显示的是 BootCurrent: 0009,对应到下面的就是 deepin,也就是当前所在系统。

注意第三行,我们的启动顺序(BootOrder)是 0004,0009,0008,0006,0007,9999。正是通过修改该项实现的启动引导顺序更改,我现在的第一个启动项就是 Windows,修改命令如下:

efibootmgr -o 0004,0009,0008,0006,0007,9999

另外有关启动项的其他设置也可以使用此命令,具体内容如下:

usage: efibootmgr [options]

-a | –active sets bootnum active

-A | –inactive sets bootnum inactive

-b | –bootnum XXXX modify BootXXXX (hex)

-B | –delete-bootnum delete bootnum

-c | –create create new variable bootnum and add to bootorder

-C | –create-only create new variable bootnum and do not add to bootorder

-D | –remove-dups remove duplicate values from BootOrder

-d | –disk disk (defaults to /dev/sda) containing loader

-r | –driver Operate on Driver variables, not Boot Variables.

-e | –edd [1|3|-1] force EDD 1.0 or 3.0 creation variables, or guess

-E | –device num EDD 1.0 device number (defaults to 0x80)

-g | –gpt force disk with invalid PMBR to be treated as GPT

-i | –iface name create a netboot entry for the named interface

-l | –loader name (defaults to “\EFI\debian\grub.efi”)

-L | –label label Boot manager display label (defaults to “Linux”)

-m | –mirror-below-4G t|f mirror memory below 4GB

-M | –mirror-above-4G X percentage memory to mirror above 4GB

-n | –bootnext XXXX set BootNext to XXXX (hex)

-N | –delete-bootnext delete BootNext

-o | –bootorder XXXX,YYYY,ZZZZ,… explicitly set BootOrder (hex)

-O | –delete-bootorder delete BootOrder

-p | –part part (defaults to 1) containing loader

-q | –quiet be quiet

-t | –timeout seconds set boot manager timeout waiting for user input.

-T | –delete-timeout delete Timeout.

-u | –unicode | –UCS-2 handle extra args as UCS-2 (default is ASCII)

-v | –verbose print additional information

-V | –version return version and exit

-w | –write-signature write unique sig to MBR if needed

-y | –sysprep Operate on SysPrep variables, not Boot Variables.

-@ | –append-binary-args file append extra args from file (use “-” for stdin)

-h | –help show help/usage

特别注意大小写问题!!!