Linux之引导过程与服务控制(简单易懂)

文章目录

    • 一、引导过程
        • 1.1.1、开机自检(BIOS)
        • 1.1.2、MBR引导
        • 1.1.3、GRUB菜单
        • 1.1.4、加载内核(Kernel)
        • 1.1.5、init进程初始化
        • 1.2、systemd单元类型
    • 二 、排除启动类故障
        • 2.1、MBR扇区故障的原因
        • 2.2、修复MBR扇区实验
        • 2.3、GRUB引导故障的原因
        • 2.4、修复GRUB引导菜单实验
        • 2.5、遗忘root用户密码
        • 2.6、重设root用户密码的实验
    • 三、systemd服务控制
        • 3.1、系统服务控制
        • 3.2、Linux系统的运行级别
          • 3.2.1:查看运行级别
          • 3.2.2、临时切换运行级别
    • 四、优化启动过程(开机自启)
        • 4.1、系统服务的管理工具
        • 4.2、ntsysv工具
        • 4.3、systemctl 工具

一、引导过程

  • CentOS 7系统中,由systemd掌管系统的初始化工作,系统的启动过程与之前的版本相比有了新的变化。
  • Linux操作系统的引导过程:开机自检-----MBR引导-----GRUB菜单-----加载内核-----init进程初始化

1.1.1、开机自检(BIOS)

  • 服务器主机开机以后,将根据主板BIOS(Basic Input/Output System,基本输入输出系统)中的设置对CPU。内存。显卡,键盘等设备进行初步检测,并初始化部分硬件(加电自检)
  • 检测成功后根据预设的启动顺序移交系统控制权,大多数时候会移交给本机硬盘(加载部分驱动)

