多操作系统安装与引导原理(Window...
 
Notifications
Clear all

多操作系统安装与引导原理(Windows、Deepin)

1 Posts
1 Users
0 Likes
1,016 Views
(@taichi)
Member
Joined: 4 years ago
Posts: 408
Topic starter  

 注意:
搞清楚每个操作系统的安装位置。操作系统使用的 bootloader 是什么,安装在哪。

一 系统引导原理
1 概述
BIOS:
BIOS(上电自检)–>
MBR 的主引导程序(bootloader 自身的一小部分)–>
启动引导程序 bootloader(Grub/Bootmgr。bootloader 的其他部分,安装到磁盘上的可用空间中。这段可用空间位于常规 MBR 末尾和第一个分区的起始位置之间。)–>
OS
UEFI:
UEFI(上电自检)–>
ESP 分区即启动项存放位置分区(EFI/BOOT/一大堆 efi 后缀名的文件)–>
启动引导程序 bootloader(Grub/Bootmgr)->
OS
2 详解
Windows(BIOS + MBR):
上电 –> Legacy BIOS –> MBR –> DPT –> PBR –> Bootmgr/NTLDR –> BCD/boot.ini –> Winload.exe –> 内核加载 –> Windows

Windows(UEFI + GPT):
上电 –> UEFI –> GPT 分区表 –> EFI 分区(ESP)–> \efi\Microsoft\boot\bootmgfw.efi –> efi\Microsoft\BCD→\Windows\system32\winload.efi

3 补充
两种引导方法:UEFI、BIOS(BIOS + MBR 或 UEFI + GPT)。

UEFI、BIOS 两种完全不一样。

作为 bootloader 的 Grub 可以直接引导 Windows,但是作为 bootloader 的 Bootmgr 无法直接引导 Linux,需要用 EasyBCD 来设置添加 Linux 的启动项。

一块硬盘进行高级格式化(逻辑分区),方便管理。(低级格式化为分磁道扇区)。主流分区机制为 MBR、GPT 两种。分区个数取决于分区表所能存储的描述磁盘分区的情况。

UEFI 引导中:ESP 分区,Windows 下想访问 ESP 分区需用分区工具给它分配盘符并取消隐藏;而 Linux 则直接将这个分区挂载到 /boot/efi。

GPT:一个较新的分区机制,解决了 MBR 很多缺点。向后兼容 MBR,必须在 UEFI 硬件上使用,必须为 64 位系统,Mac、Linux 都支持 GPT 分区格式。

MBR:最多 4 个主分区,或者 3 个主分区加 1 个扩展分区,扩展分区中的逻辑分区可分多个。由磁盘操作系统对硬盘进行初始化时产生的。

 

 
传统 BIOS 引导 Windows 操作系统时,是通过一个活动的主分区下的 bootmgr(启动管理器)文件导入根目录下 boot 文件夹里的 BCD(启动设置数据)文件,然后 BCD 文件根据自身的配置内容加载系统启动文件 winload.exe(位置:根目录 \Windows\system32\winload.exe)来启动系统。一个 BCD 文件可以加载多个系统启动文件从而实现引导多个系统的启动。

二 Windows 与 Deepin 双系统安装
Deepin 官方文档:文档
安装教程 1 不需要设置引导:文档
安装教程 2 需设置引导:文档

注意:
安装 Linux 时会选择 Grub 安装位置。往 MBR 上装,往 Linux 系统所在的分区的第一个扇区里装。本文是前者,一般前者不会出问题。
一般先安装 Windows,后装 Linux,安装 Linux 会自动配置好引导,反过来 Windows 比较霸道会覆盖掉 Linux 的引导。
Grub 开机启动管理软件更加方便进行多操作系统引导。
可用 EasyBCD 备份好引导文件。
可以用 Grub 引导;或用 BOOTMGR 引导。
安装过程:Wubi 安装最简单稳妥;U 盘安装;不用 U 盘安装。
U 盘安装(用 Grub 引导):Windows 下准备好划分出一定的磁盘空间;用 UltraISO 解压出其中的 deepin-boot-maker.exe,用它来制作 U 盘映像;设置 BIOS 启动顺序等其他配置;安装 Linux 后重启;进入 Windows 用 EasyBCD 配置好引导问题(如果无法进入 Linux 的话需此步)。
不用 U 盘(用 BOOTMGR 引导):(参见安装教程 2)Windows 下准备好划分出一定的磁盘空间;用 EasyBCD 配置好引导问题;重启电脑,就可以找到新添加的 NeoGrub 启动项,选中它启动 live 版本 deepin 安装。
Wubi 安装:不需要考虑引导,如支持 Wubi 安装。如同 Windows 操作系统里的其他软件一样安装卸载 Linux。
补充:用 U 盘安装后,改为用 BOOTMGR 引导。启动引导设置、用 BOOTMGR 引导参考文章
进入 windows,可以设置当前引导为 Bootmgr(已经是的不用),也就是主引导记录 MBR 设置为:Windows NT 6.x MBR,分区引导记录为:BOOTMGR 引导程序,通过用 EasyBCD 和 BOOTICE 都可以。
使用 EasyBCD,添加 Linux 启动项。
补充:卸载 Linux。
用 U 盘安装,下次不想使用 Linux 前,用 PE 恢复 MBR 引导(如第三点)或用 EasyUEFI 删除其启动项(前 BIOS + MBR,后 UEFI + GPT 情况),然后进 Windows 删除其分区。参考:Windows 下卸载
三 引导修复及卸载问题
参考博文
启动引导设置、用 BOOTMGR 引导参考文章

1 概述
Linux 引导出问题:用 Linux 的 U 盘挂载上 Linux 所在分区,安装 Grub(会自动配置好 Windows 的启动项);
Windows 引导出问题或两个都出问题:(用 Grub 引导的方式)用 PE 先修复 MBR,后安装 Grub,和配置 Grub 中的 Windows 引导。

2 具体实践
1.U 盘 PE 恢复 MBR 引导:
使用 U 启动盘(老毛桃 PE)进入 PE,用 NTBOOTautofix 修复 MBR;然后用 DiskGenius,选择 C 盘,分区 > 激活当前分区 > 保存更改。
删除 Linux 导致 windows 进入不了,也可以使用此方法。

2.U 盘 Linux 系统挂载安装 Grub:

# 创建挂载目录
sudo mkdir -p /mnt/temp

# 挂载分区
mount /dev/sda5 /mnt/temp

# 重装 Grub
grub2-install --root-directory=/mnt/temp /dev/sda

# 使生效
sudo apt-get update

3.使用 grub rescue 模式来重装 Grub 恢复引导:

# 查看各分区文件系统类型,确定哪个是 Deepin 系统安装位置,文件系统为 ext。
ls
ls (hdx,msdosy)    # x,y 为数字,参见 ls 命令后显示的分区情况。

# 如果之前安装 Linux 时没有分 /boot 分区:
ls (hdx,msdosy)/boot/grub
set root=(hdx,msdosy)
set prefix=(hdx,msdosy)/boot/grub
insmod normal
normal

# 如果之前安装 Linux 时分出了 /boot 分区:
ls (hdx,msdosy)/grub
set root=(hdx,msdosy)
set prefix=(hdx,msdosy)/grub
insmod normal
normal

# 回车进入 Linux,命令行输入命令:
sudo update-grub
sudo grub-install /dev/sda
4.Grub 中添加操作系统启动项:

多操作系统添加启动项前,可先备份 grub.cfg,要想办法搞清楚每个系统安装位置,可在 Linux 下查看;UUID 查看命令 sudo blkid。
可编辑的 Grub 2 配置文件主要包括 /etc/default/grub、和 /etc/grub.d/ 下的各文件。
自定义菜单项一般存放在 /etc/grub.d/40_custom 文件中。编辑完运行 update-grub 命令。

构建 menuentry 中的主要项:
menuentry "显示的操作系统名" {
    insmod part_msdos
    insmod ntfs            # 文件系统类型。
    set root='hd0,msdos1'  # hd0 为第几块硬盘,1 为第几个分区。
    search --no-floppy --fs-uuid --set=root 7E58BCF758BCAF71  # 磁盘用 UUID 来标记,更精确。
    chainloader +1
}

grub.cfg 中的模板:
menuentry 'Deepin 15.7 GNU/Linux' --class deepin --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-f179bdda-0718-4b4c-8408-4b06f5483456' {
    load_video
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos3'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3  f179bdda-0718-4b4c-8408-4b06f5483456
    else
     search --no-floppy --fs-uuid --set=root f179bdda-0718-4b4c-8408-4b06f5483456
    fi
    linux    /boot/vmlinuz-4.15.0-29deepin-generic root=UUID=f179bdda-0718-4b4c-8408-4b06f5483456 ro  splash quiet
    initrd    /boot/initrd.img-4.15.0-29deepin-generic
}

