Linux(引导过程与服务控制)

发布于:2024-04-25 ⋅ 阅读:(26) ⋅ 点赞:(0)

目录

1.linux操作系统引导过程

1.1引导过程总览 

​编辑1.2 linux操作系统的引导过程 

1.3 系统初始化进程

 1.4 Systemd单元类型

1.5 运行级别所对应的systemd目标 

2.排除启动类故障

2.1 修复MBR扇区故障 

2.2 实例:修复MBR扇区故障

2.3 实例:恢复GRUB引导程序 


1.linux操作系统引导过程

1.1引导过程总览 

1.2 linux操作系统的引导过程 

 1. 开机自检

 服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。

总结: 检查硬件设备,检测出第一个能够引导系统的设备,比如硬盘或者光驱

2. MBR 引导

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

总结:  运行MBR扇区里的主引导程序GRUB

 3.启动 GRUB 菜单

 对于Linux操作系统来说,GRUB(统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核

CentOS 7 采用的是 GRUB2 启动引导器。

 总结:启动GRUB菜单    系统读取GRUB配置文件(/boot/grub2/grub.cfg)获取内核的设置和位置,并在屏幕显示GRUB菜单页面

 4.加载 Linux 内核

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

 5.init 进程初始化

为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成整个系统的初始化,最后等待用户进行登录。
总结:加载硬件驱动程序,内核把init进程加载到内存中运行
 

6.   系统初始化    

总结:启动内核模块,执行运行级别的启动脚本,执行/etc/rc.d/rc.local文件里的命令等 

 

1.3 系统初始化进程

 init进程

● 由Linux内核加载运行/sbin/init程序

● init进程是系统中第一个进程,是所有进程的父进程

● init进程的PID(进程标记)号永远为1 

Systemd 

● Systemd是Linux操作系统的一种init软件

● CentOS7中采用全新的Systemd启动方式,取代传统的sysVinit

 CentOS7中运行的第一个init进程是/lib/systemd/systemd

init进程 文件位于 /sbin/init -> /lib/systemd/systemd  ,init进程PID号固定为 1 ,是系统中其它所有进程的父进程

进程启动方式:centos7开始的版本默认的启动方式是 systemd,开机服务程序为并行启动,启动效率较快
centos6及以前版本的启动方式是 sysVinit,开机服务程序是通过串行执行/etc/init.d/目录下的shell脚本启动的,容易阻塞,启动效率较慢

 1.4 Systemd单元类型

 

1.5 运行级别所对应的systemd目标 

 

2.排除启动类故障

2.1 修复MBR扇区故障 

故障原因

● 病毒、木马等造成的破坏

● 不正确的分区操作、磁盘读写误操作

故障现象

 找不到引导程序,启动中断

● 无法加载操作系统,开机后黑屏

解决思路

● 应提前作好备份文件

● 以安装光盘引导进入急救模式

● 从备份文件中恢复

2.2 实例:修复MBR扇区故障

(1)新建一块硬盘sdb,并将该硬盘格式化,挂载到/backup目录中;

 

[root@localhost ~]# fdisk -l

磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00010c9c

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    83886079    40893440   8e  Linux LVM

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-root:37.7 GB, 37706792960 字节,73646080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:4160 MB, 4160749568 字节,8126464 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x1c4e72ec 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

[root@localhost ~]# mkfs -t xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mount /dev/sdb1 /opt/mbr.bak/
[root@localhost ~]# df -ht
df:选项需要一个参数 -- t
Try 'df --help' for more information.
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  2.0G     0  2.0G    0% /dev
tmpfs                   tmpfs     2.0G     0  2.0G    0% /dev/shm
tmpfs                   tmpfs     2.0G   13M  2.0G    1% /run
tmpfs                   tmpfs     2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        36G  5.2G   30G   15% /
/dev/sda1               xfs      1014M  174M  841M   18% /boot
tmpfs                   tmpfs     394M   20K  394M    1% /run/user/0
/dev/sr0                iso9660   4.5G  4.5G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1               xfs        20G   33M   20G    1% /opt/mbr.bak

(2)备份MBR扇区数据到其他磁盘(/dev/sdb1); 

[root@localhost ~]# dd if=/dev/sda of=/opt/mbr-bak bs=512 count=1  #将MBR扇区文件中数据,备份到/backup/mar.bak目录中
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000172723 秒,3.0 MB/秒

 (3)模拟破坏MBR引导扇区;

[root@localhost ~]#  dd if=/dev/zero of=/dev/sda bs=512 count=1 #将零设备文件复制到MBR扇区文件中进行破坏
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000113332 秒,4.5 MB/秒

 

(4)重新启动虚拟机;

 


(5)引导界面进入急救模式,从备份文件中恢复MBR扇区数据; 

 

2.3 实例:恢复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.el7.x86_64.img			#镜像系统文件
grub> boot							#引导boot

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

(1)备份GRUB配置文件到/bak/grub.bak文件中;

(2)引导界面进入急救模式,从备份文件中恢复GRUB引导数据; 

方法三:引导界面进入急救模式,重建GRUB菜单配置文件;

(1)手动删除/boot/grub2/grub2.cfg文件;

[root@clr ~]# cd /boot/grub2
[root@clr /boot/grub2]# ls
device.map  fonts  grub.cfg  grubenv  i386-pc  locale
[root@clr /boot/grub2]# rm -rf grub.cfg   #手动删除/boot/grub2/grub2.cfg文件
[root@clr /boot/grub2]# ls
device.map  fonts  grubenv  i386-pc  locale
[root@clr ~]# init 6 #重启系统

 (2)进入急救模式,加载光盘镜像,切换到系统根环境;

重新启动虚拟机,在系统刷新读取设备文件时,快速按esc,进入CD-ROM Drive,通过光盘方式进行启动;