学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除

学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除


本文用于记录学习体会、心得,兼做笔记使用,方便以后复习总结。内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK老师和学神教育的优质教学。希望各位因学习需求而要进行转载时,能申明出处为学神教育,谢谢各位!


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

18.1.1 centos6系统启动过程

  1. 加载 BIOS 的硬件信息,跟据设定取得第一个可开机引导设置,如:光驱,硬盘,网络,USB; 如果是硬盘为第一引导
  2. 读取硬盘中 MBR 的 boot Loader 就是 grub引导

GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。
MBR的硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。

注:磁盘默认一个扇区大小为:512字节。MBR由以下3部分组成:

第一部分是:主引导程序(boot loader)占446个字节。主引导程序,它负责从活动分区中装载,并运行系统引导程序。

第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。每个分区表项长16个字节,16*4=64字节。为分区项1、分区项2、分区项3、分区项4。64字节只存4个分区表。

第三部分是MBR有效标识位,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MBR。

所以:16*4+446+2=512

  1. 依据 boot loader 的设定,到引导分区加载 Kernel ,Kernel 会开始侦测硬件并加载驱劢程序;
  2. 在硬件驱动成功后,Kernel 会主动执行 init 程序,而 init 会取得 run-level 信息;
  3. init 执行 /etc/rc.d/rc.sysinit 文件来准备软件执行的作业环境 (如网络、时区等);
  4. init 执行 run-level 下各个服务并启动 (script 方式);
  5. init 执行开机后自动运行脚本 /etc/rc.d/rc.local 文件;
  6. init 执行虚拟终端机控制程序 mingetty 来启动 login 程序,最后就等待用户登入啦;
    如图:

1659632-20190621124925072-43073338.png

18.1.2 centos6启动相关的配置文件

1、/boot/grub/grub.conf配置文件说明


[root@localhost ~]# vim /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0 #设定默认启动菜单项,当系统中有多个内核时,0表示默认加载第1个,1表示第2个内核
timeout=5 #菜单项等待选项时间为5s
splashimage=(hd0,0)/grub/splash.xpm.gz #指明菜单背景图片路径为
hiddenmenu #隐藏开机菜单
title CentOS 6 (2.6.32-754.el6.x86_64) #定义菜单项
        root (hd0,0) #grub查找stage2及kernel文件所在设备分区,grub的根
        kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=860fb1c1-95f6-43d9-8693-b5b32cb8ae0e rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet #启动的内核
        initrd /initramfs-2.6.32-754.el6.x86_64.img #内核匹配的ramfs文件

2、/etc/inittab设置系统默认启动级别:


root@localhost ~]# vim /etc/inittab
.....
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:5:initdefault: # #设置系统默认启动的级别

3、/etc/rc.d/rc.sysinit 系统初始化shell脚本

作用:系统初始化: 像:主机名 和/etc/fstab 都在这里指定了,完成了包括mount分区 激活swap 加载modules等重要的工作.

4、启动对应级别下的服务如: init 3 级别


[root@localhost ~]# ls /etc/rc.d/rc3.d/
K01smartd          S10network
K05wdaemon         S11auditd
K10psacct          S11portreserve
K10saslauthd       S12rsyslog
K15htcacheclean    S13cpuspeed
K15httpd           S13irqbalance
K30spice-vdagentd  S15mdmonitor
K35nmb             S22messagebus
K35smb             S23NetworkManager
K50dnsmasq         S25blk-availability
K61nfs-rdma        S25cups
K74ntpd            S25netfs
K75ntpdate         S26acpid
K75quota_nld       S26haldaemon
K84wpa_supplicant  S26udev-post
K87restorecond     S50bluetooth
K89netconsole      S50kdump
K89rdisc           S55sshd
K92pppoe-server    S57vmware-tools-thinprint
K99rngd            S80postfix
S01sysstat         S82abrtd
S02lvm2-monitor    S83abrt-ccpp
S03vmware-tools    S90crond
S05rdma            S95atd
S08ip6tables       S99firstboot
S08iptables        S99local