menuentry 'Windows 10 (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-7E58BCF758BCAF71' {
    insmod part_msdos
    insmod ntfs
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  7E58BCF758BCAF71
    else
     search --no-floppy --fs-uuid --set=root 7E58BCF758BCAF71
    fi
    parttool ${root} hidden-
    drivemap -s (hd0) ${root}
    chainloader +1
}
四 小结
BIOS + MBR 模式。

搞清楚 MBR 的开机管理程序(boot loader)是 Grub 还是 BOOTMGR;谁调用谁进入第二个操作系统。
开机管理程序是谁,就在谁添加另一个被调用的启动项(是 Grub,会自动设置好;是 BOOTMGR,需要手动进 Win 添加 Linux 启动项)。

搞清楚哪个操作系统没法启动,然后修复,详情见第三部分。

五 补充:安装多个 Linux 操作系统
参考文档

Windows 下安装第二个操作系统 Linux 时,会选择 Grub 安装位置。往 MBR 上装,往 Linux 系统所在的分区的第一个扇区里装。一般安装在 MBR。

MBR 是各个系统的必争之地,尤其是 Windows 一旦重装, MBR 记录就被覆盖, GRUB 也会不见。先后安装两个 Linux,其 Grub 都往 MBR 上修改指向自己,留下的只会是后来者。Grub 会自动识别配置引导。


   
Quote
Share: