一、Linux系统de引导过程
- CentOS 7系统中,由systemd掌管系统的初始化工作,系统的启动过程与之前的版本相比有了新的变化。
- Linux操作系统的引导过程:开机自检-----MBR引导-----GRUB菜单-----加载内核-----init进程初始化
1.1.、开机自检(BIOS)
- 服务器主机开机以后,将根据主板BIOS(Basic Input/Output System,基本输入输出系统)中的设置对CPU。内存。显卡,键盘等设备进行初步检测,并初始化部分硬件(加电自检)
- 检测成功后根据预设的启动顺序移交系统控制权,大多数时候会移交给本机硬盘(加载部分驱动)
1.2、MBR引导
- 当从本机硬盘中启动系统时,首先根据硬盘的第一个扇区中MBR(Master Boot Record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区,或者直接根据MBR记录中的引导信息调用启动菜单(CentOS7中为grub2)
- 注意:要安装双系统,则两个系统需要分别安装在不同的盘符当中
1.3、GRUB菜单
- 对于Linux系统来说,GRUB算是使用最广泛的多系统引导器程序
- 系统控制权传递给GRUB以后,将会显示启动菜单提供给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核
1.4、加载内核(Kernel)
- 系统引导器程序会从本地硬盘中加载内核以及内存文件系统(CentOS 7 中使用initramfs)
- Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度
- 内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程
- 内存文件系统initramfs 是经过gzip 的cpio归档,其中包含启动时所有必要的硬件内核模块,初始化脚本等。
- 内核放在/boot目录下,/boot目录相当于Windows的system32
1.5、init进程初始化
- 加载硬件驱动以及初始化进程(加载全部驱动)
- 由Linux内核加载运行/sbin/init程序,是系统中第一个进程
- PID(进程标记)号永远为1
1.6、systemd单元类型
-
在systemd中不同类型的systemd对象被统一称为单元,是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型
-
systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件
-
systemctl 命令用于管理各种类型的systemd单元,可以使用“systemctl -t help”命令来查询systemd支持的单元类型
单元类型 | 扩展名 | 说明 |
---|---|---|
Service | .service | 描述─个系统服务 |
Socket | .socket | 描述—个进程间通信的套接字(通信协议的载体) |
Device | .device | 描述—个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
Path | .path | 描述—个文件系统中文件或目录(path路径) |
Snapshot | .snapshot | 用于保存一个systemd的状态(snapshot快照) |
Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
Target | .target | 描述—组systemd的单元(target目标) |
二 、排除启动类故障
2.1、MBR扇区故障的原因
- 故障原因
病毒,木马等造成的破坏
不正确的分区操作,磁盘读写误操作 - 故障现象
找不到引导程序,启动中断
无法加载操作系统,开机后黑屏 - 解决思路
提前做好备份文件
以安装光盘引导进入急救模式
从备份文件中恢复
2.2、修复MBR扇区故障模拟
- 模拟环境
VMware软件,开centos 7,并为其添加一块硬盘(备份数据用的) - 恢复步骤
1.备份已损坏MBR扇区数据(实际中我们都是备份整个文件)
加一块磁盘做备份
第一步 : 将新添加的硬盘分区fdisk /dev/sdb
格式化mkfs -t xfs /dev/sdb1
挂载
...省略部分内容
[root@localhost ~]# mount /dev/sdb1 /test
[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% /test
[root@localhost ~]# dd if=/dev/sda of=/test/sda.mbr.bak bs=512 count=1 #将/dev/sda中的512k 备份到挂载点/test中
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000168125 秒,3.0 MB/秒
[root@localhost ~]# ls /test #查看是否备份成功
sda.mbr.bak
2.模拟故障
dd if=/dev/zero of=/dev/sda bs=512 count=1
3.重启后界面提示要安装CentOS 7系统,因为引导文件已经变成空白。
4.选择Troubleshooting,再选择Rescue a centos system进入急救模式。
5.等待加载后按如下图所示步骤进入内核模式
6.将有MBR扇区备份的/dev/sdb1挂载到/test目录下,然后将其写入/dev/sda的MBR扇区中
7.reboot重启发现可以正常启动系统了,成功解决MBR扇区故障。
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 '//重启'
2.重启后进入如下界面说明缺少grub.cfg文件,无法引导。
3.重启出现开机界面时按F2,进入后选择从光盘启动(光标移动到光盘选项,按“+”) 按F10保存
4.选择Troubleshooting,再选择Rescue a centos system进入急救模式。
5.等待加载后按如下步骤进入内核模式。
6.按如下步骤进行grub.cfg文件的恢复。
7.exit退出bash环境后reboot重启电脑,重启出现开机界面时按F2,进入后选择从光盘启动(光标移动到光盘选项,按“-” 还原) 按F10保存,就可以正常开机使用。
2.5、遗忘root用户密码
- 故障原因
遗忘root用户的密码 - 故障现象
无法进行需要root权限的管理操作
若没有其他可用账号,将无法登录系统 - 解决思路
进入急救模式,重设密码
2.6、重设root用户密码的实验
1:加载镜像系统后进入急救模式和上面的实验相同,
最后进入bash环境
chroot /mnt/sysimage
2:直接改密码
passwd root
输入密码
重启后登录root时就可以用新密码来登录了。
注意:如果出现重启后进入到CentOS 7安装界面,这时可以通过重启按F2进入BIOS,让系统从已经安装过的系统中启动。
三、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键 切换到选项(确定,取消)
空格键可以输入 * 或者取消 *
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.