你要是用过Linux系统,肯定晓得开机的时侯,不是按个电源键,等着屏幕亮上去这么简单。背后的操作可复杂了,犹如一场悉心安排的大独唱,每位部份都在该出声的时侯出声。明天,咱就来好好讲讲Linux系统开机究竟是咋回事,把它的神秘面纱给揭出来。
一、BIOS/UEFI:开机的开场戏
你一按笔记本的电源键,这场开机大戏就开场了。最先下来“表演”的是BIOS(基本输入/输出系统)或则UEFI(统一可扩充固件插口)。曾经的老笔记本,BIOS用得比较多,它上面有让鼠标、显示屏、磁盘驱动器和并口通讯这种设备能正常工作的程序。不过现今技术进步了,UEFI渐渐显得更常用。
BIOS和UEFI有个很大的不同,就是存c盘信息的方法不一样。BIOS用的是主引导记录(MBR),UEFI用的是GUID分区表(GPT)。开机的时侯,BIOS或则UEFI会先做个加电自检(POST),这一步可重要了,它得检测硬件和外接设备是不是都没问题,笔记本能不能正常工作。要是检测出毛病了,屏幕上都会显示错误提示;要是没检查到显存,笔记本都会发出“滴滴”的声音。只有顺利通过这个检测,笔记本能够步入下一步开机流程。
二、找引导加载程序:打开系统房门的锁匙
自检完了,BIOS或则UEFI会根据笔记本的设置,去找能启动系统的设备。通常来说,系统会按默认的次序找,像硬碟、USB驱动器、CD驱动器这种。其实,你也可以自己在BIOS或则UEFI里设置找设备的次序。在BIOS系统里,引导加载程序在启动设备的第一个磁道linux系统运行界面,也就是MBR,占c盘上面512字节的地方;在UEFI系统里,所有启动用的数据都存在一个.efi文件里,这个文件在有引导加载程序的EFI系统分区里。
引导加载程序其实个头不大,但作用可不小。它主要干的事儿,就是找到c盘上的操作系统内核,把它放在显存里,之后根据设置好的选项运行。在Linux系统里,有好几种引导加载程序可以选:
Lilo:也就是LinuxLoader,原先在Linux系统里用得挺多的。并且它不支持同时启动好几个操作系统,也不支持UEFI,对新的文件系统支持也不太够。它的开发者在2015年12月就不更新了,如今基本都不用它了。Syslinux:这是个能在FAT文件系统上运行的Linux引导加载程序,通常在第一次装Linux系统的时侯用,能让安装过程简单点。它能支持好几种常用的文件系统,像FAT、ext2、ext3、ext4这种,在一些条件下,也能支持btrfs和xfs文件系统。GRUB2:现今差不多所有的非嵌入式Linux系统发行版都用GRUB(GrandUnifiedBootLoader),非常是GRUB2。它功能非常多,能引导好几个操作系统,既能用图形界面,也能用文本界面,通过并口线缆用上去很便捷,还有个很厉害的命令行界面,可以拿来交互式设置linux操作系统,就能通过网路实现无盘启动。在开机的时侯,GRUB2从BIOS或则UEFI手里接过控制权,先把自己加载好,再把Linux内核放在显存里,之后把运行的权利交给内核。它默认的配置文件在/boot/grub目录下。三、内核:系统的核心“发动机”启动
引导加载程序把内核成功放在显存里然后linux系统运行界面,内核就开始工作了。内核的镜像文件是压缩过的,加载进来后得先解压,之后放在低端显存里。要是有初始RAMc盘映像,也会一起被加载。内核在启动的时侯,会把显存管理、进程调度、设备驱动这种系统资源都设置好。它如同一台非常复杂、特别精密的大机器,把笔记本各个部件的工作都协调得好好的,为前面系统正常运行打好基础。
四、init进程:用户操作界面的“开荒者”
内核启动完了,还会启动init进程,它的进程ID(PID)是1。init进程如同是所有其他进程的“老祖宗”。在先前的Linux系统里,它会根据/etc/inittab文件里写的脚本做事,负责把系统初始化好,管理好系统的运行级别。它得设置好鼠标、字体,加载各类模块,把网路配置好等等,这种工作都很重要,都是为了让用户能正常操作笔记本创造条件。不过如今的Linux系统,systemd渐渐把老的init系统给取代了。systemd的设计思路和先前不一样,它能让好多服务同时启动,大大减短了开机时间,但是管理服务的功能也更强。
五、系统初始化与登陆:走入Linux的世界
在init进程(或则systemd)的指挥下,系统会运行一系列初始化脚本,像/etc/rc.d/rc.sysinit这种,把系统初始化好。这个过程包括挂载文件系统、启动各类服务等等。等所有初始化工作都做完了,系统还会出现登陆界面,等着你输入用户名和密码。到这里,Linux系统的开机过程就结束了arch linux,你就可以在这个功能强悍的操作系统上开始各类操作和探求了。
了解了Linux系统开机的整个过程,我们才能看见笔记本系统上面各个部份配合得多好,也能更好地了解和维护Linux系统。不管是排查开机的时侯出的问题,还是想让系统性能更好,这种知识都能帮上大忙。希望这篇文章能让你对Linux系统开机有更全面、更深入的认识,让你在Linux的世界里用得更顺手。你在使用Linux系统的时侯,有没有碰到过和开机有关的问题呢?欢迎在评论区谈谈你的经历和看法。