开机启动流程

day32开机启动流程


CentOS6启动流程

1.内核引导

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

2.运行init

init:
sysV:CentOS5之前使用的pid为1的进程
Upstart:CentOS6使用的init进程 
Systemd:CentOS7

# 加载init,涉及到Linux系统中7个运行级别 
# 查看Linux系统当前的运行级别(前面的数字是上一个运行级别)
[root@localhost ~]# runlevel
5 3

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

# 运行init,会读取 /etc/inittab配置文件
# 读取配置文件中的默认运行级别 
# 获取当前系统的运行级别
C6
id:3:initdefault:

C7
multi-user.target

启动init进程

3.系统初始化

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

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

4.建立终端

5.用户登录系统


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进入单用户模式-忘记root密码

1.关机命令

halt
poweroff
shutdown -h now 
init 0

2.开机

3.进入gurb2菜单

selinux 
vim /etc/sysconfig/selinux
selinux=enforcing ==> selinux=disabled
在linux16行末,写入:
enforcing=0 init=/bin/bash
按Ctrl + x

4.修改密码

无法直接修改密码,因为当前/目录是只读状态
# 重新挂载/
mount -o rw,remount /

# 修改密码
passwd root
echo 2 |passwd --stdin root

# 重新加载init
exec /sbin/init

不需要重新挂载 / 的方法

将Linux16行中的ro 改成rw

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

1.关机

2.进入grub2菜单

3.按e编辑grub2菜单的内核参数

Linux16行中 ro改成rw
行末写:rd.break
修改后,按Ctrl + x

# 1.重新挂载root权限目录
mount -o rw,remount /sysroot

# 2.获取root权限
chroot /sysroot 

# 3.修改默认运行级别
systemctl set-default multi-user.target 

# 4.退出
exit 

# 5.重启
reboot

救援模式


需要有系统盘,才可以进入救援模式

要进入安装系统的界面,才能进入救援模式

# 1.关机
init 0 
halt 
poweroff 
shutdown -h now 

# 2.将系统盘放入光驱中

# 3.进入BIOS
将系统启动的顺序,改为从光盘启动 
方法一: 开机时,不断按f2
方法二: 在电源里面点击,进入固件

选择boot

把CD-ROM启动顺序排到第一个(按小键盘的+号)

按f10保存并退出 ->选择yes

进入安装系统的界面

进入救援模式

# 1.先输入回车
# 2.获取root的环境(root权限)
chroot /mnt/sysimage

案例1-损坏系统扇区(前512字节)

dd </dev/zero >/dev/sda bs=1 count=446

扇区损坏,需要进入救援模式修复扇区

# 1.修复扇区 
grub2-install /dev/sda

# 2.退出root环境 
exit 

# 3.重启
reboot

修复grub菜单

# 1.修复扇区 
grub2-install /dev/sda

# 1.5 重置grub.cfg配置文件 
grub2-mkconfig -o /boot/grub2/grub.cfg 

# 2.退出root环境 
exit 

# 3.重启
reboot

systemd管理服务


# systemd的由来

CentOS5 是启动速度最慢的,串行启动过程,无论进程相互之间有无依赖关系。

CentOS6 相对启动速度有所改进,有依赖的进程之间依次启动而其他没有依赖关系的则并行启动。

CentOS7 所有进程无论有无依赖关系,都并行启动,当然有很多时候进程并没有真正的启动而是只有一个信号或者说是标记,在真正利用的时候,才会真正启动。

# Sysv init:程序一步一步运行,即便他们之间没有依赖关系
# Upstart: 程序并行运行,但是如果有依赖关系时还是一步一步执行
# systemd:所以程序并行运行,如果程序之间有依赖,被依赖的程序,发一个已经成功运行的信号给所依赖的程序,其实            自己正在启动过程中

systemd的优势

1.最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15...)

2.CentOS7 支持开机并行启动服务,显著提高开机启动效率

3.CentOS7关机只关闭正在运行的服务,而CentOS6,全部都关闭一次。

4.CentOS7服务的启动与停止不在使用脚本进行管理,也就是/etc/init.d下不在有脚本。

5.CentOS7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程。

systemd相关配置文件

# 系统中所有服务启动的脚本存放路径
C7:
/usr/lib/systemd/system/ 
nginx.service 

C6: 
/etc/init.d/

# 系统运行级别相关目录 
C7:
/etc/systemd/system

C6:
[root@localhost ~]# ll /etc/rc*.d-d 
lrwxrwxrwx. 1 root root 10 May 7 10:46 /etc/rc0.d -> rc.d/rc0.d
lrwxrwxrwx. 1 root root 10 May 7 10:46 /etc/rc1.d -> rc.d/rc1.d 
lrwxrwxrwx. 1 root root 10 May 7 10:46 /etc/rc2.d -> rc.d/rc2.d
lrwxrwxrwx. 1 root root 10 May 7 10:46 /etc/rc3.d -> rc.d/rc3.d 
lrwxrwxrwx. 1 root root 10 May 7 10:46 /etc/rc4.d -> rc.d/rc4.d
lrwxrwxrwx. 1 root root 10 May 7 10:46 /etc/rc5.d -> rc.d/rc5.d 
lrwxrwxrwx. 1 root root 10 May 7 10:46 /etc/rc6.d -> rc.d/rc6.d 

