Linux系统中的引导过程与服务控制

本文详细介绍了Linux操作系统的引导过程,包括开机自检、MBR引导、GRUB菜单、加载内核和init初始化。同时,针对启动故障,如MBR扇区和GRUB引导程序的损坏,提供了修复步骤。此外,还讨论了Systemd单元类型、运行级别及其对应的目标。最后,阐述了如何控制服务和优化启动过程,涉及ntsysv、systemctl和chkconfig工具的使用。
摘要由CSDN通过智能技术生成

目录

引言

一、Linux操作系统引导过程

1、引导过程总览

2、系统初始化进程

3、Systemd单元类型

4、运行级别所对应的Systemd目标

二、排除启动类故障

1、MBR扇区

2、修复MBR扇区故障步骤

3、GRUB引导程序

4、修复GRUB引导程序故障步骤

5、遗忘root用户密码

6、解决遗忘root用户密码步骤

三、服务控制及切换运行级别

1、系统服务控制

2、Linxu系统的运行级别

四、优化启动过程

1、ntsysv工具

2、systemctl工具

3、系统服务的启动和控制

4、chkconfig工具

总结


引言

什么是Linux系统的引导过程,平常只知道开机,其中的引导过程,都有哪些具体的过程,在开机过程中,会遇到很多启动的故障,怎么去解决,如何去掌控系统中的服务,得到更好的利用,以及优化一些启动的任务,保持系统的运行的快速稳定,下面就介绍关于引导过程与服务控制基本理论以及配置上面的过程。

一、Linux操作系统引导过程

1、引导过程总览

①开机自检

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

总结:检测出第一个能够引导系统的设备(比如:硬盘或光驱)。

②MBR引导

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

总结:运行放在MBR扇区里的启动GRUB引导程序。

③GRUB菜单

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

总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置。

④加载Linux内核

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

总结:把内核和镜像文件系统加载到内存中。

⑤init进程初始化

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

总结:加载硬件驱动程序,内核把init进程加载到内存中运行。

2、系统初始化进程

①init进程:

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

init进程是系统中第一个进程;

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

②Systemd:

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

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

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

3、Systemd单元类型

单元类型

扩展名

说明

Service

.service

描述一个系统服务

Socket

.socket

描述一个进程间通信的套接字

Device

.device

描述一个内核识别的设备文件

Mount

.mount

描述一个文件系统的挂载点

Automount

.automount

描述一个文件系统的自动挂载点

Swap

.swap

描述一个内存交换设备或交换文件

Path

.path

描述一个文件系统中文件或目录

Timer

.timer

描述一个定时器(用于实现类似cron的调度任务)

Snapshot

.snapshot

用于保存一个systemd的状态

Scope

.scope

使用systemd的总线接口以编程的方式创建外部进程

Slice

.slice

描述居于Cgroup的一组通过层次组织的管理系统进程

Target

.target

描述一组systemd的单元

4、运行级别所对应的Systemd目标

运行级别

Systemd的target

说明

0

target

系统停机模式,系统默认运行级别不能设置为0,否则不能正常启动,机器关的

1

rescue.target

单用户模式,root权限,用于系统维护,禁止远程登录〈只能通过实机进去),该模式的进入方式百度操作即可;就像windows下的安全模式登录;(进入单用户模式的时候root不需要密码就可以登录,所以在此模式下可以修改root密码)

2

multi-user.target

多用户模式,没有NFS和网络支持

3

multi-user.target

完整的多用户文本模式,有NFS和网络,登录后进入控制台命令行模式

4

multi-user.target

系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电池用尽时,可以切换到这个模式来做一些设置

5

graphical.target

图形化模式,登录后进入图形GUI模式,X windows系

6

reboot.target

重启模式,默认运行级别不能设为6,否则不能正常启动运行init6机器就会重启

二、排除启动类故障

1、MBR扇区

①故障原因:病毒、木马等造成的破坏;不正确的分区操作、磁盘读写误操作。

②故障现象:找不到引导程序,启动中断;无法加载操作系统,开机后黑屏。

③解决思路:应提前作好备份文件;以安装光盘引导进入急救模式;从备份文件中恢复。

2、修复MBR扇区故障步骤

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

第①步在虚拟机上添加一块硬盘,后进行扫描磁盘,这样就不需要重启虚拟机,下面进行管理磁盘分区,划分一个主分区(/dev/sdb1)。