这里的程序/服务S开头的全部开机执行;K开头的表示开机不执行,后面的数字表明了开关机时的顺序,如S10network表示,network开机启动,启动顺序为10

rcn.d (n为1到6) 是对应于不同的runlevel下起不同的服务. 这些目录下都是一些符号连接, 连接到/etc/rc.d/init.d下的一些文件.以S开头的表示要启动, 以K开头的不启动.

第一个字母后面的数值是一个优先级.


[root@localhost ~]# ls /etc/rc.d/init.d
abrt-ccpp         irqbalance      rdisc
abrtd             kdump           rdma
abrt-oops         killall         restorecond
acpid             lvm2-lvmetad    rngd
atd               lvm2-monitor    rsyslog
auditd            mdmonitor       sandbox
blk-availability  messagebus      saslauthd
bluetooth         netconsole      single
cpuspeed          netfs           smartd
crond             network         smb
cups              NetworkManager  spice-vdagentd
dnsmasq           nfs-rdma        sshd
firstboot         nmb             sysstat
functions         ntpd            udev-post
haldaemon         ntpdate         vmware-tools
halt              portreserve     vmware-tools-thinprint
htcacheclean      postfix         wdaemon
httpd             pppoe-server    wpa_supplicant
ip6tables         psacct
iptables          quota_nld
[root@localhost ~]# ll /etc/rc.d/rc3.d/ |grep network
lrwxrwxrwx. 1 root root 17 Jun 20 17:58 S10network -> ../init.d/network

#表示network是第10个启动的服务。 所以init是顺序启动系统,需要一个一个服务启动成功,再执行下一步操作,启动系统比较慢。而centos7中的systemd可以并行启动多个服务,启动比较快。

[root@localhost ~]# vim /etc/init.d/network
#! /bin/bash
#
# network       Bring up/down networking
#
# chkconfig: 2345 10 90 #2345表示在runlevel 2 3 4 5下被启动, 10是为此服务的启动顺序, 90为关机时,关闭此服务的顺序。
# description: Activates/Deactivates all network interfaces configured to \
#              start at boot time.
#
### BEGIN INIT INFO
# Provides: $network
# Should-Start: iptables ip6tables
# Short-Description: Bring up/down networking
# Description: Bring up/down networking
### END INIT INFO

# Source function library.
. /etc/init.d/functions

[root@localhost ~]# ll /etc/rc.d/rc3.d/ |grep network 
lrwxrwxrwx. 1 root root 17 Jun 20 17:58 S10network -> ../init.d/network
[root@localhost ~]# vim /etc/init.d/networkS10
[root@localhost ~]# chkconfig --list network #当设置network开机启动时,/etc/rc.d/rc3.d/下显示S10network软连接
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@localhost ~]# ll /etc/rc.d/rc3.d/|grep network
lrwxrwxrwx. 1 root root 17 Jun 20 17:58 S10network -> ../init.d/network
[root@localhost ~]# chkconfig network off
[root@localhost ~]# chkconfig --list network
network         0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@localhost ~]# ll /etc/rc.d/rc3.d/ |grep network #当设置network开机不启动时,/etc/rc.d/rc3.d/下显示k90network软连接
lrwxrwxrwx. 1 root root 17 Jun 21 10:09 K90network -> ../init.d/network

** 5、所有系统服务启动后,启动/etc/rc.local配置文件中自运行程序**

[root@xuegod64 rc3.d]# vim /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