# 默认运行级别需要开机自启的服务存放目录
C7:
/etc/systemd/system/multi-user.target.wants/

auditd.service -> /usr/lib/systemd/system/auditd.service 
crond.service -> /usr/lib/systemd/system/crond.service 
irqbalance.service -> /usr/lib/systemd/system/irqbalance.service
NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service 
nfs-client.target -> /usr/lib/systemd/system/nfs-client.target
nginx.service -> /usr/lib/systemd/system/nginx.service
postfix.service -> /usr/lib/systemd/system/postfix.service
remote-fs.target -> /usr/lib/systemd/system/remote-fs.target
rhel-configure.service -> /usr/lib/systemd/system/rhel-configure.service
rpcbind.service -> /usr/lib/systemd/system/rpcbind.service 
rsyslog.service -> /usr/lib/systemd/system/rsyslog.service
sshd.service -> /usr/lib/systemd/system/sshd.service
sysstat.service -> /usr/lib/systemd/system/sysstat.service
tuned.service -> /usr/lib/systemd/system/tuned.service
vmtoolsd.service -> /usr/lib/systemd/system/vmtoolsd.service 

C6: 
/etc/rc3.d/ 
K01smartd -> ../init.d/smartd 
K10psacct -> ../init.d/psacct
K10saslauthd -> ../init.d/saslauthd
K15svnserve -> ../init.d/svnserve 
K50netconsole -> ../init.d/netconsole 
K74ntpd -> ../init.d/ntpd
K75ntpdate -> ../init.d/ntpdate
K75quota_nld -> ../init.d/quota_nld
K87restorecond -> ../init.d/restorecond
K89rdisc -> ../init.d/rdisc
K99rngd -> ../init.d/rngd
S01sysstat -> ../init.d/sysstat
S02lvm2-monitor -> ../init.d/lvm2-monitor
S08ip6tables -> ../init.d/ip6tables
S08iptables -> ../init.d/iptables 
S10network -> ../init.d/network 
S11auditd -> ../init.d/auditd
S12rsyslog -> ../init.d/rsyslog
S13cpuspeed -> ../init.d/cpuspeed 
S13irqbalance -> ../init.d/irqbalance
S15mdmonitor -> ../init.d/mdmonitor
S20kdump -> ../init.d/kdump
S22messagebus -> ../init.d/messagebus
S25blk-availability -> ../init.d/blk-availability
S25netfs -> ../init.d/netfs
S26acpid -> ../init.d/acpid 
S26haldaemon -> ../init.d/haldaemon
systemd管理服务的命令

systemd管理服务的命令

# 1.启动服务
C6:
/etc/init.d/服务名 start
service 服务名 start

C7: 
systemctl start 服务名 
service 服务名 start

# 2.停止服务
C6:
/etc/init.d/服务名 stop 
service 服务名 stop

C7:
systemctl stop 服务名
service 服务名 stop

# 3.服务重启
C6: 
/etc/init.d/服务名 restart
service 服务名 restart

C7: 
systemctl restart 服务名 
service 服务名 restart 

# 4.服务重新加载
C6:
/etc/init.d/服务名reload
service 服务名 reload 

C7: 
systemctl reload 服务名 
service 服务名 reload 

# 5.检查服务的启动状态
C6: 
[root@localhost ~]# /etc/init.d/sshd status
openssh-daemon (pid 1508) is running...

C7: 
systemctl status sshd

# 6.判断服务是否在运行
[root@localhost ~]# systemctl is-active sshd
active
[root@localhost ~]# systemctl stop sshd 
[root@localhost ~]# systemctl is-active sshd
inactive

# 7.禁用某个服务
[root@localhost ~]# systemctl mask crond 

# 8.取消禁用某个服务 
[root@localhost ~]# systemctl unmask crond

开机自启服务管理

# 1.查看开机自启的服务有哪些
C6:
[root@localhost ~]# chkconfig

C7:
[root@localhost ~]# systemctl list-unit-files

# 2.设置开机自启动
C6:
[root@localhost ~]# chkconfig sshd on (默认 2 3 4 5 运行级别都自启) 
[root@localhost ~]# chkconfig |grep sshd 
sshd         0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@localhost ~]# chkconfig sshd on 
[root@localhost ~]# chkconfig |grep sshd
sshd         0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@localhost ~]# chkconfig sshd off
[root@localhost ~]# chkconfig |grep sshd 
sshd         0:off   1:off   2:off   3:off   4:off   5:off   6:off 
[root@localhost ~]# chkconfig sshd --level 3 on
[root@localhost ~]# chkconfig |grep sshd 
sshd         0:off   1:off   2:off   3:on    4:off   5:off   6:off 

C7:
[root@localhost ~]# systemctl enable sshd

# 3.关闭开机自启 
C6:
[root@localhost ~]# chkconfig sshd off

C7: 
[root@localhost ~]# systemctl disable sshd

# 4.查看指定服务是否开机自启
C6:
[root@localhost ~]# chkconfig --list sshd 
sshd        0:off   1:off   2:off   3:on   4:off   5:off   6:off 

C7:
[root@localhost ~]# systemctl is-enabled nginx
enabled:允许开机自启 
disabled:不允许开机自启

# 7.如果启动脚本被修改,重新加载启动脚本
C7: 
systemctl daemon-reload

posted @   hjx、贤  阅读(336)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示