[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host2/scan 
[root@localhost ~]# fdisk /dev/sdb

(n→p→空→空→w)

第②步将主分区(/dev/sdb1)进行格式化,并为xfs类型。

[root@localhost ~]# mkfs.xfs /dev/sdb1

第③步在根目录下创建一个目录MBRbackup(此目录为备份目录),将主分区(/dev/sdb1)挂载到此备份目录,然后将MBR扇区数据备份到此备份目录(MBRbackup)下的一个备份文件(MBR.txt )。

[root@localhost ~]# cd /
[root@localhost /]# mkdir MBRbackup
[root@localhost /]# mount /dev/sdb1 /MBRbackup/
[root@localhost /]# df -Th
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda3      xfs        56G  5.6G   50G   11% /
devtmpfs       devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs          tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs          tmpfs     1.9G   13M  1.9G    1% /run
tmpfs          tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1      xfs       497M  167M  330M   34% /boot
tmpfs          tmpfs     378M  8.0K  378M    1% /run/user/42
tmpfs          tmpfs     378M   36K  378M    1% /run/user/0
/dev/sr0       iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1      xfs        20G   33M   20G    1% /MBRbackup
[root@localhost /]# dd if=/dev/sda of=/MBRbackup/MBR.txt bs=512 count=1         
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000324765 秒,1.6 MB/秒
[root@localhost /]# ls /MBRbackup/
MBR.txt



#(dd创建指定容量的文件、"if=”指定输入设备(或文件)、"of="指定输出设备(或文件)、
"bs="指定读取数据块的大小、"count="指定读取数据块的数量、/dev/zero "零"设备文件,
可以无限的提供空字符。常用来生成一个特定大小的文件。)

第④步模拟破坏MBR引导扇区,并重启。

[root@localhost /]# dd if=/dev/zero of=/dev/sda bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000182667 秒,2.8 MB/秒
[root@localhost /]# reboot





#(dd创建指定容量的文件、"if=”指定输入设备(或文件)、"of="指定输出设备(或文件)、
"bs="指定读取数据块的大小、"count="指定读取数据块的数量、/dev/zero "零"设备文件,
可以无限的提供空字符。常用来生成一个特定大小的文件。)

第⑤步引导界面进入急救模式,从备份文件中恢复MBR扇区数据先加载好光盘镜像,重启操作系统,当出现安装向导界面时,选择"Troubleshooting"选项,再选择"Rescue a CentOS Linux system" 选项,进入急救模式选择“1",选择Continue并按Enter键继续,再次按Enter键后将进入带“sh-4.2# "提示符的Bash Shell环境。

第⑥步:创建一个目录,将带有备份文件的分区挂载到此创建的目录上,进行备份数据恢复,最后执行exit命令退出临时Shell环境,系统将会自动重启。

sh-4.2# mkdir /backupdir
sh-4.2# mount /dev/sdb1 /backupdir
sh-4.2# dd i f=/backupdir/MBR.txt of=/dev/ sda
sh-4.2# exit

3、GRUB引导程序

①故障原因:MBR中的GRUB引导程序遭到破坏(446字节);grub.conf文件丢失、引导配置有误。

②故障现象:系统引导停滞,显示“grub>”提示符。

③解决思路:尝试手动输入引导命令;进入急救模式,重写或者从备份中恢复grub.conf;向MBR扇区中重建grub程序。

4、修复GRUB引导程序故障步骤

/boot/grub/目录下的包是用于启动菜单的背景图片及样式/ boot/grub2/ grub.cfg

方法1:手动输入引导命令(笨拙繁琐,不建议使用)。

第①步先删除/boot/grub2下的grub.cfg文件,并重启。

[root@localhost /]# rm -rf /boot/grub2/grub.cfg 
[root@localhost /]# reboot

第②步骤:加载指定的模块到内核。

grub> insmod xfs

第③步骤:内核的名字及位置等信息。

grub> linux16/vmlinuz-3.10.0-693.el7.x86 64 root=UUID=8fd74986-ae66-4ffd-b7d8-a19f2eca7b6f ro rhgb quietLANG=zh_ CN.UTF-8

第④步骤:镜像系统文件。

grub> initrd16 /initramfs-3.10.0-693.e17.x86_64.img

第⑤步骤:引导boot。

bootgrub> boot

方法2:进入急救模式,恢复GRUB引导程序(MBR位于第一块硬盘(/dev/sda)的第一个物理扇区处,总共512字节,前446字节是主引导记录,分区表保存在MBR扇区中的第447-510字节中。)

第①步在虚拟机上添加一块硬盘,后进行扫描磁盘,这样就不需要重启虚拟机,下面进行管理磁盘分区,划分一个主分区(/dev/sdb1)。

