[TOC]

开机启动流程

CentOS6 启动流程

开机流程分为5个阶段

内核引导

- BIOS自检,检测主板上的硬件设备,根据BIOS设置启动系统
- 读取/boot分区下,所有内核

运行init

inint程序类型:
    1.sysv:CentOS5之前使用的pid为1的进程
    2.Upstart:CentOS6使用的init进程
    3.Systemd:CentOS7

## 加载init,涉及到Linux系统中7个运行级别
0:关机运行级别
1:单用户运行级别
2:多用户运行级别,没有文件系统
3:多用户运行级别,有文件系统(命令行模式)
4:CentOS6和7,系统未使用,保留
5:多用户,图形化运行级别
6:重启运行级别

# 查看Linux系统当前的运行级别
[root@localhost ~]# runlevel 
N 3
# N代表在进入这个级别前,上一个级别是什么;3代表当前级别

# 运行init,会读取 /etc/inittab配置文件
# 读取配置文件中的默认运行级别
CentOS6
id:3:initdefault:

CentOS7
multi-user.target

# 启动init进程

系统初始化

## 根据运行级别中设置了开机启动服务来启动对应服务
CentOS6
[root@localhost ~]# chkconfig --list

CentOS7
systemctl list-unit-files
[root@localhost ~]# ll /etc/systemd/system/multi-user.target.wants/

建立终端

rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动。
init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

用户登录系统

## 用户登录分为三种
1.命令行登录
2.ssh登录
3.图形化界面登录

CentOS7 开机流程

1.BIOS(开机自检)
    - BIOS加电自检,检测主板上的硬件设备,根据BIOS设置启动系统
    - 读取/boot分区,所有内核文件
2.MBR(Master Boot Record 主引导记录)
3.GRUB2 Bootloader(引导菜单)
加载grub2菜单,选择要进入的系统
4.Kernel(内核引导)
读取/boot目录下所有内核文件
5.Systemd(不再使用init,改成了systemd)
    runlevel0.target -> poweroff.target
    runlevel1.target -> rescue.target
    runlevel2.target -> multi-user.target
    runlevel3.target -> multi-user.target
    runlevel4.target -> multi-user.target
    runlevel5.target -> graphical.target
    runlevel6.target -> reboot.target
6.Runlevel-Target(运行级别)

CentOS7 开机启动流程

image.png

CentOS6 开机启动流程

image.png

CentOS7进入单用户模式-忘记root密码

1.关机

halt
poweroff
shutdown -h now
init 0

2.开机

image.png

3.进入gurb2菜单

image.png

image.png

image.png

image.png

CentOS7进入单用户模式-修改默认运行级别

1.关机
2.进入grub2菜单
3.按e编辑grub2菜单的内核参数

image.png

image.png

救援模式

需要有系统盘,才可以进入救援模式
要进入安装系统的界面,才能进入救援模式

# 1.关机
# 2.将系统放入光驱中

image.png

# 3.进入BIOS
开机后,一直按F2,即可进入救援模式

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

案例1—当系统损坏,无法登录系统,但是需要把里面的数据拷贝出来,怎么办?

# 1.根据上述步骤进入救援模式并获取root的环境
# 2.输入命令
bash-4.2# mkfs.xfs -f /dev/sdc
bash-4.2# mkdir /data
bash-4.2# mount /dev/sdc /data
bash-4.2# cp -a /raid0 /data
bash-4.2# umount /dev/sdb

案例2—损坏系统扇区(前512字节)

## 破坏硬盘的钱446字节,模拟MBR引导损坏,会发现重启无法启动系统
[root@localhost ~]# dd </dev/zero >/dev/sda bs=1 count=446
446+0 records in
446+0 records out
446 bytes (446 B) copied, 0.00026418 s, 1.7 MB/s

image.png

## 扇区损坏需要进入救援模式修复扇区
## 根据上述步骤进入到救援模式

image.png

案例3—修复grub菜单(CentOS7 误删除grub文件,进行修复)

## 模拟故障
[root@localhost ~]# rm -fr /boot/grub2/
[root@localhost ~]# reboot

image.png

## 需要进入救援模式进行修复

image.png

# 1.获取root环境
chroot /mnt/sysimage
# 2.修复 /dev/sda 第一块盘
grub2-install /dev/sda
# 3.重置grub.cfg配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
# 4.查看 /boot/grub2是否修复
ls /boot/grub2
# 5.退出root环境
exit
# 6.重启
reboot

systemd管理服务

image.png

systemd的优势

1.最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15...)
2.CentOS7 支持开机并行启动服务,显著提高开机启动效率
3.CentOS7关机只关闭正在运行的服务,而CentOS6,全部都关闭一次。
4.CentOS7服务的启动与停止不在使用脚本进行管理,也就是/etc/init.d下不在有脚本。
5.CentOS7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程。

systemd相关配置文件

## 系统中所有服务启动的脚本存放路径
# CentOS 6
/etc/init.d/

# CentOS 7
/usr/lib/systemd/system/

##  系统运行级别相关目录
# CentOS 6
/etc/rc*.d

# CentOS 7
/etc/systemd/system

## 默认运行级别需要开机自启的服务存放目录
# CentOS 6
/etc/rc3.d/

# CentOS 7
/etc/systemd/system/multi-user.target.wants/

systemd管理服务的命令

System V init(6系统) systemctl(7系统) 作用
service 服务名 start systemctl start 服务名 启动服务
service 服务名 stop systemctl stop 服务名 停止服务
service 服务名 restart systemctl restart 服务名 重启服务
service 服务名 reload systemctl reload 服务名 重新加载配置(不终止服务)
service 服务名 status systemctl status 服务名 检查服务的启动状态
systemctl is-active 服务名 查看服务是否在运行中
systemctl mask 服务名 禁止服务运行
systemctl unmask 服务名 取消禁止服务运行

开机自启服务管理

System V init(6系统) systemctl(7系统) 作用
chkconfig systemctl list-unit-files 查看开机自启的服务
chkconfig 服务名 on systemctl enable 服务名 设置开机自启动
chkconfig 服务名 off systemctl disable 服务名 关闭开机自启
chkconfig --list 服务名 systemctl is-enabled 服务名 查看指定服务是否开机自启
systemctl daemon-reload 如果启动脚本被修改,重新加载启动脚本