博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除
阅读量:5093 次
发布时间:2019-06-13

本文共 20129 字,大约阅读时间需要 67 分钟。

目录

学习笔记: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/sdadefault=0 #设定默认启动菜单项,当系统中有多个内核时,0表示默认加载第1个,1表示第2个内核timeout=5 #菜单项等待选项时间为5ssplashimage=(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          S10networkK05wdaemon         S11auditdK10psacct          S11portreserveK10saslauthd       S12rsyslogK15htcacheclean    S13cpuspeedK15httpd           S13irqbalanceK30spice-vdagentd  S15mdmonitorK35nmb             S22messagebusK35smb             S23NetworkManagerK50dnsmasq         S25blk-availabilityK61nfs-rdma        S25cupsK74ntpd            S25netfsK75ntpdate         S26acpidK75quota_nld       S26haldaemonK84wpa_supplicant  S26udev-postK87restorecond     S50bluetoothK89netconsole      S50kdumpK89rdisc           S55sshdK92pppoe-server    S57vmware-tools-thinprintK99rngd            S80postfixS01sysstat         S82abrtdS02lvm2-monitor    S83abrt-ccppS03vmware-tools    S90crondS05rdma            S95atdS08ip6tables       S99firstbootS08iptables        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.dabrt-ccpp         irqbalance      rdiscabrtd             kdump           rdmaabrt-oops         killall         restorecondacpid             lvm2-lvmetad    rngdatd               lvm2-monitor    rsyslogauditd            mdmonitor       sandboxblk-availability  messagebus      saslauthdbluetooth         netconsole      singlecpuspeed          netfs           smartdcrond             network         smbcups              NetworkManager  spice-vdagentddnsmasq           nfs-rdma        sshdfirstboot         nmb             sysstatfunctions         ntpd            udev-posthaldaemon         ntpdate         vmware-toolshalt              portreserve     vmware-tools-thinprinthtcacheclean      postfix         wdaemonhttpd             pppoe-server    wpa_supplicantip6tables         psacctiptables          quota_nld[root@localhost ~]# ll /etc/rc.d/rc3.d/ |grep networklrwxrwxrwx. 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 networklrwxrwxrwx. 1 root root 17 Jun 20 17:58 S10network -> ../init.d/network[root@localhost ~]# chkconfig network off[root@localhost ~]# chkconfig --list networknetwork         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.locallrwxrwxrwx. 1 root root 13 Apr 15 02:55 /etc/rc.local -> rc.d/rc.local

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

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

查看系统启动级别

[root@localhost ~]# runlevelN 5[root@localhost ~]# init 3[root@localhost ~]# runlevel5 3 #系统运行级别由5转换到3[root@localhost ~]# init 5[root@localhost ~]# runlevel3 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.scopedrwxr-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.scopedrwxr-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.scopedrwxr-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.slicedrwxr-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.slicedrwxr-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.slicedrwxr-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.servicersyncd@.servicersyncd.socketrsyslog.servicertkit-daemon.servicerunlevel0.targetrunlevel1.targetrunlevel1.target.wantsrunlevel2.targetrunlevel2.target.wantsrunlevel3.targetrunlevel3.target.wantsrunlevel4.targetrunlevel4.target.wantsrunlevel5.targetrunlevel5.target.wantsrunlevel6.targetsaned@.servicesaned.socketsaslauthd.serviceselinux-policy-migrate-local-changes@.serviceserial-getty@.serviceshutdown.targetshutdown.target.wantssigpwr.targetsleep.target-.sliceslices.targetslpd.servicesmartcard.targetsmartd.servicesmb.servicesnmpd.servicesnmptrapd.servicesockets.target.....[root@CentOs7_64_1_128 ~]# ls /etc/systemd/system/ #管理员建立的执行脚本,类似于centos6中/etc/rc.d/rcN.d/Sxx类的功能,开机启动服务basic.target.wantsbluetooth.target.wantsdbus-org.bluez.servicedbus-org.fedoraproject.FirewallD1.servicedbus-org.freedesktop.Avahi.servicedbus-org.freedesktop.ModemManager1.servicedbus-org.freedesktop.NetworkManager.servicedbus-org.freedesktop.nm-dispatcher.servicedefault.targetdefault.target.wantsdev-virtio\x2dports-org.qemu.guest_agent.0.device.wantsdirsrv.target.wantsdisplay-manager.servicegetty.target.wantsgraphical.target.wantshttpd.dlocal-fs.target.wantsmulti-user.target.wantsnetwork-online.target.wantspki-tomcatd-nuxwdog.target.wantspki-tomcatd.target.wantsprinter.target.wantsremote-fs.target.wantssockets.target.wantssysinit.target.wantssystem-update.target.wantstimers.target.wantsvmtoolsd.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

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