[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host2/scan 
[root@localhost ~]# fdisk /dev/sdb

(n→p→空→空→w)

第②步将主分区(/dev/sdb1)进行格式化,并为xfs类型。

[root@localhost ~]# mkfs.xfs /dev/sdb1

第③步在根目录下创建一个目录GRUBbackup(此目录为备份目录),将主分区(/dev/sdb1)挂载到此备份目录,然后将MBR扇区数据备份到此备份目录(GRUBbackup)下的一个备份文件(GRUB.txt )。

[root@localhost ~]# cd /
[root@localhost /]# mkdir GRUBbackup
[root@localhost /]# mount /dev/sdb1 /GRUBbackup/
[root@localhost /]# df -Th
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda3      xfs        56G  5.6G   50G   11% /
devtmpfs       devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs          tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs          tmpfs     1.9G   13M  1.9G    1% /run
tmpfs          tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1      xfs       497M  167M  330M   34% /boot
tmpfs          tmpfs     378M  8.0K  378M    1% /run/user/42
tmpfs          tmpfs     378M   36K  378M    1% /run/user/0
/dev/sr0       iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1      xfs        20G   33M   20G    1% /GRUBbackup
[root@localhost /]# dd if=/dev/sda of=/GRUBbackup/GRUB.txt bs=446 count=1
记录了1+0 的读入
记录了1+0 的写出
446字节(446 B)已复制,0.000291397 秒,1.5 MB/秒

第④步模拟对MRB中的GRUB引导程序的破坏,但并不破坏分区表,并重启。

[root@localhost /]# dd if=/dev/zero of=/dev/sda bs=446 count=1
记录了1+0 的读入
记录了1+0 的写出
446字节(446 B)已复制,0.000189364 秒,2.4 MB/秒
[root@localhost /]# reboot

第⑤步引导界面进入急救模式,从备份文件中恢复MBR扇区数据先加载好光盘镜像,重启操作系统,当出现安装向导界面时,选择"Troubleshooting"选项,再选择"Rescue a CentOS  system" 选项,进入急救模式选择“1",选择Continue并按Enter键继续,再次按Enter键后将进入带“sh-4.2# "提示符的Bash Shell环境。

第⑥步:创建一个目录,将带有备份文件的分区挂载到此创建的目录上,进行备份数据恢复,最后执行exit命令退出临时Shell环境,系统将会自动重启。

sh-4.2# mkdir /backupdir
sh-4.2# mount /dev/sdb1 /backupdir/
sh-4.2# dd if=/backupdir/GRUB.txt of=/dev/sda
sh-4.2# exit

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

第①步先删除/boot/grub2下的grub.cfg文件,并重启。

[root@localhost /]# rm -rf /boot/grub2/grub.cfg 
[root@localhost /]# reboot

第②步骤:进入急救模式,加载光盘镜像。

一种方法:此时按虚拟机中的“重新启动客户机”,并快速按“Esc”,选择"CD-ROM Drive"选项,然后选择"Troubleshooting"选项,再选择"Rescue a CentOS  system" 选项。进入急救模式选择“1",选择Continue并按Enter键继续,再次按Enter键后将进入带“sh-4.2# "提示符的Bash Shell环境。

还有一种方法:此时按虚拟机中的“重新启动客户机”,并快速按“F2”,选择“Boot”选项,将“CD-ROM Drive”这个选项放到最上面,并按“F10”保存并退出,选择"CD-ROM Drive"选项,然后选择"Troubleshooting"选项,再选择"Rescue a CentOS  system" 选项。进入急救模式选择“1",选择Continue并按Enter键继续,再次按Enter键后将进入带“sh-4.2# "提示符的Bash Shell环境。

第③步骤:切换到跟系统环境下。

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

5、遗忘root用户密码

①故障原因:遗忘root用户的密码。

②故障现象:无法进行需要root权限的管理操作,若没有其他可用帐号,将无法登录系统。

③解决思路:进入急救模式,重设密码。

6、解决遗忘root用户密码步骤

方法1:直接重设root用户密码

第①步骤:进入急救模式,加载系统镜像,c切换到系统根环境

sh-4.2#chroot /mnt/ sysimage

第②步骤:重设root用户密码

bash-4.2#passwd root

方法2:进入单用户模式修改root密码为例。

第①步骤:重启开机按esc,第一行按e在启动GRUB菜单中选择编辑选项,按键"e"进入编辑

第②步骤:编辑修改:大约在第16行找到"ro"将"ro”修改为" rw init=/sysroot/bin/bash "

第③步骤:按Ctrl+X重启,输入命令进入系统

sh-4.2#chroot /sysroot

第④步骤:修改前可修改字符集:

sh-4.2#LANG=en_Us.UFT-8

第⑤步骤:重置root密码

sh-4.2# passwd root

第⑥步骤:退出chroot环境,并重启

bash-4.2#exit

sh-4.2# init 6

三、服务控制及切换运行级别

1、系统服务控制

①系统服务控制

Systemctl 控制类服务 服务名称

②控制类型

start:启动

stop:停止

restart:重新启动

reload:重新加载

status:查看服务状态

[root@localhost /]# systemctl status postfix.service

2、Linxu系统的运行级别

①查看运行级别

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

[root@localhost /]# runlevel 
N 5

systemctl工具:查看默认的运行级别

[root@localhost /]# systemctl get-default
graphical.target

②临时切换运行级别

init命令:参数是运行级别所对应的数字

[root@localhost /]# init 3

systemctl工具:参数是具体的target

[root@localhost /]# systemctl isolate multi-user.target

③设置永久运行级别

[root@localhost /]# ls -l /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 36 7月  24 13:48 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
[root@localhost /]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
[root@localhost /]# systemctl get-default 
multi-user.target

四、优化启动过程

1、ntsysv工具

①提供一个交互式、可视化窗口

②可以在字符终端运行

③便于集中管理多个服务

2、systemctl工具

①不提供交互式、可视化窗口

②管理单个服务效率更高

3、系统服务的启动和控制

①ntsysv系统服务管理工具

ntsys

ntsys --level 级别列表

②查看系统服务的启动状态

systemctl is-enabled 服务名称

[root@root1 ~]# systemctl is-enabled httpd
httpd.service is not a native service, redirecting to /sbin/chkconfig
.Executing /sbin/chkconfig httpd --level=5
enabled

设置系统服务的启动状态

systemctl enable/disable 服务名称

[root@root1 ~]# systemctl disable httpd
httpd.service is not a native service, redirecting to /sbin/chkconfig
.Executing /sbin/chkconfig httpd off
[root@root1 ~]# systemctl enable httpd
httpd.service is not a native service, redirecting to /sbin/chkconfig
.Executing /sbin/chkconfig httpd on

 ③永久修改主机名

[root@localhost /]# hostnamectl set-hostname root1
[root@localhost /]# init 6
[root@root1 ~]#

④查看主机名的状态

[root@root1 ~]# hostnamectl status 
   Static hostname: root1
         Icon name: computer-vm
           Chassis: vm
        Machine ID: ae7a201ada914ec39bed7f36174eb12b
           Boot ID: 1da3e55a35c5435daa9860431e96f7ba
    Virtualization: vmware
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-957.el7.x86_64
      Architecture: x86-64

⑤设置系统语言为中文

[root@root1 ~]# localectl set-locale LANG=zh_CN.utf8

⑥查看当前系统使用的语言

[root@root1 ~]# localectl status 
   System Locale: LANG=zh_CN.utf8
       VC Keymap: cn
      X11 Layout: cn

⑦其他

init 0
systemctl isolate poweroff.target
systemctl poweroff
poweroff
init 1
systemctl isolate rescue.target
init 3
systemctl isolate multi-user.target
init 5
systemctl isolate graphical.target
init 6
systemctl isolate reboot.target
systemctl reboot
reboot

4、chkconfig工具

格式:chkconfig --list [服务名称]
chkconfig --add 服务名称
chkconfig --level 级别列表服务名on/off
chkconfig --add httpd
chkconfig --level 35 httpd on

[root@root1 ~]# chkconfig --list httpd

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

httpd          	0:关	1:关	2:开	3:开	4:开	5:开	6:关

总结

1、引导过程总览:开机自检(检测出第一个能够引导系统的设备)→MBR引导(运行放在MBR扇区里的启动GRUB引导程序)→GRUB菜单(GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置)→加载内核(把内核和镜像文件系统加载到内存中)→init进程初始化(加载硬件驱动程序,内核把init进程加载到内存中运行)。

2、系统初始化进程:init和Systemd这两个命令。

3、Linux系统包括0~6这七个运行级别,0表示了关机,3表示了完整字符模式(2和4也跟3类似),5表示了图形模式,6表示了重启。

4、使用ntsysv和chkonfig工具可以设置多个服务在不同运行级别的启动状态。

5、在CentOS7,系统启动和服务管理都交给了systemd进行管理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值