學習筆記:CentOS7學習之十八:Linux系統啟動原理及故障排除
本文用於記錄學習體會、心得,兼做筆記使用,方便以后復習總結。內容基本完全參考學神教育教材,圖片大多取材自學神教育資料,在此非常感謝MK老師和學神教育的優質教學。希望各位因學習需求而要進行轉載時,能申明出處為學神教育,謝謝各位!
18.1 centos6系統啟動過程及相關配置文件
18.1.1 centos6系統啟動過程
- 加載 BIOS 的硬件信息,跟據設定取得第一個可開機引導設置,如:光驅,硬盤,網絡,USB; 如果是硬盤為第一引導
- 讀取硬盤中 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
- 依據 boot loader 的設定,到引導分區加載 Kernel ,Kernel 會開始偵測硬件並加載驅勱程序;
- 在硬件驅動成功后,Kernel 會主動執行 init 程序,而 init 會取得 run-level 信息;
- init 執行 /etc/rc.d/rc.sysinit 文件來准備軟件執行的作業環境 (如網絡、時區等);
- init 執行 run-level 下各個服務並啟動 (script 方式);
- init 執行開機后自動運行腳本 /etc/rc.d/rc.local 文件;
- 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引導順序:
- UEFi或BIOS初始化,運行POST開機自檢
- 選擇啟動設備
- 引導裝載程序, centos7是grub2
- 加載裝載程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
- 加載內核選項
- 加載initramfs初始化偽文件系統
- 內核初始化,centos7使用systemd代替init
- 執行initrd.target所有單元,包括掛載/etc/fstab
- 從initramfs根文件系統切換到磁盤根目錄
- systemd執行默認target配置,配置文件/etc/systemd/system/default.target
- systemd執行sysinit.target初始化系統及basic.target准備操作系統
- systemd啟動multi-user.target下的本機與服務器服務
- systemd執行multi-user.target下的/etc/rc.d/rc.local
- Systemd執行multi-user.target下的getty.target及登錄服務
- 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 引導,讓硬盤做第一引導
2019-6-21 12:47:09