多操作系统安装与引导原理(Windows、Deepin)
bigegpt 2024-12-06 12:48 3 浏览
注意:
搞清楚每个操作系统的安装位置。操作系统使用的 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 会自动识别配置引导。
相关推荐
- 悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)
-
新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...
- 高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源
-
凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...
- 微服务架构实战:商家管理后台与sso设计,SSO客户端设计
-
SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...
- 还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑
-
在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...
- Seata源码—6.Seata AT模式的数据源代理二
-
大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...
- 30分钟了解K8S(30分钟了解微积分)
-
微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...
- SpringBoot条件化配置(@Conditional)全面解析与实战指南
-
一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...
- 一招解决所有依赖冲突(克服依赖)
-
背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...
- 你读过Mybatis的源码?说说它用到了几种设计模式
-
学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...
- golang对接阿里云私有Bucket上传图片、授权访问图片
-
1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...
- spring中的资源的加载(spring加载原理)
-
最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...
- Android资源使用(android资源文件)
-
Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...
- 如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)
-
深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...
- @Autowired与@Resource原理知识点详解
-
springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...
- java的redis连接工具篇(java redis client)
-
在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)