1.1.2、MBR引导

  • 当从本机硬盘中启动系统时,首先根据硬盘的第一个扇区中MBR(Master Boot Record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区
    或者直接根据MBR记录中的引导信息调用启动菜单(CentOS7中为grub2)
  • 注意:要安装双系统,则两个系统需要分别安装在不同的盘符当中

1.1.3、GRUB菜单

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

1.1.4、加载内核(Kernel)

  • 系统引导器程序会从本地硬盘中加载内核以及内存文件系统(CentOS 7 中使用initramfs)
  • Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度
  • 内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程
  • 内存文件系统initramfs 是经过gzip 的cpio归档,其中包含启动时所有必要的硬件内核模块,初始化脚本等。
  • 内核放在/boot目录下,/boot目录相当于Windows的system32

1.1.5、init进程初始化

  • 加载硬件驱动以及初始化进程(加载全部驱动)
  • 由Linux内核加载运行/sbin/init程序,是系统中第一个进程
  • PID(进程标记)号永远为1

1.2、systemd单元类型

  • 在systemd中不同类型的systemd对象被统一称为单元,是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型

  • systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件

  • systemctl 命令用于管理各种类型的systemd单元,可以使用“systemctl -t help”命令来查询systemd支持的单元类型
    Linux之引导过程与服务控制(简单易懂)_第1张图片

二 、排除启动类故障

2.1、MBR扇区故障的原因

  • 故障原因
    病毒,木马等造成的破坏
    不正确的分区操作,磁盘读写误操作
  • 故障现象
    找不到引导程序,启动中断
    无法加载操作系统,开机后黑屏
  • 解决思路
    提前做好备份文件
    以安装光盘引导进入急救模式
    从备份文件中恢复

2.2、修复MBR扇区实验

  • 实验环境
    VMware软件,开centos 7,并为其添加一块硬盘(备份数据用的)
  • 恢复步骤

1.备份已损坏MBR扇区数据(实际中我们都是备份整个文件)

加一块磁盘做备份

第一步 : 将新添加的硬盘分区fdisk /dev/sdb
         格式化mkfs -t xfs /dev/sdb
         挂载
...省略部分内容		
[root@localhost ~]# mount /dev/sdb1 /beifen		
[root@localhost ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        20G  3.1G   17G   16% /
devtmpfs       devtmpfs  898M     0  898M    0% /dev
...省略部分内容
/dev/sdb1      xfs        20G   33M   20G    1% /beifen
[root@localhost ~]# dd if=/dev/sda of=/beifen/sda.mbr.bak bs=512 count=1		'//将/dev/sda中的512k 备份到挂载点/beifen中'
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000168125 秒,3.0 MB/秒
[root@localhost ~]# ls /beifen		'//查看是否备份成功'
sda.mbr.bak

2.模拟故障

dd if=/dev/zero of=/dev/sda bs=512 count=1

3.加载系统镜像文件中的急救模式

  • 先添加镜像文件再重启电脑。

  • 在读进度条时快速点一下Esc键
    Linux之引导过程与服务控制(简单易懂)_第2张图片
    Linux之引导过程与服务控制(简单易懂)_第3张图片
    Linux之引导过程与服务控制(简单易懂)_第4张图片
    Linux之引导过程与服务控制(简单易懂)_第5张图片

  • 将备份数据做恢复处理
    Linux之引导过程与服务控制(简单易懂)_第6张图片
    reboot重启电脑

2.3、GRUB引导故障的原因

  • 故障原因
    MBR中的GRUB引导程序遭到破坏
    grub.conf文件丢失,引导配置有误
  • 故障现象
    系统引导停滞,显示“grub>”提示符
  • 解决思路
    尝试手工输入引导命令(成功率很低,不建议)
    进入急救模式,重写或者从备份中恢复grub.conf
    向MBR扇区中重建grub程序

2.4、修复GRUB引导菜单实验

  • 1、查找并破坏grub引导程序(grub.cfg)
[root@localhost ~]# cd /boot 		'//进入/boot目录'
[root@localhost boot]# ls			'//查看'
config-3.10.0-693.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-d078430d0d8f434fb5ad6e47678ea86f.img
initramfs-3.10.0-693.el7.x86_64.img
initramfs-3.10.0-693.el7.x86_64kdump.img
initrd-plymouth.img
symvers-3.10.0-693.el7.x86_64.gz
System.map-3.10.0-693.el7.x86_64
vmlinuz-0-rescue-d078430d0d8f434fb5ad6e47678ea86f
vmlinuz-3.10.0-693.el7.x86_64
[root@localhost boot]# cd grub		'//进入grub目录'
[root@localhost grub]# ls			'//查看'
splash.xpm.gz
[root@localhost grub]# cd ../grub2		'//没有发现grub配置文件,进入grub2目录中查找'
[root@localhost grub2]# ls				'//发现grub.cfg配置文件'
device.map  fonts  grub.cfg  grubenv  i386-pc  locale
[root@localhost grub2]# rm -rf grub.cfg		'//删除grub.cfg配置文件'
[root@localhost grub2]# ls
device.map  fonts  grubenv  i386-pc  locale		'//删除成功,'
[root@localhost grub2]# init 6				'//重启'

Linux之引导过程与服务控制(简单易懂)_第7张图片

  • 2、reboot电脑,进入急救模式
chroot /mnt/sysimage  #进入bash环境
grub2-install /dev/sda  #修复扇区
grub2-mkconfig -o /boot/grub2/grub.cfg  

Linux之引导过程与服务控制(简单易懂)_第8张图片

  • reboot电脑即可

2.5、遗忘root用户密码

  • 故障原因
    遗忘root用户的密码
  • 故障现象
    无法进行需要root权限的管理操作
    若没有其他可用账号,将无法登录系统
  • 解决思路
    进入急救模式,重设密码

2.6、重设root用户密码的实验

1:加载镜像系统后进入急救模式和上面的实验相同,
最后进入bash环境

chroot  /mnt/sysimage

2:直接改密码

passwd  root
输入密码

Linux之引导过程与服务控制(简单易懂)_第9张图片

重启之后直接选择root 输入新设置的密码就OK,这里就不赘述了

三、systemd服务控制

  • systemd不是一个单独的命令,而是一个集合体
  • systemctl 是管理系统的主要命令
  • hostnamectl 是用于查看与修改当前主机信息的命令

3.1、系统服务控制

  • systemctl命令可以控制系统服务,此命令涵盖了之前版本操作系统的service命令和chkconfig 命令两者的功能

  • 使用systemctl命令,可以省略服务单元名称的标识.service,即:不输入后缀标识,systemctl命令默认将后缀标识当做.service来处理

常用方式
systemctl 控制类型 服务名称

常用控制类型
start  启动
stop   停止
restart  重新启动		'//重新启动,会中断服务,此服务的PID值会改变'
reload  重新加载		'//重新加载配置文件不会中断服务,此服务的PID值会改变'
status  查看服务状态

例如:
[root@localhost ~]# systemctl start httpd		'//启动httpd服务'
[root@localhost ~]# systemctl stop httpd		'//停止httpd服务'
[root@localhost ~]# systemctl restart httpd		'//重新启动httpd服务'
[root@localhost ~]# systemctl reload httpd		'//重新加载httpd服务配置文件'
生产环境中建议使用reload命令来重新加载服务

3.2、Linux系统的运行级别

3.2.1:查看运行级别
runlevel 命令
runlevel 只能查看切换运行级别与当前运行级别

例如
[root@localhost ~]# runlevel 
N 5		'//N 是上一次运行的级别,5是这一次运行的级别。因为是开机后就查看,所以上一次的运行级别显示为N'
'若从init 5 切换到 init 3 ,在init3中输入runlevel命令,则会显示 5 3'
systemctl 工具
systemctl 能查看默认的运行级别
3.2.2、临时切换运行级别
  • init 0 关机
  • init 1 单用户模式 多用于系统修复
  • init 3 大多数服务器的运行环境
  • init 5 图形化界面
  • init 6 重启,相当于reboot

四、优化启动过程(开机自启)

4.1、系统服务的管理工具

  • ntsysv 工具

提供一个交互式,可视化窗口(伪图形化界面)

可以在字符终端运行

便于集中管理多个服务

  • systemctl 工具

不提供交互式,可视化窗口

管理单个服务效率更高

4.2、ntsysv工具

[root@localhost ~]# ntsysv		'//进入ntsysv伪图形化界面'
* 符号代表开机自启
空格  代表开启不自启
Tab键 切换到选项(确定,取消)
空格键可以输入 * 或者取消 *

Linux之引导过程与服务控制(简单易懂)_第10张图片

4.3、systemctl 工具

[root@localhost ~]# systemctl enable httpd		'//将httpd服务设置开机自启'
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# systemctl disable httpd		'//将httpd服务设置关闭开机自启'
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.

你可能感兴趣的:(Linux,基础使用,引导过程与服务控制)