一、Linux系统启动流程
Linux系统启动流程图
1.1)Linux系统启动流程详细说明
1.1.1)加载BIOS
当你打开计算机电源,计算机会首先加载基本输入输出系统(Basic Input Output System )BIOS系统。BIOS程序一般被存放在主板ROM(只读存储芯片)之中、即使在关机或掉电以后该程序也不会丢失。
BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机就知道应该去读取哪个硬件设备了。
1.1.2)读取MBR(主引导记录)
读取硬盘上磁道的第一个扇区被称为MBR,也就是Master Boot Record即主引导记录、它的大小是512字节前446存放的就是grub程序的一部分、里面却存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
1.1.3)GRUB引导
Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Boot Loader(一段小程序)。系统读取内存中的grub配置信息,并依照此配置信息来启动不同的操作系统。
1.1.4)加载Kernel
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
1.1.5)设定Inittab运行等级
内核加载完毕,会启动Linux操作系统第一个守护进程init,然后通过该进程读取/etc/inittab文件,/etc/inittab文件的作用是设定Linux的运行等级,Linux常见运行级别如下
- 0:关机模式
- 1:单用户模式
- 2:无网络支持的多用户模式
- 3:字符界面多用户模式
- 4:保留,未使用模式
- 5:图像界面多用户模式
- 6:重新引导系统,重启模式
1.1.6)加载rc.sysinit
# 读取完运行级别,Linux系统执行的第一个用户层文件/etc/rc.d/rc.sysinit,该文件功能包括:设定PATH运行变量、设定网络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。
1.1.7)加载内核模块
# 读取/etc/modules.conf文件及/etc/modules.d目录下的文件来加载系统内核模块。该模块文件,可以后期添加或者修改及删除
1.1.8)启动运行级别程序
根据之前读取的运行级别,操作系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。其中以S开头表示系统即将启动的程序,如果以K开头,则代表停止该服务。S和K后紧跟的数字为启动顺序编号。
1.1.9)读取rc.local文件
操作系统启动完相应服务之后,会读取执行/etc/rc.d/rc.local文件,可以将需要开机启动的任务加入到该文件末尾,系统会逐行去执行并启动相应命令
# rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里
1.1.10)执行/bin/login程序
执行/bin/login程序,启动到系统登录界面,操作系统等待用户输入用户名和密码,即可登录到Shell终端,如图所示,输入用户名、密码即可登录Linux操作系统,至此Linux操作系统完整流程启动完毕
# 此时系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。
二、启动级别设置
# Linux启动级别有
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
# 设置启动级别为 3
Linux系统默认启动等级为5、可已使用init命令切换启动级别。
[root@fly ~]# init 3
# 对于传统的设置方法
通过查看CentOS7的/etc/inittab文件
# 将系统修改为多用户命令行界面
systemctl set-default multi-user.target
# 将系统修改为图形界面
systemctl set-default graphical.target
三、单用户模式
1、开机时进入如下界面按下方向键盘阻止系统自动继续
2、按e键出现下面界面
3、按方向键定位到最后,找到“ro”这一行,ro的意思是read only(只读)将“ro”替换成 rw init=/sysroot/bin/sh
4、按Ctrl-x 进入单用户模式
5、执行chroot /sysroot。其中chroot命令用来切换系统,/sysroot/目录就是原始系统
6、如果要修改root密码
passwd是修改root密码的命令,touch /.autorelabel 执行这行命令作用是让SELinux生效(或者干脆关闭SELinux)
如果不行,密码不会生效。按Ctrl+D,执行reboot重启生效。如下图
7、修改默认启动级别(开机进入命令行模式)
#设置成命令模式
systemctl set-default multi-user.target
init 3 # 切换到字符模式,有时只使用上面的语句没有效果
按下Ctrl+D后,执行reboot
8、测试使用修改后密码登入成功。
四、grub加密
centos7.2 + 中引入了新的实用程序“ grub2-setpassword ”
# 执行 grub2-setpassword 命令
[root@steven ~]# grub2-setpassword
Enter password:
Confirm password:
# 为什么要删除这个参数?
因为如果现在直接重新启动系统。尝试修改引导条目、系统会要求提供凭据。
但是可以在没有凭据的情况下修改引导条目。
为了阻止未经授权的修改和未经授权的启动,需要对 /boot/grub2/grub.cfg文件进行更改。
打开文件并使用密码搜索需要保护的启动条目,它以menuentry开头。找到条目后,从中删除 --
unrestricted 参数
# 重启验证 reboot
只有当输入正确的用户名和密码时,才能进入 grub 菜单或者修改引导条目
五、光盘修复模式
在开机进度条的时候快速按F2进入BIOS界面
选择BOOT 将CD-ROM Drive(光盘)调到最上方 按F10保存
2、选择 Troubleshooting(故障排除)
3、进入到Troubleshooting(故障排除)界面
4、选择:Rescue a CentOS system(进入系统修复模式)
5、进入到Rescue模式(成功进入系统修复模式页面)
6、选项意思:
1) continue
# 救援模式程序会自动查找系统中已有的文件系统,并可读写挂载到/mnt/sysimage目录下。
2) Read-Only mount
# 会以只读的方式挂载已有的文件系统。
3) Skip to shell
# 手动挂载
4)Quit (Reboot)
# 退出重启
7、选1(救援模式)Emter 回车
8、sh切换bash模式 执行chroot /mnt/sysimage/
9、修改root密码
执行passwd root
六、BIOS加密
1、在开机进度条的时候快速按F2进入BIOS界面,设置BIOS加密,找到设置选项。
2、直接回车会弹出让你设置密码的条框。
3、设置密码
4、按F10保存 [Enter]回车
5.再次开机进度条的时候快速按F2进入BIOS界面后,你会发现需要输入密码才能进入BIOS系统。也就是说需要了BIOS验证