win10 linux双系统怎么设置开机引导?

win10 linux双系统怎么设置开机引导?,第1张

第一步:\x0d\x0a当然是下载Ubuntu了,我是在Ubuntu官网下载的原生版本,我下载的是Ubuntu最新版本15.04。没有选择国人修改过的kylin版本。kylin好不好我完全不懂,只是习惯性的觉得国人做系统不放心,就连修改下我都不放心。\x0d\x0a\x0d\x0a第二步:\x0d\x0a制作u盘启动盘。我用的是UltraISO这个软件制作的启动盘, *** 作很简单,为了增加文章篇幅,我就简单贴两张图吧。(这地方写入方式的选择,默认是USB-HDD+,我也是这么选择的,但是有人说应该选择USB-ZIP+。具体我不懂,不过我按照我选择的能够安装成功。)\x0d\x0a\x0d\x0a *** 作很简单,就是选择好你的iso文件,然后启动-制作硬盘启动,不清楚的话就百度一下咯。\x0d\x0a\x0d\x0a第三步:\x0d\x0awindows系统下为Ubuntu准备一个空闲分区。 *** 作也很简单,找一个不用的盘,空间别太小,然后用windows自带的磁盘管理工具来压缩分区。我自己是为Ubuntu准备了100G大小的空间,这个自己根据需求设定。\x0d\x0a\x0d\x0a第四步:\x0d\x0a重启电脑安装Ubuntu系统。lenovo重启时按F12选择启动位置,这个各个品牌按照自己品牌的按键来,跟U盘安装win7、win8一个道理。重点需要说明的地方就是Ubuntu分区。在安装过程中需要选择位置,我们就选择之前专门为Ubuntu压缩的那个分区,可以看到那个分区说明写着“空闲”,所以还是比较好区分的。然后就是分区了,参考了网上一些人的说法,然后根据自己的笔记本我做了如下设置(手机渣像素,估计看不清,我再陈述一下吧)。首先是“/”挂载区,我分了30G;然后是SWAP,我分了8G,这个跟内存有关,我看完网上很多人设置的是2G,我自己笔记本物理内存12G,2G会不会太少了,于是自己设置了8G;然后是“/boot”,我分了300M,网上都说这部分200M足够了;最后剩下的空就留给“/home”了。这部分内容我也不懂,完全是参考网上的说明设置的,毕竟对linux具体原理一窍不通。\x0d\x0a\x0d\x0a然后分区结束后,需要选择安装启动引导其的设备,这部分貌似很关键,但是我也不懂原理,就听网上说的,什么是从ubuntu启动器,什么是从windows启动器。我按照其中的一种说法设置的,讲设备选择为刚才设置的“/boot”那个设备。\x0d\x0a然后就是安装了,安装过程比较慢,可能是我这儿网速比较慢。其中“正在下载语言包”“正在下载软件包”这两处很慢,每个至少得20mins,可能是因为我这热网速太慢了。还有就是最后一步卡在“执行安装后执行的触发器 update-notifier-common”这一步有20min后,我怀疑有问题,看网上很多人出现这个问题,有人说断网可以解决,我断网后一段时间好像解决了,但是我不知道这个是不是因为断网而解决的。\x0d\x0a\x0d\x0a简单两张图表示我的确安装了。成功后设置用户名,密码之类的就可以了。然后需要重启。\x0d\x0a\x0d\x0a第五步:\x0d\x0a重启后有画面可以选择进入什么系统,具体记不清了,基本就是:1、Ubuntu 2、windows 3、windows 4、设置(就是进入BIOS)。我选择了进入Ubuntu,一切顺利,虽然我会用,但是欣喜的看到安装成功了。然后,问题没这么简单,我想重启后进原来的win10用easyBCD软件设置一下启动顺序啥的时,发现重启页面选择2或3都进不去windows,基本意思就是找不到文件啥的。这个双系统的引导是用Ubuntu引导的,我本来是想让他用win10引导的。后来简单百度了下,可以先通过BIOS设置优先级进入win10,我按照这个方法设置后进入了windows(然而时间不对了,以因为我的本是美版的,刚买的时候时间就差几个小时,虽然选了时区也不对,最后还是手动设置的时间,这次也是手动设置的。),但是开机后没有选择进入那个系统,就是说我想要的还没有。\x0d\x0a我用easyBSD试着设置了一下,看效果如何。\x0d\x0a\x0d\x0a有效果,在开机界面出现了选项。可以顺利进入win10.不过安装双系统就跟开机10s内完成说byebye了。然而开机界面选择了ubuntu但是进不去,提示找不到 \EFI\ubuntu\shimx64.efi。意思就是现在主板用efi启动,而在efi分区没找到相应的ubuntu分区。如果找到这个文件并把他放到应该在的efi分区中,应该就能正常启动了。于是我装了DiskGenius,瞅了一眼没找到ubuntu的efi,找到了windows的efi。我再windows自带的磁盘管理中看到两个efi分区,大小都是260M,有点纳闷,怎么会有两个????于是也没多想,就把之前装的ubuntu分区给删除了,准备重装,并且装的时候记得把分区下面那个引导位置设置为我windows的efi分区,这样应该就能正常启动双系统了。当我刚刚删除分区后突然意识到我之前因为新加了ssd,所以克隆了系统,所哟应该就有两个efi分区,原来的hdd上一个,后来的ssd上一个。于是按照这个思路,我再hdd的efi分区中找到了ubuntu的那个shimx64.efi文件。然并卵,我已经删除了分区,不得不重装了。\x0d\x0a在重装之前,听人说需要关闭windows的快速启动(windows+x,里面电源选项中有,选择电源按钮的功能,更改当前不可用的设置,把“启用快速启动前面的对号去掉”),同时还需要在BIOS菜单中,在security下找到secure boot项,把UEFI那项设置为DISABLE。\x0d\x0a然后重装,这次比上次快不少。进入ubuntu照样正常,不过从ubuntu界面进windows不正常,好像进入了一个修复windows的界面。而且没法后退,只好强制关机了。又从BIOS进了windows系统,开始设置双系统启动,用easyBCD。\x0d\x0a\x0d\x0a设置完之后,还是跟之前一样的问题,找不到efi文件。我用DiskGenius看了看,那个ubuntu的efi文件还是在hdd的efi分区中,没在ssd的efi分区中。而且没办法复制过去,每次打开ssd的efi分区想要 *** 作(比如新建文件夹,粘贴之类的),就提示说这个分区没有正确加载,可以尝试重启,然而重启也没什么用。

