系统引导是操作系统运行的开始,在用户能够正常登录到系统之前,Linux的引导过程完成了一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。
Linux操作系统的引导过程一般包括以下几个阶段:开机自检、MBR引导、GRUB菜单、加载Linux内核、init进程初始化。
(1)开机自检
服务器主机开机以后,将根据主板bios中的设置对cpu、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多数时候会移交给本地硬盘。
(2)MBR引导
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR的设置,将系统控制权传递给包含操作系统引导文件的分区,或直接根据MBR记录中的引导信息调用启动菜单(如DRUB)。
(3)GRUB菜单
对于Linux系统来说,GRUB算是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单提供给用户选择,并根据所选项加载Linux内核文件,然后将系统控制权转交个欸内核。
(4)加载Linux内核
Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。在centos6.5系统中,默认的内核文件位于/boot/vmlinuz-2.6.32-431.el6.x86_64。
(5)init进程初始化
为了完成进一步的系统引导过程,Linux内核首先将系统中的/sbin/init程序加载到内存中运行,init进程负责完成一系列的系统初始化进程,最后等待用户进行登录。
Linux系统中的进程使用数字进行标记,每个进程的身份标记号称为PID。在引导Linux系统过程中,/sbin/init是内核第一个加载的程序,因此init进程对应的PID号总是为1。init进程运行后将陆续执行系统中的其他程序,不断生成新进程,这些进程称为init进程的子进程,init进程是这些进程的父进程。init是维持整个Linux系统运行所有进程的始祖,init进程是不允许被轻易终止的。需要切换不同系统运行状态时,可以向init进程发送正确的执行参数,由init自身来完成相关操作。
一、inittab文件的结构:id runlevels action process
在Linux系统启动过程中,设计mbr引导记录、grub启动菜单、系统初始化配置文件等方面,其中任何一环节出现故障都可能会导致系统启动的失常,因此一定要注意做好相关文件的备份工作。
MBR引导记录位于物理硬盘的第一个扇区(512B),该扇区由称为主引导扇区(MBR扇区),出来包含引导程序的部分数据外,还包括整个硬盘的分区表记录。主引导扇区发生故障时,将可能无法进入引导菜单,或者因为无法找到正确的分区位置而无法加载系统,通过该硬盘引导主机时很可能进入黑屏状态。解决该问题的思路:提前做好备份文件,以安装光盘引导进入急救模式,从备份文件中恢复。
下面通过示例介绍对MBR扇区进行备份、模拟破坏、修复过程。
(1)备份MBR扇区数据
由于MBR扇区中包含整个硬盘的分区表记录,因此该扇区的备份文件必须存放到其他存储设备中,否则在恢复时将无法读取到备份文件。执行以下操作将第一块硬盘的MBR扇区备份到第2块硬盘的sdb1分区中(挂载到/backup目录)。
1.加一块硬盘做实验,进系统查看磁盘,fdisk -l ##看是否有sdb2.mkfs -t ext4 /dev/sdb ###格式化sdb
3.挂载mount /dev/sdb /opt
4.备份MBR扇区数据dd if=/dev/sda of=/opt/mbr.bak bs=512 count=1
(2)模拟MBR扇区故障,使用dd命令,人为的将MBR扇区记录覆盖,模拟扇区被破坏的故障情况。
5.模拟MBR扇区故障dd if=/dev/zero of=/dev/sda bs=512 count=1
,
6.重启后观察系统是否有问题,无法进入引导菜单,出现 operating system not found,上述就是有故障了MBR挂了
7.装入光盘
8在光盘引导界面选择troubleshooting:
9.进入troubleshooting菜单 选择Rescue a centos system
10.进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2#
11.mount /dev/sdb /mnt ## 将备份sdb备份的文件挂到mnt下 , 然后进去看下是否有mbr.bak
12.恢复备份数据 dd if=/mnt/mbr.bak of=/dev/sda count=1 bs=512
13.重启,出现MBR引导,成功恢复
模拟centos 7.6 grub修复
1.cd /boot/grub2 进入grub2 ,mv grub.cfg grub.cfg.bak给grub配置文件改名
2.重启init 6,出错
3.重新启动,按F2进入BIOS界面,在boot里面将CD-ROM drive置顶,F10保存退出
4.进入troubleshooting菜单
5.选择Rescue a centos system
6.进入引导可以按回车,或者等待
按1 在按回车进入sh-4.2#!
7.进入救援模式后更改 root 目录
8.查看未修复账户
9.使用 grub2-install 命令安装修复grub
10.查看是否修复
11.修复grub.cfg配置文件
12.查看是否修复
13.退出,重启
14.启动按F2进入BIOS,改成硬盘启动,F10保存
15.启动,进入引导,完成
1.重新启动,按F2进入BIOS界面,在boot里面将CD-ROM drive置顶,F10保存退出
2装入光盘,在光盘引导界面选择troubleshooting:
3进入troubleshooting菜单 选择Rescue a centos system
4进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2#
5进入救援模式后切根chroot /mnt/sysimage/
6 修改密码
passwd root
输入密码:Abc123 ###第一次
输入密码:Abc123 ###第二次
从centos7版本的系统开始systemd成为PID恒为1的初始化进程,是内核加载的第一个程序。systwmd诞生的主要目的是为了将更多服务并发启动,从而提高系统启动高速度。其最大的优点在于具有提供按需启动服务的能力,只有在某个服务真正被请求时才进行启动,当该服务结束时,systemd就将其恢复,等待下次需要时启动。
systemd不是一个单独的命令,而是一个集合体。systemctl 是管理系统的主要命令。hostnamectl 是用于查看与修改当前主机信息的命令。
在systemd中不同类型的systemd对象被统一称为单元,是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型。systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件。
systemctl命令用于管理各种类型的systemd单元,可以使用systemctl -t help 命令来查询systemd支持的单元类型。
下面的列表介绍了systemd可用的单元类型:
services:一个服务单元描述如何在服务器上管理一个服务或者应用。这将会包括如何开始或者停止服务、在哪些情况下应自动启动以及相关的软件依赖和排序信息。
socket:一个套接字单元文件描述了systemd使用于基本套接字激活的一个网络或者IPC套接字,或者一个FIFO缓冲。.services文件将会在定义在这个单元里的套接字是活动时开始。
devic:描述了一个设备被udev或者sysfs指定作为systemd管理器的单元。不是所有设置都有.device文件。一些情况下.device单元可能是命令、挂载及访问设备所必需的。
mount:这个单元定义了一个在系统上systemd管理的挂载点。这个些文件以挂载路径来命名,并且把斜杠改成短划线。在/etc/fstab里的条目会有自动创建的单元。
automount:一个.automount单元配置了一个将会自动挂载的挂载点。这些必须根据涉及的挂载点来命令并且必须有匹配的.mount单元来定义挂载的细节。
swap:这个单元描述了系统里的交换空间。这些文件的名字必须体现设备或者空间文件。
target:一个目标单元是在启动或者改变状态时为其他单元提供同步点的。他们也可以用于把系统带进一个新的状态。其他单元指定他们的相当目标来绑定目标的操作。
path:这个单元定义了一个可用于基于路径激活的路径。默认情况下,当路径达到指定状态时一个相同基础名字的.service单元就会开始。这使用inotify来监控路径的变化。
timer:一个.timer单元定义了一个被systemd管理的定时器,类似于一个cron工作来延时或者计划激活。一个匹配的单元将会在计时器到达时开始。
.snapshot:一个.snapshot单元是被systemctl snapshot命令自动创建的。它可以让你在进行更改后重建系统的当前状态。快照不会跨会话生存,快照是用于回滚临时状态的。
slice:一个.slice单元是和Linux Control Group节点关联的,允许资源受到限制或者给关联的进程分匹配时间片。名字反映了它在cgroup树里的分层位置。单元默认根据他们的类型放在一定的位置。
scope:作用域单元是systemd根据从它的总线接口接收到的信息自动创建的。这些被用于外部创建的系统进程的管理集。
就像你看到的,有许多systemd知道如何去管理的不同单元。很多单元类型一起工作来增加功能。例如,一些单元用于触发其他单元和提供激活功能。
我们将会主要集中在.servic单元,因为他们的实用性和管理员需要管理这些单元的一致性。
systemctl命令可以控制系统服务,此命令涵盖了之前版本操作系统中的service命令和chkconfig命令两者的功能,在使用systemctl命令时,可以省略服务单元名称的表示.service。也就是如果输入资源无后缀表示,systemctl会默认把后缀标识当做.service来处理。
语法:systemctl 【OPTIONS…】{ COMMAND } …
1.查看服务启动状态
systemctl status name.service
查看服务状态处理status选项,systemctl还提供了另外两种查询服务状态方法
1)查看某个服务是否在启动成功状态
systemctl is-active named.service
2)查看某个服务是否在启动失败状态
systemctl is-failed named.service
2.启动与停止服务
systemctl {start|stop|restart|reload} name.service
注意:restart命令相当于先stop然后再start,此时服务的PID值会改变,而reload命令则是使服务读取和重新加载次服务的配置文件,不会完全停止和启动服务,PID不变。可以使用status命令验证。生产环境中建议reload命令。
3.设置开机启动
systemctl {enable|disable} name.service
4.查看依赖关系
systemctl list-dependencies
5.屏蔽服务
屏蔽服务命令 systemctl mask name.service
取消屏蔽使用命令 systemctl unmask name.service
使用systemctl list-nuit-files --type unit-tpe 命令可以列出指定systemd单元类型的所有配置文件及其状态。
单元配置文件状态一共有四种 enable/disable/static/masked
此类配置单元为其他配置单元进行逻辑分组。它们本身实际上并不做什么,只是引用其他配置单元而已,这样便可以对配置单元做一个统一的控制,就可以实现大家都非常熟悉的运行级别的概念。比如,想让系统进入图形化模式,需要运行许多服务和配置命令,这些操作都由一个个的配置单元表示,将所有的这些配置单元组合为一个目标(target),就表示需要将这些配置单元全部执行一遍,以便进入目标所代表的系统运行状态(例如:multi-user.target相当于在传统使用sysv的系统中运行级别5)。
使用命令systemctl list-unit-files --type target 命令可以查看当前系统上的所有target
1.更改系统主机名
hostnamectl set-hostname www.example.com
2.查看主机名状态
hostnamectl status
3.日志系统
1)输出本次启动后的所有日志信息 journalctl -b
2)显示固定时间段日志 journalctl --since=“2020-12-8 18:00:00”
4.语言设置
localectl list-locales列出当前系统支持所有语言
5.登录系统用户信息
loginctl list-sessions
6.启动耗时
systemd-analyze blame查看每个服务的启动耗时