[root@localhost ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Apr 15 02:55 /etc/rc.local -> rc.d/rc.local

6、运行mingetty命令,打开tty1-6


[root@localhost ~]# ps -axu | grep ming
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root       2646  0.0  0.0   4060   592 tty2     Ss+  09:34   0:00 /sbin/mingetty /dev/tty2
root       2648  0.0  0.0   4060   592 tty3     Ss+  09:34   0:00 /sbin/mingetty /dev/tty3
root       2650  0.0  0.0   4060   592 tty4     Ss+  09:34   0:00 /sbin/mingetty /dev/tty4
root       2652  0.0  0.0   4060   592 tty5     Ss+  09:34   0:00 /sbin/mingetty /dev/tty5
root       2654  0.0  0.0   4060   596 tty6     Ss+  09:34   0:00 /sbin/mingetty /dev/tty6
root       6998  0.0  0.0 103328   856 pts/0    S+   10:18   0:00 grep ming

查看系统启动级别


[root@localhost ~]# runlevel
N 5
[root@localhost ~]# init 3
[root@localhost ~]# runlevel
5 3 #系统运行级别由5转换到3
[root@localhost ~]# init 5
[root@localhost ~]# runlevel
3 5 #系统运行界别从3转换到5

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

18.2.1 centos7系统启动过程

CentOS7引导顺序:

  1. UEFi或BIOS初始化,运行POST开机自检
  2. 选择启动设备
  3. 引导装载程序, centos7是grub2
  4. 加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
  5. 加载内核选项
  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需要的服务

如下图所示:

1659632-20190621125002820-1516563383.png


[root@CentOs7_64_1_128 ~]# ll /boot/grub2/i386-pc/*.img
-rw-r--r--. 1 root root   512 5月  17 15:01 /boot/grub2/i386-pc/boot.img
-rw-r--r--. 1 root root 26703 5月  17 15:01 /boot/grub2/i386-pc/core.img

18.2.2 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/
  • /run/systemd/system/ #系统执行过程中所产生的服务脚本,比上面目录优先运行
  • /etc/systemd/system/ #管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx类的功能,比上面目录优先运行

如下所示:


[root@CentOs7_64_1_128 ~]# ll /run/systemd/system/
总用量 24
-rw-r--r--. 1 root root  17 6月  21 09:35 session-1.scope
drwxr-xr-x. 2 root root 160 6月  21 09:35 session-1.scope.d
-rw-r--r--. 1 root root  17 6月  21 10:01 session-7.scope
drwxr-xr-x. 2 root root 160 6月  21 10:01 session-7.scope.d
-rw-r--r--. 1 root root  17 6月  21 09:35 session-c1.scope
drwxr-xr-x. 2 root root 160 6月  21 09:35 session-c1.scope.d
-rw-r--r--. 1 root root  17 6月  21 10:01 user-0.slice
drwxr-xr-x. 2 root root 120 6月  21 10:01 user-0.slice.d
-rw-r--r--. 1 root root  17 6月  21 09:35 user-1000.slice
drwxr-xr-x. 2 root root 120 6月  21 09:35 user-1000.slice.d
-rw-r--r--. 1 root root  17 6月  21 09:35 user-42.slice
drwxr-xr-x. 2 root root 120 6月  21 09:35 user-42.slice.d
[root@CentOs7_64_1_128 ~]# ls /usr/lib/systemd/system #该目录下面包含各种目标态和service

.....
rsyncd.service
rsyncd@.service
rsyncd.socket
rsyslog.service
rtkit-daemon.service
runlevel0.target
runlevel1.target
runlevel1.target.wants
runlevel2.target
runlevel2.target.wants
runlevel3.target
runlevel3.target.wants
runlevel4.target
runlevel4.target.wants
runlevel5.target
runlevel5.target.wants
runlevel6.target
saned@.service
saned.socket
saslauthd.service
selinux-policy-migrate-local-changes@.service
serial-getty@.service
shutdown.target
shutdown.target.wants
sigpwr.target
sleep.target
-.slice
slices.target
slpd.service
smartcard.target
smartd.service
smb.service
snmpd.service
snmptrapd.service
sockets.target
.....

[root@CentOs7_64_1_128 ~]# ls /etc/systemd/system/ #管理员建立的执行脚本,类似于centos6中/etc/rc.d/rcN.d/Sxx类的功能,开机启动服务
basic.target.wants
bluetooth.target.wants
dbus-org.bluez.service
dbus-org.fedoraproject.FirewallD1.service
dbus-org.freedesktop.Avahi.service
dbus-org.freedesktop.ModemManager1.service
dbus-org.freedesktop.NetworkManager.service
dbus-org.freedesktop.nm-dispatcher.service
default.target
default.target.wants
dev-virtio\x2dports-org.qemu.guest_agent.0.device.wants
dirsrv.target.wants
display-manager.service
getty.target.wants
graphical.target.wants
httpd.d
local-fs.target.wants
multi-user.target.wants
network-online.target.wants
pki-tomcatd-nuxwdog.target.wants
pki-tomcatd.target.wants
printer.target.wants
remote-fs.target.wants
sockets.target.wants
sysinit.target.wants
system-update.target.wants
timers.target.wants
vmtoolsd.service.requires

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

[root@CentOs7_64_1_128 ~]# systemctl daemon-reload

总结:centos5-6-7 3个系统版本启动过程

1659632-20190621125049211-668880610.png

18.2.3 管理系统服务

命令: 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@CentOs7_64_1_128 ~]# systemctl list-unit-files --type service #查看所有服务状态
UNIT FILE                                     STATE   
abrt-ccpp.service                             enabled 
abrt-oops.service                             enabled 
abrt-pstoreoops.service                       disabled
abrt-vmcore.service                           enabled 
abrt-xorg.service                             enabled 
abrtd.service                                 enabled 
accounts-daemon.service                       enabled 
alsa-restore.service                          static  
alsa-state.service                            static  
amanda-udp.service                            static  
amanda@.service                               static  
anaconda-direct.service                       static  
anaconda-nm-config.service                    static  
anaconda-noshell.service                      static  
anaconda-pre.service                          static  
anaconda-shell@.service                       static  
anaconda-sshd.service                         static  
anaconda-tmux@.service                        static  
anaconda.service                              static  
arp-ethers.service                            disabled
atd.service                                   enabled 
auditd.service                                enabled 
......

服务状态说明:

状态说明
loaded:Unit配置文件已处理
active(running)一次或多次持续处理的运行
active(exited)成功完成一次性的配置
active(waiting)运行中,等待一个事件
inactive不运行
enabled开机启动
disabled开机不启动
static开机不启动,但可被另一个启用的服务激活

18.2.4 运行级别

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

0: 关机模式

1:单用户模式 ,用于破解root密码

2:无网络,支持的多用户模式

3:有网络支持的多用户模式(一般叫字符界面,工作中最长使用的模式)

4:保留,未使用

5:有网络支持,支持图形界面,支持的多用户模式(图形界面)

6:重新引导系统,及重启

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


[root@CentOs7_64_1_128 ~]# ll /usr/lib/systemd/system/*.target |grep runlevel
lrwxrwxrwx. 1 root root  15 6月  21 09:27 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root  13 6月  21 09:27 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root  17 6月  21 09:27 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root  17 6月  21 09:27 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root  17 6月  21 09:27 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root  16 6月  21 09:27 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root  13 6月  21 09:27 /usr/lib/systemd/system/runlevel6.target -> reboot.target

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

[root@CentOs7_64_1_128 ~]# systemctl list-dependencies runlevel3.target

查看3级别Unit 的所有依赖。Unit 之间存在依赖关系:A 依赖于 B,就意味着 Systemd 在启动 A 的时候,同时会去启动 B。也可以理解也3运行级别下都开启哪些服务

在centOS7上所谓的目标态,其实就是由各种指定的服务和基础target组合而成的。

总结:

centos和centos7对比

centos6centos7
initsystemd
Traditional runlevelNew target name Symbolically linked to...
Runlevel 0runlevel0.target -> poweroff.target
Runlevel 1runlevel1.target -> rescue.target
Runlevel 2runlevel2.target -> multi-user.target
Runlevel 3runlevel3.target -> multi-user.target
Runlevel 4runlevel4.target -> multi-user.target
Runlevel 5runlevel5.target -> graphical.target
Runlevel 6runlevel6.target -> reboot.target
Init 0systemctl poweroff 关机
Init 1systemctl isolate rescue.target 单用户
Init 3systemctl isolate multi-user.target 字符界面
Init 5systemctl isolate graphical.target 图形化
Init 6systemctl reboot 重启

18.2.5 运行级别的切换

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

systemctl isolate multi-user.target

systemctl isolate runlevel3.target

2、centos7设置默认系统默认启动级别


[root@CentOs7_64_1_128 ~]# 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@CentOs7_64_1_128 ~]# ll /etc/systemd/system/default.target #发现default.target链接到了multi-user.target
lrwxrwxrwx. 1 root root 41 6月  21 11:35 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target

18.2.6 grub2和grub区别-了解

在centOS6上,我们的grub文件是/boot/grub/grub.conf

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

1、centos7修改内核启动顺序


[root@CentOs7_64_1_128 ~]# uname -r #查看当前内核信息
3.10.0-957.21.3.el7.x86_64
[root@CentOs7_64_1_128 ~]# vim /etc/default/grub #修改默认grub配置文件
GRUB_TIMEOUT=5 ##开机时 grub 默认5秒后启动内核
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved ##这里我们改成1,0代表第一个内核,1代表第二个,以此类推
GRUB_DISABLE_SUBMENU=true #
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

