前言
环境准备:
linux操作系统
VMware Workstation16.x
Centos7
为什么要了解开机启动流程?
排查服务器启动不了的故障,了解原因 => troubleshooting
开机自检的意义
- 掌握让某个软件开机自动运行
- 开机不能正常启动,是什么原因,或者那个环节出现了问题
- 防止黑客植入木马,去查询黑客会把木马放到哪些地方?
- 开机自检:上电自检(POST,Power On Self Test)
-
开机自检:谁去完成?
- 主板上的BIOS程序去完成
BIOS程序
BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统"。BIOS是个人电脑启动时加载的第一个软件。
它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。BIOS是一个程序, CMOS芯片里存放的是BIOS程序的参数
- CMOS:是一个存储参数配置的芯片
BIOS是一个程序会读取CMOS芯片里的参数,了解cpu的配置,时间的配置,启动顺序的配置等
rom芯片:read only memory --》只读的存储器
ram芯片:随机存取存储器(random access memory的缩写)–》可读可写- 硬盘里有一个位置:0磁道0柱面1扇区 => MBR(master boot record => 主引导记录) => 就是512字节大小
- 一个盘片可以划分出很多的磁道,磁道上划分63个扇区,一个扇区是512个字节
不同盘片上的相同磁道组成一个柱面 - MBR由4个16字节的“磁盘分区表”(DPT 64bytes)、grub2(启动程序,占得最多,446bytes)、结束标志(2bytes)组成
- 一个盘片可以划分出很多的磁道,磁道上划分63个扇区,一个扇区是512个字节
-
自检什么东西
- 指计算机系统,接通电源,(BIOS程序)的行为,包括对CPU、系统主板、基本内存、扩展内存、系统ROwBIOs等器件的测试.如发现错误,给操作者提示或警告。简化或加快该过程,可使系统能够快速后动。
-
电脑里有哪些基本的硬件?
- 主板(motherboard)、cpu、内存,磁盘,网卡,显卡,声卡,电源,鼠标,键盘、显示器等
boot:引导、启动
启动顺序:
BIOS–》boot
- 第1引导顺序:hard drive 硬盘
- 第2引导顺序:cdrom 光驱 ----》安装系统
- 第3引导顺序:removable device 可移动设备–》u盘,移动硬盘 --》安装系统
- 第4引导顺序:Network --》从网络启动–》网络中安装服务器启动 --》安装
vmlinuz => 内核文件系统
initramfs => 给内核程序提供一个初始化的内存文件系统的镜像文件。
=> init 初始化
ram 内存
fs 文件系统
=> 临时的根文件系统的镜像文件 => 程序和
systemd是initramfs里的一个程序去启动的程序,需求去启动
centos7/8/9 => 启动的第一个程序是systemd
centos6 => 启动的第一个程序是init
- 运行级别 => runlevel
- centos6里面:
- runlevel1:单用户模式
- runlevel2:多用户模式(不能使用nfs)
- runlevel3:完全多用户模式 => 字符界面模式 => 非常正常的模式,默认最小化安装linux系统就是这个模式
- runlevel4:保留,没有使用
- runlevel5:图形界面
- runlevel6:重启
- init 0 关机
init 6 重启
- centos6里面:
查看当前的运行级别
[root@localhost ~]# runlevel
N 3
-
N代表最开始进入的模式,如果是表示没有进行模式切换 no
-
3 5 => 代表开机先进入运行级别3,后切换到运行级别5
-
centos7已经只有两个主要的target => 3和5
查看/etc/inittab[root@localhost ~]# cd /etc/inittab -bash: cd: /etc/inittab: 不是目录 [root@localhost ~]# cat /etc/inittab # inittab is no longer used when using systemd. # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target # # systemd uses 'targets' instead of runlevels. By default, there are two main targets: # # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5 # # To view current default target, run: # 查看当前运行级别 # systemctl get-default # # To set a default target, run: # 设置开机进入图形界面 # systemctl set-default TARGET.target # [root@localhost ~]# systemctl get-default multi-user.target
-
/etc/rc.local
与以前的版本相比,由于在引导期间并行执行,该脚本不会在所有其他服务之后运行。
/etc/rc.local文件会在所有的服务都运行完成后,执行这个文件里的命令
这个脚本是最后执行的,必须给这个文件可执行权限
systemctl disable firewalld 设置firewalld服务开机不启动 => 下一次开机的问题
systemctl enable firewalld 设置firewalld服务开机启动
systemctl start firewalld 立马启动firewalld的服务 => 本次
systemctl stop firewalld 立马关闭firewalld的服务
service sshd start => systemctl start sshd
旧式启动服务的方式 新式启动服务的方式
- /etc/fstab 告诉linux系统正常启动过程中挂载那个磁盘分区
file system 文件系统 => 磁盘里的分区 => 一个分区对应一个文件系统
自己编写的程序怎么开机自启动
- 做成服务
- 放到/etc/rc.local => 在所有
- 放到登录shell的bash的4个配置文件中
- 放到/etc/profile.d/*.sh
开机启动流程:
总结
详细介绍了linux开机启动的流程,明白背后发生了一些什么,可以让我们遇到开机异常时,有一点头绪。