Linux系统引导过程

200 阅读9分钟

Linux 系统引导过程

1.开机自检(检测硬件设备,检测出第一个能引导系统的设备,硬盘)

服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit, 中央处理器)、内存显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。 总结:检测出第一个能够引导系统的设备 比如硬盘或光驱

2.MBR引导(运行在 MBR 扇区(硬盘的最小存储单位 512字节)里的启动 GRUB 引导程序)

当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR 记录中的引导信息调用启动菜单(如 GRUB)。 总结:运行放在MBR扇区里的启动GRUB引导程序

3.GRUB菜单(GRUB 引导程序通过读取GRUB配置文件(/boot/grub2/grub.cfg)获取内核和镜像文件系统的设置和路径,屏幕显示grub菜单)

对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载 Linux 内核文件,然后将系统控制权转交给内核。需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。 总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置

4.加载Linux内核(把内核和镜像文件系统加载到内存中)

Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过程。在 CentOS 系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。 总结:把内核和镜像文件系统加载到内存中

5.init进程初始化(内存会把init进程加载到内存中运行)

为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录 总结:加载硬件驱动程序,内核把init进程加载到内存中运行传统SysVinit依赖于串行执行Shell 脚本启动服务,导致效率低下,系统启动速度较慢systemd能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度。

GRUB2与grub的区别

  1. 支持多种文件系统格式
  2. 在grub中stage1 stage1-5 stage2已经被取消
  3. grub2使用模块机制,通过动态加载需要的模块来扩展功能,这样做的好处允许core镜像更小
  4. 支持自动解压
  5. 配置文件的不同最明显的。

运行级别所对应的Systemd目标

各个级别的作用

  • 0 关机
  • 1 单用户模式
  • 2 字符界面多用户模式(无网络)
  • 3 字符界面多用户模式(有网络)
  • 4 字符界面多用户模式(保留)
  • 5 图形界面多用户模式
  • 6 重启

Snipaste_2022-08-06_14-12-10.png

Snipaste_2022-08-06_14-13-37.png

Snipaste_2022-08-06_14-13-48.png 详解

  • 0 系统停机模式,系统默认运行级别不能设置为0,否则不能正常启动,机器关的;
  • 1 单用户模式,root权限,用于系统维护,禁止远程登录(只能通过实机进去),该模式的进入方式百度操作即可;就像windows下的安全模式登录;(进入单用户模式的时候root不需要密码就可以登录,所以在此模式下可以修改root密码)
  • 2 多用户模式,没有NFS和网络支持;
  • 3 完整的多用户文本模式,有NFS和网络,登录后进入控制台命令行模式。
  • 4 系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电池用尽时,可以切换到这个模式来做一些设置;
  • 5 图形化模式,登录后进入图形GUI模式,X windows系;
  • 6 重启模式,默认运行级别不能设为6,否则不能正常启动。运行init6机器就会重启

chkconfig命令

主要用来更新(启动或停止)和查询系统服务(service)的运行级信息,用于维护/etc/rc[0-6].d目录的命令行工具。

运行级文件:

每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用\ 跨行注释。 例如,random.init包含三行:

  • chkconfig: 2345 20 80
  • description: Saves and restores system entropy pool for \
  • higher quality random number generation.

范例:

chkconfig -–add httpd增加httpd服务

chkconfig –-del httpd删除httpd服务

chkconfig –-list列出系统所有的服务启动情况

chkconfig –-list mysqld列出mysqld服务设置情况

chkconfig –-level 35 mysqld on设定mysqld在等级3和5为开机运行服务(on表示开机启动,off表示开机不启动,reset指重置服务的启动信息)

chkconfig mysqld on设定mysqld在各等级为on,“各等级”包括2、3、4、5等级

Snipaste_2022-08-05_23-40-19.png

systemctl

在 Centos 中 systemctl 是设置系统服务(service)的命令,它融合之前service和chkconfig的功能于一体。可以使用它永久性或只在当前会话中启用/禁用服务。

Linux添加systemd服务,使用systemctl start xxx启动服务

第一步:进入/usr/lib/systemd/system文件夹

cd /usr/lib/systemd/system

Snipaste_2022-08-06_01-30-05.png

第二步:创建service启动文件

以本机tomcat为例,/usr/lib/systemd/system下创建tomcat.service文件

Snipaste_2022-08-06_02-00-38.png

  • ExecStart:服务启动的命令(对应你自己服务器的命令)
  • ExecStop: 服务停止的命令(同理)
  • ExecReload: 空在这里, 暂时不知道

第三步:添加tomcat.service文件的启动权限

Snipaste_2022-08-06_01-41-45.png

第四步:测试

通过如下两个命令测试tomcat是否会停止和启动

Snipaste_2022-08-06_14-02-36.png 启动、停止、重启、重载服务

systemctl start name.service

systemctl stop name.service

systemctl restart name.service

systemctl reload name.service

查看某个服务(单元)的状态

systemctl status name.service

激活/禁止自动启动

  • systemctl enable httpd.service
  • systemctl disable httpd.service

杀死服务

systemctl kill httpd

Snipaste_2022-08-05_23-34-15.png


排除启动类故障

修复MBR扇区故障

MBR位于第一 块硬盘( /dev/sda) 的第一一个物理扇区处,总共512字节

  1. 备份MBR扇区数据到其它磁盘( /dev/sdb1)
