31.Centos7开机流程

centos7 系统启动过程及相关配置文件

centos7 系统启动过程 CentOS7 引导顺序

  1. UEFi 或 BIOS 初始化,运行 POST 开机自检

  2.  选择启动设备
    
  3.  引导装载程序, centos7 是 grub2
    
  4.  加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
    
  5.  加载内核选项  vmlinuz-3.10.0-693.el7.x86_64
    
  6.  加载 initramfs 初始化伪文件系统
    
  7.  内核初始化,centos7 使用 systemd 代替 init
    
  8.  执行 initrd.target所有单元,包括挂载/etc/fstab
    
  9.  从 initramfs 根文件系统切换到磁盘根目录
    
  10. systemd 执行默认 target 配置,配置文件/etc/systemd/system/default.target

  11. systemd 执行 sysinit.target初始化系统及 basic.target准备操作系统

  12. systemd 启动 multi-user.target下的本机与服务器服务

  13. systemd 执行 multi-user.target 下的/etc/rc.d/rc.local

  14. Systemd 执行 multi-user.target 下的 getty.target及登录服务

  15. systemd 执行 graphical 需要的服务

centos7 启动过程:
centos7.png

[root@exercise1 ~]# find /boot/ -name *img*
/boot/grub2/i386-pc/core.img
/boot/grub2/i386-pc/boot.img
/boot/initrd-plymouth.img
/boot/initramfs-0-rescue-fff9bf659e8a49d7b721bafff48235b5.img
/boot/initramfs-3.10.0-693.el7.x86_64.img
[root@exercise1 ~]# 

Systemd 运行原理-了解一下

Systemd 概述:systemd即为 system daemon [ˈdi:mən] 守护进程,是 linux 下的一种 init 软件,开发目 标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低 Shell的系统开销的效果,最终代替现在常用的 System V 不 BSD 风格 init 程序。
不多数发行版使用的 System V 风格 init 相比,
systemd 采用了以下新技术:

(1) 采用Socket 激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;
(2) 用 Cgroups 代替 PID 来追踪进程,以此即使是两 次 fork 之后生成的守护进程也不会脱离 systemd的控制。
unit 对象:unit 表示不同类型的 systemd 对象,通过配置文件进行标识和配置;文件中主要 包含了系统服务、 监听 socket、保存的系统快照以及其它不 init 相关的信息

Systemd 配置文件:

  • /usr/lib/systemd/system/#这个目录存储每个服务的启动脚本,类似于之前 的/etc/init.d/(centos6)

  • /run/systemd/system/#系统执行过程中所产生的服务脚本,比上面目录优先运行

  • /etc/systemd/system/#管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx 类的功能, 比上面目录优先运行

总结:centos5-6-7 3 个系统版本启动过程:
CentOS 5: SysV init ; CentOS 6: Upstart ;CentOS 7: Systemd
centos7-2.png

管理系统服务

命令: systemctl COMMAND name.service

centOS6CentOS7
启动service name startsystemctl start name.service
停止service name stopsystemctl stop name.service
重启service name restartsystemctl restart name.service
状态service name statussystemctl status name.service
重载或重启服务(先加载,再启动)-systemctl reload-or-restart name.service

chkconfig 命令的对应关系