[root@CentOs7_64_1_128 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg #重新生成grub.cfg文件,我们在下次启动的时候就会默认选择新的默认内核
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-957.21.3.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.21.3.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-a124a28807764e5ebccf720a1f49ae2d
Found initrd image: /boot/initramfs-0-rescue-a124a28807764e5ebccf720a1f49ae2d.img
done
[root@CentOs7_64_1_128 ~]# reboot
[yangjie@CentOs7_64_1_128 ~]$ uname -r #发现默认启动内核改变了
3.10.0-957.el7.x86_64

2、centos6修改内核启动顺序


[root@localhost boot]# vim /boot/grub/grub.conf

修改改:10 default=0

为:10 default=1

然后重启

18.3 实战-加密grub防止黑客通过单用户系统破解root密码

如何防止别人恶意通过单用户系统破解root密码,进入系统窃取数据?
给grub加密,不让别人通过grub进入单用户

18.3.1 基于centos6进行grub加密


[root@localhost boot]# grub-md5-crypt  #生成md5密匙
Password: 
Retype password: 
$1$LvIWR0$hldK9g62r85yswNMHIjIu. #md5密匙
[root@localhost boot]# vim /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5$1$LvIWR0$hldK9g62r85yswNMHIjIu #添加md5密匙加密
title CentOS 6 (2.6.32-754.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=860fb1c1-95f6-43d9-8693-b5b32cb8ae0e rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-754.el6.x86_64.img

1659632-20190621125241179-1627574942.png

18.3.2 基于centos7进行grub加密

生成密码


[root@CentOs7_64_1_128 ~]# grub2-mkpasswd-pbkdf2 #生成密码
输入口令:
Reenter password: 
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.78B802FA4839B95904F8446AE0CA435658A5B75AEE686D7E3421887D65D7E3F22778118760A05C0D8EC7BE57D98D4A1F1B7C6286C290F03B4577020D93E00AFD.4066C9F59B4E33541259688A24C8F0979360105F9B25739F9D7463FE3162EF745E3AB534F27B4798500D872100B1619C94EAED05D4413BCDC6D330319B171550
[root@CentOs7_64_1_128 ~]# vim /etc/grub.d/00_header  #在文件末尾加入如下内容

....


cat <<EOF
set superusers='yangjie'
password_pbkdf2 yangjie
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.78B802FA4839B95904F8446AE0CA435658A5B75AEE686D7E3421887D65D7E3F22778118760A05C0D8EC7BE57D98D4A1F1B7C6286C290F03B4577020D93E00AFD.4066C9F59B4E33541259688A24C8F0979360105F9B25739F9D7463FE3162EF745E3AB534F27B4798500D872100B1619C94EAED05D4413BCDC6D330319B171550
EOF



[root@CentOs7_64_1_128 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg #更新grub信息
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-957.21.3.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.21.3.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-a124a28807764e5ebccf720a1f49ae2d
Found initrd image: /boot/initramfs-0-rescue-a124a28807764e5ebccf720a1f49ae2d.img
done

[root@CentOs7_64_1_128 ~]# reboot #重启验证

1659632-20190621125317576-1983322419.png

看到可以进入GRUB菜单,就证明你加密成功了

1659632-20190621125332836-1855109334.png

按ctrl-x 开始启动

18.4 通过liveCD进入救援模式-重装grub修复损坏的系统

截图太麻烦,直接使用学神图片

实战场景:当系统坏了,进不去了,还需要把里面的数据复制出来,可以使用光盘进入救援模式拷贝数据

18.4.1 基于6版本系统进入救援模式

修改BIOS启动顺序,直接以光盘引导系统

1659632-20190621125406987-1214924193.png

1659632-20190621125420237-825158844.png

1659632-20190621125447321-878092291.png

1659632-20190621125456937-946977293.png

1659632-20190621125503881-1414314829.png

1659632-20190621125510042-2043394602.png

1659632-20190621125519892-419176246.png

1659632-20190621125527590-1108854312.png

1659632-20190621125535509-1030818288.png

1659632-20190621125541043-379719124.png

ramfs :为内存文件系统,需要切换到文件系统

chroot /mnt/sysimage # 切换文件系统根

1659632-20190621125632134-976803031.png

18.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 out
446 bytes (446 B) copied,0.000758682 s,588 kB/s

第二步:将centos7系统光盘挂载到虚拟机光驱上,,重启计算机,修改BIOS引导顺序,让光盘启动。

1659632-20190621125650019-1522330795.png

进入启动的界面

1659632-20190621125657808-133323701.png

上面有三项,我们选择第三项进入troubleshooting故障排除界面 ,进入第三项后,点击第二项,进入救援模式的centos的系统

1659632-20190621125708456-646296106.png

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

1659632-20190621125715162-2134729298.png

先退出道ramfs系统,再重启,修复完成

1659632-20190621125729811-21672887.png

18.4.3 实战-在centOS7下误删除grub文件进行修复

第一步:删除grub2

[root@xuegod63 ~]# rm -rf /boot/grub2

第二步,重启计算机

[root@xuegod63 ~]# reboot

进入如下界面:

1659632-20190621125743322-1291683967.png

现在开始解决grub
重启系统,按Esc,进入光盘救援模式,选择第三项,进入光盘救援(前提是挂载光盘)

1659632-20190621125754926-232538600.png

使用live cd 进入救援模式后:

1659632-20190621125808243-549140465.png

第一步:切换到文件系统根

然后执行命令

grub2-install

1659632-20190621125817546-1457428465.png

下图中,我们可以看到在grub2文件夹中,还没有grub.cfg文件,接下来,我们需要生成配置文件:

进入到grub2下,

1659632-20190621125827055-893268936.png

exit退回到ramfs,然后,重启电脑:

1659632-20190621125834414-1942019721.png

修改BIOS 引导,让硬盘做第一引导


END 2019-6-21 12:47:09

转载于:https://www.cnblogs.com/yj411511/p/11063976.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值