mkdir /backup
mount /dev/sdb1 /backup
dd if=/dev/sda of=/backup/mbr.bak bs=512 count=1

Snipaste_2022-08-05_23-04-30.png

Snipaste_2022-08-05_23-08-48.png

  1. 模拟破坏MBR引导扇区 dd if=/dev/zero of=/dev/sda bs=512 count=1

Snipaste_2022-08-05_23-11-05.png 3. 引导界面进入急救模式,从备份文件中恢复MBR扇区数据

  • 先加载好光盘镜像,重启操作系统,
  • 当出现安装向导界面时,选择"Troubleshooting"选项,
  • 再选择"Rescue a CentOS Linux system"选项,进入急救模式
  • 选择“1"选择Continue并按Enter 键继续
  • 再次按Enter 键后将进入带“sh-4.2#"提示符的Bash Shell环境
  • sh-4.2# mkdir /backupdir
  • sh-4.2# mount /dev/sdb1/backupdir
  • #挂载带有备份文件的分区
  • sh-4.2# dd if=/backupdir/mbr.bak of=/dev/sda
  • #恢复备份数据.
  • sh-4.2# exit
  • #执行exit命令退出临时Shell环境,系统将会自动重启

Snipaste_2022-08-05_23-11-53.png

Snipaste_2022-08-05_23-12-08.png

Snipaste_2022-08-05_23-12-50.png

Snipaste_2022-08-06_00-18-51.png

修复GRUB 引导故障

  • /boot/grub/目录下的包是用于启动菜单的背景图片及样式
  • /boot/grub2/grub.cfg #GRUB配置文件
**方法一**“: 手动输入引导命令(笨拙繁琐,不建议使用)
- grub> insmod xfs            #加载指定的模块到内核
- grub> linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=UUID=8fd74986-ae66-4ffd-b7d8-a19f2eca7b6f ro rhgb quiet
- LANG=zh_ CN.UTF-8           #内核的名字及位置等信息
- grub> initrd16 /initramfs-3.10.0-693.e17.x86_64.img           #镜像系统文件
- grub> boot       #引导boot

方法二:进入急救模式,恢复GRUB引导程序

  • MBR位于第一 块硬盘( /dev/sda) 的第一个物理扇区处,总共512字节,前446字节是主引导记录,分区表保存在MBR扇区中的第447-510字节中。
  • mkfs.xfs /dev/sdb1 格式化磁盘
  • mkdir /bak创建bak目录
  • mount /dev/sdb1 /bak 挂载目录到磁盘上
  • dd if =/dev/sda of=/bak/grub.bak bs=446 count=1 ###备份
  • cd /bak ---------ls --------ll 查看文件是否保存完好
  • #模拟对MRB中的GRUB引导程序的破坏,但并不破坏分区表
  • dd if=/dev/zero of=/dev/sda bs=446 count=1
  • #引导界面进入急救模式,从备份文件中恢复GRUB引导程序
  • N
  • sh-4.2# mkdir /backupdir
  • sh-4.2# mount /dev/sdb1 /backupdir
  • sh-4.2# dd if=/backupdir/grub.bak of=/dev/sda
  • sh-4.2# exit

Snipaste_2022-08-06_00-45-47.png

Snipaste_2022-08-06_00-51-24.png

Snipaste_2022-08-06_00-53-10.png

Snipaste_2022-08-06_00-56-57.png

Snipaste_2022-08-06_00-57-11.png

Snipaste_2022-08-06_01-08-05.png 方法三:引导界面进入急救模式,重建GRUB菜单配置文件

  • rm -rf /boot/grub2/grub.cfg
  • #进入急救模式,加载光盘镜像,切换到系统根环境
  • sh-4.2# chroot /mnt/sysimage 进入光驱系统里的根 当前系统的根
  • #重新将GRUB引导程序安装到第一块硬盘(/dev/sda)的MRB扇区,如果有多个分区可省略
  • bash-4.2# grub2-install /dev/sda
  • #重新构建GRUB菜单的配置文件
  • bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
  • #退出chroot环境,并重启
  • bash-4.2# exit
  • sh-4.2# reboot

CentOS7遗忘root用户的密码或是重置

方法一

  • 进入急救模式,加载系统镜像,c切换到系统根环境
  • sh-4.2# chroot /mnt/sysimage
  • 重设root用户密码
  • bash-4.2# passwd root

Snipaste_2022-08-05_23-44-46.png

Snipaste_2022-08-05_23-46-16.png

Snipaste_2022-08-05_23-46-29.png

Snipaste_2022-08-05_23-50-24.png

方法二

:进入单用户模式修改root密码为例。
1.重启开机按esc,第一行按e在启动GRUB菜单中选择编辑选项,按键 "e" 进入编辑;
2.编辑修改:大约在第16行找到 "ro""ro" 修改为 " rw init=/sysroot/bin/bash ";
3.按Ctrl+X重启,输入命令进入系统
sh-4.2#chroot /sysroot
4.字符集修改
###修改前可修改字符集:
sh-4.2#LANG=en_US.UFT-8
###重置root密码
sh-4.2# passwd root
#退出chroot环境,并重启
bash-4.2# exit
sh-4.2# init 6

Snipaste_2022-08-06_14-32-37.png

Snipaste_2022-08-06_14-18-31.png Snipaste_2022-08-06_14-42-45.png

Snipaste_2022-08-06_14-44-48.png

结束语:硬盘有价,数据无价。备份第一要事。