centOS6CentOS7
设定某服务开机自启chkconfig name onsystemctl enable name.service
设定某服务开机禁止启动chkconfig name offsystemctl disable name.service
查看所有服务的开机自启状态chkconfig --listsystemctl list-unit-files --type service
用来列出该服务在哪些运行级别下启用和禁用chkconfig sshd –listls /etc/systemd/system/*.wants/sshd.service
查看服务是否开机自启-systemctl is-enabled name.service

服务状态

[root@exercise1 ~]# systemctl list-unit-files   #显示状态
  • loaded:Unit 配置文件已处理

  • active(running):一次或多次持续处理的运行

  • active(exited):成功完成一次性的配置

  • active(waiting):运行中,等待一个事件

  • inactive:不运行

  • enabled:开机启动

  • disabled:开机不启动

  • static:开机不启动,但可被另一个启用的服务激活

实战:修改第三方软件的启动方式
方法1:修改nginx为systemctl启动

#灵活变动
[root@exercise1 ~]# vim /usr/lib/systemd/system/nginx.service   #配置文件内容

[Unit]                                          
Description=nginx 
After=network.target  

[Service] 
Type=forking 
ExecStart=/usr/local/nginx/sbin/nginx 
ExecReload=/usr/local/nginx/sbin/nginx -s reload 
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true  
 
[Install] 
WantedBy=multi-user.target

[Unit]:服务的说明
Description:描述服务
After:描述服务类别

[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

注意: 对于新创建的service 文件,或者修改了的service文件,要通知systemd 重载此配置文件,而后可以选择重启

[root@exercise1 ~]# systemctl daemon-reload

方法2:

[root@exercise1 ~]# cd /usr/sbin 或 cd /usr/bin
[root@exercise1 ~]# ln -s /usr/local/nginx/sbin/nginx  nginx

方法3:
[root@home sbin]# cd /etc/init.d
[root@home init.d]# ln -s /usr/local/nginx/sbin/nginx nginx

方法4:
[root@master opt]# alias abc=/usr/local/nginx/sbin/nginx
[root@master opt]# abc
[root@master opt]# ps -ef |grep nginx

方法5:
临时设置:
[root@master opt]# PATH=/usr/local/nginx/sbin/nginx/:KaTeX parse error: Expected 'EOF', got '#' at position 29: …oot@master opt]#̲ echo "export P…PATH" >>/etc/profile
[root@master opt]# nginx
[root@master opt]# ps -ef |grep nginx

方法6:
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
chkconfig [–add][–del][–list][系统服务] 或 chkconfig [–level <等级代号>][系统服务][on/off/reset]

参数:
–add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
–del  删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
–level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕。
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
chkconfig –list [name]:显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。
chkconfig –add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。
chkconfig –del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。
chkconfig [–level levels] name:设置某一服务在指定的运行级是被启动,停止还是重置
例:
chkconfig --list #列出所有的系统服务启动情况
chkconfig --list httpd #列出httpd服务设置情况
chkconfig --add httpd #增加httpd服务
chkconfig --del httpd #删除httpd服务
chkconfig --level 35 httpd on #设定httpd在等级3和5为开机运行服务,–level 35表示操作只在等级3和5执行,on表示启动,off表示关闭
chkconfig httpd on #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级
chkconfig httpd off #设定mysqld在各等级为off

如何增加一个服务:

1.服务脚本必须存放在/etc/init.d/目录下;
每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。
第一行告诉chkconfig默认启动的运行级以及启动和停止的优先级。如果某服务默认不在任何运行级启动,那么使用 – 代替运行级。
第二行对服务进行描述,可以用\ 跨行注释。
例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3OTvSz59-1672670916655)(file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\1.png)]

2.添加执行权限
2.chkconfig –add servicename
在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;
3.chkconfig –level 35 httpd on
修改服务的默认启动等级

例:
vim /etc/init.d/nginx
官方脚本如下链接:
https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/
注:
nginx=”/usr/sbin/nginx” 修改成nginx执行主程序的路径。
NGINX_CONF_FILE=”/etc/nginx/nginx.conf” 修改成配置文件的路径。

运行级别

centos6 下 Linux 运行级别 0-6 的各自含义

0: 关机模式
1 :单用户模式 ,用于破解 root 密码
2 :无网络,支持的多用户模式
3 :有网络支持的多用户模式(一般叫字符界面,工作中最长使用的模式)
4 :保留,未使用
5 :有网络支持,支持图形界面,支持的多用户模式(图形界面)
6 :重新引导系统,及重启

可以在不同级别下,设置服务是否随系统启动运行。在 centOS7 上运行级别的含义已经和之前不同了,已由.target 来代替运行级别,我们可以称 target 为目标态,我们可以通过 target 定制更符合我们工作运行环境。

[root@exercise1 ~]# ls /usr/lib/systemd/system/*.target   #查看我们的机器上有多少个 target

centos7-3.png

[root@exercise1 ~]# ls /usr/lib/systemd/system/*.target | grep runlevel

centos7-4.png
注: 发现在 runlevel2-4 都是调用 multi-user.target这个 unit。所以在 centos7 上runlevel2-4 是一个意思

67
initsystemd
==============================================
Traditionalrunlevel|New target name Symbolically linked to…
Runlevel0|runlevel0.target -> poweroff.target
Runlevel1|runlevel1.target -> rescue.target
Runlevel2|runlevel2.target -> multi-user.target
Runlevel3|runlevel3.target -> multi-user.target
Runlevel4|runlevel4.target -> multi-user.target
Runlevel5|runlevel5.target -> graphical.target
Runlevel6|runlevel6.target -> reboot.target
=====================================================

Init0 -> systemctl poweroff关机
Init1 -> systemctl isolate rescue.target单用户
Init3 -> systemctl isolate multi-user.target字符界面
Init5 -> systemctl isolate graphical.target图形化
Init6 -> systemctl reboot重启

[root@exercise1 ~]# systemctl list-unit-files --type service   # 查看所有 service 的状态


​ [root@exercise1 ~]# systemctl list-unit-files --type target #查看所有 target 的状态


​ [root@exercise1 ~]# systemctl list-dependencies runlevel3.target #查看 3 级别Unit 的所有依赖

Unit 之间存在依赖关系:A 依赖于 B ,就意味着 Systemd 在启动 A 的时候,同时会去启动 B。也可以理解也 3 运行级别下都开启哪些服务
在 centOS7 上所谓的目标态,其实就是由各种指定的服务和基础 target 组合而成的。
总结:centos6 和 7 运行级别的变化


运行级别的切换

1、在 centOS6 上,我们切换级别使用init ,在 centOS7 上虽然也能使用,但是调用的不再是原来的程序了。
centos7 使用 systemctl isolate name.target 来切换 target

例 1 :在 centos6/7 下切换到字符界面

[root@exercise1 ~]# init 3     #切换到字符界面
[root@exercise1 ~]# init 5     #切换到图形界面

例 2:centos7 切换到字符界面

[root@exercise1 ~]# systemctl isolate multi-user.target 

或:

[root@exercise1 ~]# systemctl isolate runlevel3.target

2、centos7 设置默认系统默认启动级别
systemctl set-default name.target来修改我们的目标态
看一下我们的默认目标态究竟为何物

[root@exercise1 ~]# ll /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 37 1月   9 09:31 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
[root@exercise1 ~]# 

centos7-5.png
注:它其实就是创建了一个软链接到指定的 target 上去了

例 1 :默认系统启动使用 3 级别字符界面

[root@exercise1 ~]# systemctl set-default multi-user.target 
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to 
/usr/lib/systemd/system/multi-user.target.


​ [root@exercise1 ~]# ll /etc/systemd/system/default.target
​ lrwxrwxrwx. 1 root root 37 1月 9 09:31 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target

例 2 :默认系统启动使用 5 级别图形界面

[root@exercise1 ~]# systemctl set-default   graphical.target

grub2 和 grub 区别-了解

在 centOS6 上,我们的 grub 文件是/boot/grub/grub.conf
在 centOS7 使用 grub2 ,配置文件改成/boot/grub2/grub.cfg了,但是功能还是大致一样的都是用于加载 内核的,不过在 centOS7 上设置默认启动项发生了一些变化。

互动:如果我们的系统中有两个内核?改变默认启动的内核顺序?(了解)

例 1: centos7 修改内核启动顺序

[root@exercise1 ~]# vim /etc/default/grub
GRUB_TIMEOUT=5#开机时 grub 默认 5 秒后启动内核
GRUB_DISTRIBUTOR=“ ( s e d ′ s , r e l e a s e . ∗ (sed 's, release .* (seds,release.,g’ /etc/system-release)”
改:GRUB_DEFAULT= saved
为:GRUB_DEFAULT= 1#这里我们改成 1
,0 代表第一个内核,1 代表第二个,以此类推。
UB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT=“console”
GRUB_CMDLINE_LINUX=“crashkernel=auto rhgb quiet net.ifnames=0”
GRUB DISABLE RECOVERY=“true”

[root@exercise1 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg #修改完成后,并没有立即生效,使 用此命令来生成 grub.cfg 文件,我们在下次启动的时候就会默认选择新的默认内核。

[root@exercise1 ~]# uname -r#查当前系统内核
3.10.0-693.2.2.el7 .x86 64
[root@exercise1 ~]# reboot
[root@exercise1 ~]# uname -r#重启成功后, 发现加载的内核变了
3.10.0-693.el7.x86_64
[root@exercise1 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)#查看liunx版本

例 2: centos6 修改内核启动顺序-了解

[root@exercise1 ~]# vim /boot/grub/grub.conf
改:10 default=0
为:10 default=1
[root@exercise1 ~]# reboot

centos7-6.png

破译root密码<进入到单用户模式>:
进入到grub2启动屏显时,按e进入编辑模式
在rootUUID号最后加init=/bin/sh
ctrl+x ----按照修改的参数启动服务
启动到单用户模式
mount -o remount,rw / 挂载根
passwd root —修改root密码
如果系统启动了selinux限制,那么需要执行
touch /.autorelabel
运行exec /sbin/init —来正常启动
或者exec /sbin/reboot

---------------------------------
或者使用rd.break重置密码
1、启动时按e
2、找到以linux16开头的在结尾处输入 rd.break
3、ctrl+x
4、mount -o remount,rw /sysroot/
5、chroot /sysroot/
6、echo redhat | passwd --stdin root
7、touch /.autorelabel(如果开启selinux)
8、ctrl+d 退出
9、reboot

17.3 实战-加密 grub 防止黑客通过单用户系统破解 root 密码
实战场景:如何防止别人恶意通过单用户系统破解 root 密码,进入系统窃取数据?
给 grub 加密,不让别人通过 grub 进入单用户。

17.3.1 基于 centos6 进行 grub 加密
[root@base ~]# grub-md5-crypt Password: 123456
Retype password: 123456
1 1 1oaqo5$3d/cmTosm68jTw6o1wCu31
[root@localhost init]# vim /boot/grub/grub.conf
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5 1 1 1oaqo5$3d/cmTosm68jTw6o1wCu31
title Red Hat Enterprise Linux (2.6.32-220.el6.x86_64)
root (hd0,0)
如图:

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\1.png

重启测试:
编辑 grub 时,需要按下 p 键,然后输入密码:123456
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\2.png

17.3.2 基于 centos7 进行 grub 加密 生成密码
[root@base ~]# grub2-mkpasswd-pbkdf2
输入口令: 123456
Reenter password: 123456
PBKDF2 hash of your password is
grub.pbkdf2.sha512.10000.8F355BAB512AFB7B8C990A1FEB887B8F2F3F1C54467E9B9F0535F2268E
1FFC5F4E8D33F7633D7FBEC25B2039C6D8B3226A90528D4883AB9B99E391A4965D069F.DDE99269
3BE2C09FFEEC1149120B6B84DBAB933DE6CF7BFF718E1DDC858AB73EE32CFF45EB7F06AC45AA679
2E91C4CD09E2B445FC288C47E79F537DBBABAD756

[root@base ~]# vim /etc/grub.d/00_header #在最后后面添加如下内容,注 mk 这个用户名可
以换成自己的用户名
cat <<EOF
set superusers=‘mk’
password_ pbkdf2 mk
grub.pbkdf2.sha512.10000.8F355BAB512AFB7B8C990A1FEB887B8F2F3F1C54467E9B9F0535F2268E
1FFC5F4E8D33F7633D7FBEC25B2039C6D8B3226A90528D4883AB9B99E391A4965D069F.DDE99269
3BE2C09FFEEC1149120B6B84DBAB933DE6CF7BFF718E1DDC858AB73EE32CFF45EB7F06AC45AA679
2E91C4CD09E2B445FC288C47E79F537DBBABAD756
EOF
如下图:
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\3.png

[root@base ~]# grub2-mkconfig -o /boot/grub2/grub.cfg #更新 grub 信息
重启验证:
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\4.png
输入用户名和密码
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\5.png
看到可以进入 GRUB 菜单,就证明你加密成功了

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\6.png
按 ctrl-x 开始启动

17.4 实战-通过 liveCD 进入救援模式-重装 grub 修复损坏的系统
实战:使用系统光盘进入救援模式拯救坏掉的系统
实战场景:当系统坏了,进不去了,还需要把里面的数据复制出来,怎么办?
可以进入救援模式拷贝数据
17.4.1 基于 6 版本系统进入救援模式
修改 BIOS 启动顺序,直接以光盘引导系统
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\7.png
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\8.png
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\9.png
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\10.png
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\11.png

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\12.png

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\13.png
ramfs : 内存文件系统
chroot /mnt/sysimage # 切换文件系统根
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\14.png

17.4.2 实战-当 MBR 引导记录损坏后-重装 grub 进行修复
使用场景: 修复 MBR ,主要出现在安装双系统时,后安装的系统把原来系统的 MBR 删除了,需要修复。
第一步:在 centOS7 下破坏硬盘的前 446 字节:
[root@CT731 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=446 446+0 records in
446+0 records in
446+0 records out
446 bytes (446 B) copied,0.000758682 s,588 kB/s
第二步:将 centos7 系统光盘挂载到虚拟机光驱上,,重启计算机,修改 BIOS 引导顺序,让光盘启动。
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\15.png
进入启动的界面

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\16.png
上面有三项,我们选择第三项进入 troubleshooting 故障排除界面 ,进入第三项后,点击第二项,进入救援 模式的 centos 的系统
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\17.png

然后我们进入如下模式,选择 1,继续进行,接下来,我们就会进入到一个 shell 模式中,需要切换根目录 ,进 行系统修复:

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\18.png
先退一下,再重启,修复完成
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\19.png

17.4.3 实战-在 centOS7 下误删除 grub 文件进行修复
第一步:删除 grub2
[root@base ~]# rm -rf /boot/grub2
第二步,重启计算机
[root@base ~]# reboot
进入如下界面:

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\20.png
现在开始解决 grub
重启系统,按 Esc ,进入光盘救援模式,选择第三项,进入光盘救援(前提是挂载光盘)

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\21.png

使用 live cd 进入救援模式后:
第一步:切根

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\22.png
然后执行命令
grub2-install
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\23.png
下图中,我们可以看到在 grub2 文件夹中,还没有 grub.cfg 文件,接下来,我们需要生成配置文件:
进入到 grub2 下,
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\24.png
exit 然后,重启电脑:

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\25.png
修改 BIOS 引导,让硬盘做第一引导

注: centos 系统下载链接 file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\26.pnghttp://vault.centos.org/ 大家可以在这里下载 centos6 相关的系统。

实例一之MBR挂了
\1. 开机启动,发现MBR挂了,但分区表还在

下面将MBR弄挂,然后重启<模拟故障>
------if in file 从哪个文件读取数据
------of out file 写入到哪个文件
------bs 数据大小 默认单位byte
------count 指定bs的数量
#破坏mbr引导 MBR:448+64分区表数据=512bytes
#dd if=/dev/zero of=/dev/sda bs=100 count=1

注意:配置selinux不生效
[root@uplooking system]# setenforce 0
setenforce: SELinux is disabled
[root@uplooking system]# getenforce
Disabled

下面配置虚拟机cd/dvd启用ISO镜像
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\27.png

在虚拟启动的下拉菜单选择—打开电源进入固件设置—进入BIOS设置
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\28.png读/boot - 读内核 - 读驱动 - 读根/

\2. 于是开机进rescue模式用grub2-install找回mbr
用光盘或者网络引导进入救援模式
选择Troubleshooting,然后 选择Rescure a Red Hat Enterprise Linux system

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\29.png

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\30.png

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\31.png

这里是提示,你原来的linux系统的硬盘被挂载到了/mnt/sysimage下面

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\32.png

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\33.png

**Sh-4.2#**chroot /mnt/sysimage/ #将根目录切换到硬盘
**Bash-4.2#**grub2-install /dev/vda #使用grub2-install恢复,可以看到sh变成了bash

2次exit重启(注意取消从光盘启动)

\3. 因此正常开机
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\34.png

##########################################################
实例二之MBR挂了2
网络配置参照实例一
\1. 使用DD将MBR备份出来
#dd if=/dev/sda of=mbr.bak bs=512 count=1
#复制到远程主机
#scp mbr.bak 172.19.18.151:/tmp

使用dd将mbr弄挂
#dd if=/dev/zero of=/dev/sda bs=512 count=1

\2. 开机启动,发现MBR挂了,分区表也没了
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\35.png

\3. 于是进rescue模式,恢复以前备份的MBR文件
增加光盘,请查看实例一

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\36.png读/boot - 读内核 - 读驱动 - 读根/
上图可得,分区表也没了

因此直接配置IP地址,然后从备份服务器下载以前备份的mbr
#ifconfig ens33 172.19.18.153
#ping 172.19.18.151(备份服务器)可ping通,于是通过scp获取

#scp 172.19.18.151:/tmp/mbr.bak /
#dd if=/mbr.bak of=/dev/sda #恢复mbr

2次exit重启
记得将光盘取消(请看实例一)
\4. 因此正常开机
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\37.png

#######################################################

实例三之GRUB2挂了1

挂载光盘请看实例一

1.将/boot/grub2/grub.cfg删除

[root@uplooking system]# cd /boot/grub2/
[root@uplooking grub2]# ls
device.map fonts grub.cfg grubenv i386-pc locale
[root@uplooking grub2]# mv grub.cfg grub.cfg.bak

2只有grub界面,手动指定,然后进入系统

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\38.png

root=(hd0,msdos1)指定boot分区
#指定内核 与 ”/“ 文件系统 selinux=0 关闭还原模式
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\39.png
可用tab

3.因此正常开机

一定要记得把selinux关了,不然是这个后果
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\40.png

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\41.png

4./boot下没有grub.cfg于是生成grub2配置文件

#通过命令生成新的grub.cfg文件
#grub2-mkconfig -o /boot/grub2/grub.cfg 或者 grub2-mkconfig > /boot/grub2/grub.cfg #前提/etc/grub.d没有被删
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\42.png

############################################################

实例四之GRUB2挂了2

1.把/boot和/etc下的grub相关文件删除,无法生成grub配置文件

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\43.png

2.于是手动指定

请查看实例三

3.因此正常开机

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\44.png

4./boot和/etc没有grub相关文件,手动写一个grub配置文件

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\45.png

#vim /boot/grub2/grub.cfg #手动写一个
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\46.png
:wq保存退出,下面重启
可以看到,grub.cfg里menuentry那里是写的是这里显示的内容
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\47.png

实例五之内核失踪

1.将内核删了

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\48.png

挂载光盘请看实例一

2.于是进rescue模式,安装内核

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\49.png

将光盘里的内核包复制到硬盘并强制安装
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\50.png

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\51.png

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\52.png

#rpm –ivh kernel-3.10.0-123.el7.x86_64.rpm –force #强制安装
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\53.png

2次exit重启
记得将光盘取消(请看实例一)

3.因此正常开机

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\54.png

实例六之驱动失踪

\1. 将initramfs-3.10.0-123.el7.x86_64.img删除
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\55.png

\2. 于是进入rescue模式,生成initramfs驱动
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\56.png

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\57.png

#mkinitrd –v initramfs-$(uname –r).img $(uname –r) #生成initramfs驱动
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\58.png

file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\59.png

2次exit重启
记得将光盘取消(请看实例一)
\3. 因此正常开机
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\60.png

如果确保内核 与 驱动模块文件都存在,但是引导依然存在问题,则很有可能时grub.cfg文件问题,grub2-mkconfig -o /boot/grub2/grub.cfg解决或者重新正确的手写

实例七之ROOT密码被遗忘

<
单用户模式:进启动系统核心部分,不启动第三方服务程序 basic.target rescue.target
多用户模式:除图形界面之外,启动完整系统包括服务自启项. multi-user.target
图形模式 :完整系统包括图形界面 graphical.target
systemctl set-default multi-user.target
>

\1. 进入e模式,rd.break
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\61.png

把rhgb quiet删除,加上rd.break enforcing=0 (!!!enforcing 关闭selinux)
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\62.png

然后ctrl+x启动
\2. 进入switch-root#
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\63.png

\3. 改密码
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\64.png

**Switch_root:/#**mount –o remount,rw /sysroot/ #使可读可写
**Switch_root:/#**chroot /sysroot/ #切换根目录
**Sh-4.2#**echo hrr |passwd –stdin root #改root密码
**Sh-4.2#**touch /.autorelabel #重打标签,!!一定要有这个!! <避免selinux重新检查文件系统的更从而还原>
**Sh-4.2#**exit
**Switch_root:/#**exit

2次exit进入系统
\4. 因此成功进入系统
file://c:\users\admini~1\appdata\local\temp\tmpl89rkl\65.png

====================================================
#在配置文件配置grub 用户及密码
[root@localhost ~]# vim /etc/grub.d/10_linux
cat <<EOF
set superusers=“admin”
#明文密码
password admin 123456
EOF

------------------------------------------
#用命令生成密文密码grub2-mkpasswd-pbkdf2
cat <<EOF
set superusers=“admin”
password_pbkdf2 admin grub.pbkdf2.sha512.10000.2B3F99FEC1152CB38B1F958206FEB57BE46CC747363DF1FA401B73D13F2645E9CAB50BF4A21AFE98A7ECD385452EF830903DADC8E2DBA34AB98E5E521B24E3FA.A4FDA961327E16B1F7B744E17C79688A8E17EF1B846AF9B90A25B73A6A76B8B385070A0EB067E49B503B6861C7B7F9B8329C0DBA62F40DC3D527C88E875B23FA
EOF
------------------------------------------

#根据10_linux配置生成新的grub2/grub.cfg文件
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值