CentOS的启动流程总体顺序如下:

POST -->Boot Sequence -->bootloader(MBR) -->Kernel -->加载rootfs -->switchroot -->/sbin /init -->(配置文件:/etc/inittab, /etc/init/*.conf) -->根据init配置文件设置默认运行级别 -->运行系统初始化脚本/etc/rc.d/rc.sysinit,完成系统初始化 -->开启或关闭用户选定的对应运行级别下所对应的服务 -->启动终端,打印登录提示符。

注:前面加粗部分代表内核空间的系统启动流程,后面未加粗部分代表用户空间的系统启动流程。

第一步:硬件启动过程

POST加电自检

主要实现的功能是检测各个外围硬件设备是否存在而且能够正常运行起来,实现这一自检功能的是固化在主板上的ROM(主要代表为CMOS)芯片上的BIOS(Basic Input/Output System)程序;例如BIOS会检测CPU、Memory以及I/O设备是否能够正常运行,如果是个人计算机的话可能还会检测一下显示器。只要一通电,CPU就会自动去加载ROM芯片上的BIOS程序,是这样来实现的。而检测完成之后就进行硬件设备的初始化。

选择启动设备以加载MBR

主要实现的功能是选择要启动的硬件设备,选择了之后就可以读取这个设备上位于MBR里头的bootloader了。这一步的实现是这样的:根据BIOS中对启动顺序的设定,BIOS自己会依次扫描各个引导设备,然后第一个被扫描到具有引导程序(bootloader)的设备就被作为要启动的引导设备。

MBR(Main Boot Record),是硬盘的0柱面,0磁道、1扇区(第一个扇区),称为主引导扇区,也称为主引导记录。它由三部分组 成:主引导程序(BootLoader)、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。

注:硬盘默认一个扇区大小为512字节。

第一部分,主引导程序(BootLoader)占446个字节,负责从活动分区中装载,并运行系统引导程序。

第二部分,硬盘分区表DPT占64个字节,有4个分区表项,每个分区表项占16个字节,硬盘中分区有多少以及每一个分区的大小都记 录在其中。

第三部分,硬盘有效标志,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MB

第二步:GRUB引导阶段

不同的系统有不同的主引导程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列 *** 作系统)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。GRUB程序加载执行并引导kernel(内核)程序,其中有三个阶段,Grub引导阶段的文件都在/boot/grub/目录下。

stage1: 这一阶段执行的就是系统安装时预先写入到MBR的Bootloader程序,即是存放在MBR的前446字节里的程序。它的任务仅是读取(加载)硬盘的0柱面,0磁道,2扇区的内容(/boot/grub/stage1)并执行。

stage1.5: 这一阶段是Stage1阶段和Stage2阶段的桥梁,功能是加载stage2所在分区的文件系统驱动,让stage1中的bootloader能识别stage2所在分区的文件系统,此后grub程序便有能力去访问/boot/grub/stage2。

stage2: 这一阶段读取并解析grub的配置文件/boot/grub/grub.cnf,根据配置文件加载内核镜像到内存中,通过initrd程序建立虚拟根文件系统,最后调用(转交)内核。

第三步:内部引导阶段

加载内核,核心开始解压,启动一些最核心的程序。为了让内核足够的轻小,硬件驱动并没放在内核文件里面。系统仅探测可识别到的所有硬件设备,加载硬件驱动程序,即加载真正的根文件系统所在设备的驱动程序(有可能会借助于ramdisk加载驱动),以只读方式挂载根文件系统,运行用户空间的第一个应用程序:/sbin/init。

第四步:init初始化阶段(系统初始化阶段)

虽然CentOS 5、CentOS 6以及CentOS 7的/etc/init配置文件内容各不相同,但总体的启动流程相同:/sbin/init -->根据/etc/inittab配置文件设置默认运行级别 -->运行系统初始化脚本/etc/rc.d/rc.sysinit,完成系统初始化 -->关闭或启动用户选定的默认运行级别所对应的服务 。

对于CentOS 5来说,初始化程序init是SysV init,其配置文件为:/etc/inittab; 对于CentOS 6来说,初始化程序init是upstart,其配置文件为:/etc/inittab, /etc/init/ .conf,也就是upstart将配置文件拆分成多个,在/etc/init/目录下以conf结尾的都是upstart风格的配置文件,而/etc/inittab仅用于设置默认运行级别; 对于CentOS 7来说,初始化程序init是systemd,其配置文件:/usr/lib/system/systemd/, /etc/systemd/system/ ;

具体执行过程:/sbin/init程序会读取/etc/inittab文件确认运行级别,然后执行/etc/rc.d/rc脚本,根据确认的运行级别启动对应/etc/rc.d/rc#.d/目录下的服务(#为0~6),与此同时执行系统初始化脚本/etc/rc.sysinit(软链接,指向/etc/rc.d/rc.sysinit),还会加载/etc/rc.local(软链接,指向/etc/rc.d/rc.local文件)用户自定义服务(脚本)。

CentOS7中初始化进程变为了systemd,systemd即为system daemon,是Linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell系统开销的效果,最终代替现在常用的System V与BSD风格的init程序。与多数发行版使用的System V风格的init相比,systemd采用了以下的新技术:A.采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;B.用Cgroup代替PID来追踪进程,即使是两次fork之后生成的守护进程也不会脱离systemd的控制。

第五步:启动终端

根据前面获取的运行级别来启动终端,mingetty程序是用于启动终端的,它会调用登录程序login,这样就能显示出登录提示符了,类似mingetty这种用于打开终端的程序还有getty等。而如果默认运行级别为5,则会打开图形界面。

第一步:硬件启动过程

这一步和CentOS6差不多,详细请看1.1内容。

第二步:GRUB引导阶段

从这一步开始,CentOS6和CentOS7的启动流程区别开始展现出来了。CentOS7的主引导程序使用的是grub2,执行过程是先加载boot.img、core.img两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。

CentOS7中使用命令进行配置,而不直接去修改配置文件了。grub.cfg配置文件开头注释部分说明了由/etc/grub.d/目录下文件和/etc/default/grub文件组成。改好配置后都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,将配置文件重新生成。

第三步:内部引导阶段

这一步与CentOS6也差不多,加载驱动,切换到真正的根文件系统,唯一不同的是执行的初始化程序变成了/usr/lib/systemd/systemd。

第四步:init初始化阶段(系统初始化阶段)

CentOS7中我们的初始化进程变为了systemd。执行默认target配置文件/etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关)。然后执行sysinit.target来初始化系统和basic.target来准备 *** 作系统。接着启动multi-user.target下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动。

注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目录下的graphical.target或multiuser.target。而graphical.target依赖multiuser.target,multiuser.target依赖basic.target,basic.target依赖sysinit.target,所以倒过来执行。

unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其他与init相关的信息。(也就是CentOS6中的服务器启动脚本)

第五步:启动终端

systemd执行sysinit.target

systemd启动multi-user.target下的本机与服务器服务

systemd执行multi-user.target下面的/etc/rc.d/rc.local

Systemd执行multi-user.target下的getty.target及登录服务

getty.target是启动终端的systemd对象。如果到此步骤,系统没有指定启动图形桌面,到此就可以结束了,如果需要启动图形界面,要在此基础上启动桌面程序。

从 CentOS 7 版本之后,系统开始用 systemd 实现init进程,系统启动和服务器守护进程管理器功能,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。

unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息。

3.2 system unit文件格式

/usr/lib/systemd/system:发行版打包者使用,每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/

/etc/systemd/system:系统管理员和用户使用,管理员建立的执行脚本,类似于/etc/rcN.d/Sxx的功能,比上面目录优先运行

/lib/systemd/system::ubutun的对应目录

/run/systemd/system:系统执行过程中所产生的服务脚本,比上面目录优先运行

unit 格式说明:

service unit file文件通常由三部分组成:

Unit段的常用选项:

Service段的常用选项:

Install段的常用选项:

注意:对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启。

首先在启动界面按e编辑启动参数,

将ro参数更改为rw init=/sysroot/bin/sh,按ctr + x启动系统

按下图执行命令更改root密码


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7505944.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存