chkconfig命令的对应关系

- centOS6 CentOS7
设定某服务开机自启 chkconfig name on systemctl enable name.service
设定某服务开机禁止启动 chkconfig name off systemctl disable name.service
查看所有服务的开机自启状态 chkconfig --list systemctl list-unit-files --type service
用来列出该服务在哪些运行级别下启用和禁用 chkconfig sshd –list ls /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                       disabledabrt-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                            disabledatd.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 runlevellrwxrwxrwx. 1 root root  15 6月  21 09:27 /usr/lib/systemd/system/runlevel0.target -> poweroff.targetlrwxrwxrwx. 1 root root  13 6月  21 09:27 /usr/lib/systemd/system/runlevel1.target -> rescue.targetlrwxrwxrwx. 1 root root  17 6月  21 09:27 /usr/lib/systemd/system/runlevel2.target -> multi-user.targetlrwxrwxrwx. 1 root root  17 6月  21 09:27 /usr/lib/systemd/system/runlevel3.target -> multi-user.targetlrwxrwxrwx. 1 root root  17 6月  21 09:27 /usr/lib/systemd/system/runlevel4.target -> multi-user.targetlrwxrwxrwx. 1 root root  16 6月  21 09:27 /usr/lib/systemd/system/runlevel5.target -> graphical.targetlrwxrwxrwx. 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对比

centos6 centos7
init systemd
Traditional runlevel New target name Symbolically linked to...
Runlevel 0 runlevel0.target -> poweroff.target
Runlevel 1 runlevel1.target -> rescue.target
Runlevel 2 runlevel2.target -> multi-user.target
Runlevel 3 runlevel3.target -> multi-user.target
Runlevel 4 runlevel4.target -> multi-user.target
Runlevel 5 runlevel5.target -> graphical.target
Runlevel 6 runlevel6.target -> reboot.target
Init 0 systemctl poweroff 关机
Init 1 systemctl isolate rescue.target 单用户
Init 3 systemctl isolate multi-user.target 字符界面
Init 5 systemctl isolate graphical.target 图形化
Init 6 systemctl 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.targetlrwxrwxrwx. 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_64Found initrd image: /boot/initramfs-3.10.0-957.21.3.el7.x86_64.imgFound linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.imgFound linux image: /boot/vmlinuz-0-rescue-a124a28807764e5ebccf720a1f49ae2dFound initrd image: /boot/initramfs-0-rescue-a124a28807764e5ebccf720a1f49ae2d.imgdone[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/sdadefault=0timeout=5splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenupassword --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 <

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=446446+0 records in446+0 records out446 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

你可能感兴趣的文章
CRC计算模型
查看>>
Ajax之404,200等查询
查看>>
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
csv HTTP简单表服务器
查看>>
OO设计的接口分隔原则
查看>>
数据库连接字符串大全 (转载)
查看>>
java类加载和对象初始化
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Screening technology proved cost effective deal
查看>>
spring boot配置跨域
查看>>
BZOJ 1996 合唱队(DP)
查看>>
安卓学习资料推荐-25
查看>>
Mysql数据库备份和还原常用的命令
查看>>
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
二、spring中装配bean
查看>>
VIM工具
查看>>
javascript闭包
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>