學習筆記: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 程序,最后就等待用戶登入啦;
    如圖:

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需要的服務

如下圖所示:


[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個系統版本啟動過程

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                       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對比

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.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


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 #重啟驗證

看到可以進入GRUB菜單,就證明你加密成功了

按ctrl-x 開始啟動

18.4 通過liveCD進入救援模式-重裝grub修復損壞的系統

截圖太麻煩,直接使用學神圖片

實戰場景:當系統壞了,進不去了,還需要把里面的數據復制出來,可以使用光盤進入救援模式拷貝數據

18.4.1 基於6版本系統進入救援模式

修改BIOS啟動順序,直接以光盤引導系統

ramfs :為內存文件系統,需要切換到文件系統

chroot /mnt/sysimage # 切換文件系統根

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引導順序,讓光盤啟動。

進入啟動的界面

上面有三項,我們選擇第三項進入troubleshooting故障排除界面 ,進入第三項后,點擊第二項,進入救援模式的centos的系統

然后我們進入如下模式,選擇1,繼續進行,接下來,我們就會進入到一個shell模式中,需要切換根目錄,進行系統修復:

先退出道ramfs系統,再重啟,修復完成

18.4.3 實戰-在centOS7下誤刪除grub文件進行修復

第一步:刪除grub2

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

第二步,重啟計算機

[root@xuegod63 ~]# reboot

進入如下界面:

現在開始解決grub
重啟系統,按Esc,進入光盤救援模式,選擇第三項,進入光盤救援(前提是掛載光盤)

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

第一步:切換到文件系統根

然后執行命令

grub2-install

下圖中,我們可以看到在grub2文件夾中,還沒有grub.cfg文件,接下來,我們需要生成配置文件:

進入到grub2下,

exit退回到ramfs,然后,重啟電腦:

修改BIOS 引導,讓硬盤做第一引導


END
2019-6-21 12:47:09


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM