欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

开机启动流程

程序员文章站 2022-07-04 09:31:28
[toc] 开机启动流程 linux启动流程 centos6 1.内核引导 2.运行init 首先读取/etc/inittab配置文件 在init中,涉及7个运行级别(runlevel) 查看当前运行的级别 临时切换运行级别 永久切换运行级别 查看开机自启服务 CentOS6忘记root密码或者调整 ......

目录

开机启动流程

linux启动流程

centos6

1.内核引导

2.运行init

首先读取/etc/inittab配置文件

在init中,涉及7个运行级别(runlevel)

运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有文件系统)
运行级别3:完全的多用户状态(有文件系统),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:x11控制台,登陆后进入图形gui模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

查看当前运行的级别

[root@zls ~]# runlevel
n 3

临时切换运行级别

[root@zls ~]# init 5
[root@zls ~]# runlevel
3 5

永久切换运行级别

[root@zls ~]# vim /etc/inittab
id:3:initdefault

查看开机自启服务

[root@zls ~]# chkconfig --list

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

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

netconsole      0:关 1:关 2:关 3:关 4:关 5:关 6:关
network         0:关 1:关 2:开 3:开 4:开 5:开 6:关
sysstat         0:关 1:关 2:开 3:开 4:关 5:开 6:关

centos6忘记root密码或者调整了运行级别为6

进入单用户级别

1.重启服务器,一直按“e”键,进入grub引导菜单的内核界面

2.在内核界面选择使用上下箭头移动并选择内核

3.内核选定之后再次按下“e”键进行编辑

4.在最后一行后面加上数字1(是单用户模式的运行级别)或者single然后回车

5.然后根据提示按下boot进行重新引导

3.系统初始化

在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。

它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。

l5:5:wait:/etc/rc.d/rc 5

这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。

而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。

/etc/rc.d/rc5.d/中的rc启动脚本通常是k或s开头的连接文件,对于以 s 开头的启动脚本,将以start参数来运行。

而如果发现存在相应的脚本也存在k打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。

这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。

至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"system services"来自行设定。

开机启动流程

4.建立终端

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

从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。

同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份。

5.用户登录系统

5.用户登录系统

一般来说,用户的登录方式有三种:

(1)命令行登录
(2)ssh登录
(3)图形界面登录

开机启动流程

对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入 kde、gnome 等窗口管理器。

而本文主要讲的还是文本方式登录的情况:当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。

linux 的账号验证程序是 login,login 会接收 mingetty 传来的用户名作为用户名参数。

然后 login 会对用户名进行分析:如果用户名不是 root,且存在 /etc/nologin 文件,login 将输出 nologin 文件的内容,然后退出。

这通常用来系统维护时防止非root用户登录。只有/etc/securetty中登记了的终端才允许 root 用户登录,如果不存在这个文件,则 root 用户可以在任何终端上登录。

/etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。

图形模式与文字模式的切换方式

linux预设提供了六个命令窗口终端机让我们来登录。

默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下ctrl + alt + f1 ~ f6 来切换它们。

如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按ctrl + alt + f1 ~ f6来进入其中一个命令窗口界面。

当你进入命令窗口界面后再返回图形界面只要按下ctrl + alt + f7 就回来了。

如果你用的vmware 虚拟机,命令窗口切换的快捷键为 alt + space + f1~f6. 如果你在图形界面下请按alt + shift + ctrl + f1~f6 切换至命令窗口。

开机启动流程

init程序的类型:

sysv:       init, centos 5之前, 配置文件: /etc/inittab。
upstart:    init,centos 6, 配置文件: /etc/inittab, /etc/init/*.conf。
systemd:    systemd, centos 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。

linux 关机

在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。

正确的关机流程为:sync > shutdown > reboot > halt

关机指令为:shutdown ,你可以man shutdown 来看一下帮助文档。

关机重启指令:

sync 将数据由内存同步到硬盘中。

shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:

shutdown –h 10 ‘this server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。

shutdown –h now 立马关机

shutdown –h 20:25 系统会在今天20:25关机

shutdown –h +10 十分钟后关机

shutdown –r now 系统立马重启

shutdown –r +10 系统十分钟后重启

reboot 就是重启,等同于 shutdown –r now

halt 关闭系统,等同于shutdown –h now 和 poweroff

总结:

不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中。

关机的命令有 shutdown –h now halt poweroff 和 init 0 , 重启系统的命令有 shutdown –r now reboot init 6。

开机启动流程

centos6启动流程](https://www.processon.com/view/link/5bffde0ae4b0f012f2382181)

开机启动流程


centos7

centos7中的运行级别:

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

运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户运行级别(没有文件系统)
运行级别3:完全的多用户状态(有文件系统),登陆后进入控制台命令行模式
运行级别4:多用户运行级别
运行级别5:x11控制台,登陆后进入图形gui模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

1.重启linux系统主机并出现引导界面时,按下键盘上的e键,进入内核编辑界面

开机启动流程

2.在linux16这行后面添加enforcing=0 init=/bin/bash,然后按下ctrl+x组合键来运行修改过的内核程序

开机启动流程

3.然后进入单用户模式界面。

#重新挂载/目录
bash-4.2# mount -o rw,remount /
#非交互设置root密码
bash-4.2# echo 1 |passwd --stdin root
#重新引导系统
bash-4.2# exec /sbin/init

开机启动流程

不需要重新挂载的方式

开机启动流程

如果centos7系统运行级别被设置成重启的级别...

开机启动流程

开机启动流程

1.挂载光盘镜像

开机启动流程

2.从bios启动

开机启动流程

3.进入bios设置从光盘启动

开机启动流程

4.按f10保存并退出

开机启动流程

5.进入救援模式

开机启动流程

6.选择救援模式

开机启动流程

7.选择继续

开机启动流程

接下来就可以...做你想做的事

生产场景1:

当系统坏了,无法登陆系统,但是需要把里面的数据拷贝出来,怎么办?

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:

修复mbr,主要出现在安装双系统的时候,后安装的系统把原来的mbr删除了,需要修复

1.破坏硬盘的前446字节,模拟mbr引导损坏,会发现重启无法启动系统

[root@zls ~]# dd < /dev/zero >/dev/sda bs=1 count=446
记录了446+0 的读入
记录了446+0 的写出
446字节(446 b)已复制,0.0011061 秒,403 kb/秒

2.重启,查看系统状态

开机启动流程

3.重启进入救援模式

开机启动流程

4.进入系统,获取root权限

开机启动流程

5.修复mbr引导,然后重启连接服务器
开机启动流程

#修复grub
bash-4.2# grub2-install /dev/sda

#退出
bash-4.2# exit

#重启进入系统
bash-4.2# reboot

生产场景3:

centos7 误删除grub文件,进行修复

1.模拟故障

#删除grub2
[root@zls ~]# rm -fr /boot/grub2/
#重启
[root@zls ~]# reboot

2.查看系统状态

开机启动流程

3.重启进入救援模式

开机启动流程

4.重新安mbr,加载grub2中的grub.cfg文件

开机启动流程

bash-4.2# chroot /mnt/sysimage
bash-4.2# grub2-install /dev/sda
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg

5.查看加载出来的文件

开机启动流程

bash-4.2# ls /boot/grub2

6.退出重启

bash-4.2# exit
sh-4.2# reboot

开机启动流程

满血复活...

systemd进程管理

systemd

systemd即为system daemon守护进程

systemd的目标是,为系统的启动和管理提供一套完整的解决方案。

mysql  mysqld  rsync  rsyncd    vsftp   ftp://   vsftpd  

systemd优势

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

systemd相关的配置文件

/usr/lib/systemd/system   #类似c6系统的启动脚本目录/etc/init.d/
/etc/systemd/system/   #类似c6系统的/etc/rc.d/rcn.d/
/etc/systemd/system/multi-user.target.wants/

systemd相关命令

systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令

system v init(6系统) systemctl命令(7系统) 作用
service crond start systemctl start crond.service 启动服务
service crond stop systemctl stop crond.service 停止服务
service crond restart systemctl restart crond.service 重启服务
service crond reload systemctl reload crond.service 重新加载配置(不终止服务)
service crond status systemctl status crond.servre 查看服务运行状态
systemctl is-active sshd.service 查看服务是否在运行中
systemctl mask crond.servre 禁止服务运行
systemctl unmask crond.servre 取消禁止服务运行

systemctl设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令

system v init(6系统) systemctl命令(7系统) 作用
chkconfig crond on systemctl enable crond.service 开机自动启动
chkconfig crond off systemctl disable crond.service 开机不自动启动
chkconfig --list systemctl list-unit-files 查看各个级别下服务的启动与禁用
chkconfig --list crond systemctl is-enabled crond.service 查看特定服务是否为开机自启动
chkconfig--add crond systemctl daemon-reload 创建新服务文件或者变更设置

systemctl服务状态说明

服务状态 状态说明
loaded 服务单元的配置文件已经被处理
active(running) 服务的一个或多个进程在运行中
active(exited) 一次性运行的服务成功被执行并退出(服务运行后完成任务,相关进程会自动退出)
active(waiting) 服务已经运行但在等待某个事件
inactive 服务没有在运行
enable 服务设定为开机运行
disabled 服务设定为开机不运行
static 服务不能被设定开机启动,但可以由其他服务启动该服务

网卡命名规则

[root@ server ~]# cd /etc/sysconfig/network-scripts/ #修改网卡配置文件
[root@ server network-scripts]# mv ifcfg-eno16777728 ifcfg-eth0
[root@ server network-scripts]# sed -i "s#ens33#eth0#g" ifcfg-eth0
[root@server~]# vim /etc/sysconfig/grub #grub添加kernel参数
grub_cmdline_linux="...net.ifnames=0 biosdevname=0 quiet"
[root@server~]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@server~]# reboot #重启系统生效

网卡配置文件

cat /etc/sysconfig/network-scripts/ifcfg-eth0
type=ethernet
bootproto=none
name=eth0
onboot=yes
ipaddr=10.0.0.150
prefix=24
gameway=10.0.0.254
dns1=10.0.0.254