Linux--引導過程與服務控制(linux操作系統引導過程詳解,MBR扇區故障,GRUB引導故障,root用戶密碼遺忘的修復,服務控制及切換運行級別,優化啓動過程)

前言

  • 系統引導是操作系統運行的開始,在用戶能夠正常登錄到系統之前,Linux的引導過程完成了一系列的初始化任務,並加載必要的程序和命令終端,爲用戶登錄做好準備。
  • CentOS7版本,系統啓動和服務管理都交給systemd進行管理

一:引導過程

  • CentOS7系統中,由systemd掌管系統的初始化工作,系統的啓動過程與之前的版本相比有了新的變化。

1.1:引導過程總覽

在這裏插入圖片描述

1.1.1:開機自檢(BIOS)

  • 服務器主機開機以後,將根據主板BIOS(Basic Input/Output System,基本輸入輸出系統)中的設置對CPU。內存。顯卡,鍵盤等設備進行初步檢測,並初始化部分硬件(加電自檢)
  • 檢測成功後根據預設的啓動順序移交系統控制權,大多數時候會移交給本機硬盤(加載部分驅動)
  • 自檢過程中可以根據主機的POST信息進入配置,通常按某一組合鍵進入,常用F2或者Delete

1.1.2:MBR引導

  • 當從本機硬盤中啓動系統時,首先根據硬盤的第一個扇區中MBR(Master Boot Record,主引導記錄)的設置,將系統控制權傳遞給包含操作系統引導文件的分區
  • 或者直接根據MBR記錄中的引導信息調用啓動菜單(CentOS7中爲grub2)
  • 若安裝雙系統,則兩個系統需要分別安裝在不同的盤符當中

1.1.3:GRUB菜單

  • 對於Linux系統來說,GRUB算是使用最廣泛的多系統引導器程序
  • 系統控制權傳遞給GRUB以後,將會顯示啓動菜單提供給用戶選擇,並根據所選項(或採用默認值)加載Linux內核文件,然後將系統控制權轉交給內核

1.1.4:加載內核(Kernel)

  • 系統引導器程序會從本地硬盤中加載內核以及內存文件系統(CentOS 7 中使用initramfs)
  • Linux內核是一個預先編譯好的特殊二進制文件,介於各種硬件資源與系統程序之間,負責資源分配與調度
  • 內核接過系統控制權以後,將完全掌控整個Linux操作系統的運行過程
    內存文件系統initramfs 是經過gzip 的cpio歸檔,其中包含啓動時所有必要的硬件內核模塊,初始化腳本等。
  • 內核放在/boot目錄下,/boot目錄相當於Windows的system32

1.1.5:init進程初始化

  • 加載硬件驅動以及初始化進程(加載全部驅動)
  • 由Linux內核加載運行/sbin/init程序
  • 是系統中第一個進程
  • PID(進程標記)號永遠爲1
  • 內核初始化在initramfs中找到驅動程序的所有硬件,然後作爲PID1從initramfs執行/sbin/init,CentOS 7中將其複製爲systemd,systemd啓動initrd.target中所有單元,並掛載根文件系統/sysroot,內核與文件系統由內存文件系統切換至系統根文件系統,並重新運行 /sysroot.systemd。
  • systemd啓動默認target(圖形或者字符終端),最後等待用戶進行登錄

1.2:systemd 進程

  • Linux系統中的進程(運行中的程序)使用數字進行標記,每個進程的身份標記稱爲PID
  • 從CentOS 7版本的系統開始systemd稱爲PID恆爲1的初始化進程,是內核第一個加載的程序
  • systemd進程是維護整個Linux系統運行的所有進程的“始祖”,因此systemd進程是不允許被輕易終止的
  • 需要切換不同的系統運行狀態時,可以向systemd進程發送正確的執行命令,由systemd自身來完成相關操作
  • systemd誕生的主要目的是爲了將更多的服務併發啓動,從而提高系統啓動速度。其最大的優點在於具有提供按需啓動服務的能力,只有在某個服務被真正請求時才進行啓動。當服務結束時systemd就將其關閉,等待下次需要時啓動。

1.3:systemd單元類型

  • 在systemd中不同類型的systemd對象被統一稱爲單元,是讓系統知道該如何進行操作和管理資源的主要對象,所以systemd有許多單元類型

  • systemd單元文件最初默認存放在/lib/systemd/system目錄中,每當安裝新的軟件都會自動在這個目錄中添加一個配置文件

  • systemctl 命令用於管理各種類型的systemd單元,可以使用“systemctl -t help”命令來查詢systemd支持的單元類型

[root@localhost ~]# systemctl -t help		'//查詢systemd支持的單元類型'
Available unit types:
service             //後綴標識爲.service最常用,代表系統服務
socket              //後綴標識爲.socket代表套接字,表述進程間通信(IPC)
timer               //後綴標識爲.timer用於定時器配置觸發用戶所定義的操作,取代了任務計劃
target              //後綴標識爲.target用於代替舊版本中運行級別的存在
...此處省略部分內容
  • Systemd 單元類型
單元類型 擴展名 說明
Service .service 描述一個系統服務
Socket .socket 描述一個進程間通信的套接字(通信協議的載體)
Device .device 描述一個內核識別的設備文件
Mount .mount 描述一個文件系統的掛載點
Automount .automount 描述一個文件系統的自動掛載點
Swap .swap 描述一個內存交換設備或目錄
Timer .timer 描述一個定時器(用於實現類似cron的調度任務)
Path .path 描述一個文件系統中文件或目錄(path 路徑)
Snapshot .snapshot 用於保存一個systemd的狀態(snapshot 快照)
Scope .scope 使用systemd的總線接口以編程的方式創建外部進程
Slice .slice 描述居於Cgroup的一組通過層次組織的管理系統進程
Target .target 描述一組systemd的單元(target 目標)
  • Init運行級別所對應的Systemd目標
init運行級別 Systemd 的 target 說明
0 target 關機狀態,使用該級別時會關閉主機
1 rescue.target 單用戶模式,不需要密碼驗證即可登錄系統,多用於系統維護
2 multi-user.target 用戶定義/域特定運行級別,默認等同於3
3 multi-user.target 字符界面的完整用戶模式,大多數服務器主機運行在此級別
4 multi-user.target 用戶定義/域特定運行級別,默認等同於3
5 graphical.target 圖形界面的多用戶模式,提供了圖形桌面操作環境
6 reboot.target 重新啓動,使用該級別時將會重啓主機

二:修復MBR扇區故障

MBR引導記錄位於物理硬盤的第一個扇區(512B),該扇區又稱爲主引導扇區(MBR扇區),除了包含系統引導程序的部分數據以外,還包含了整個硬盤的分區表記錄。

2.1:故障原因

  • 病毒、木馬等造成的破壞

  • 不正確分區操作,磁盤讀寫誤操作

2.2:故障現象

  • 主引導扇區發生故障時,將可能無法進入引導菜單
  • 無法找到正確的分區位置而無法加載系統,通過愛硬盤引導主機時很可能進入黑屏狀態

2.3:解決思路

第一步:提前做好備份文件

第二步:以安裝光盤引導進入急救模式

第三步:從備份文件中恢復

2.4:修復MBR扇區實驗

2.4.1:實驗環境

  • VMware軟件,開centos 7,併爲其添加一塊硬盤(備份數據用的)

2.4.2:恢復步驟

  • 1.備份已損壞MBR扇區數據(實際中我們都是備份整個文件)

    加一塊磁盤做備份

  • 2.模擬故障

  • 3.加載系統鏡像文件中的急救模式

    加載系統鏡像文件中的內核界面

  • 將備份數據做恢復處理

2.4.3:修復實驗步驟

2.4.3.1:備份MBR扇區數據

  • 由於MBR扇區中包含了整個硬盤的分區表記錄,因此該扇區的備份文件必須存放到其他的存儲設備中,否則在恢復時將無法讀取到備份文件。

  • 例如,執行以下操作可以將第1塊硬盤(sda) 的MBR扇區備份到第2塊硬盤的sdb1分區中(掛載到/backup目錄)。
    在這裏插入圖片描述
    在這裏插入圖片描述

2.4.3.2:模擬MBR扇區故障

  • 這裏仍然使用dd命令,人爲地將MBR扇區的記錄覆蓋,以便模擬出MBR扇區被破壞的故障情況(切記要先做好備份,而且將備份文件存放到其他硬盤)。
  • 例如,執行以下操作可以從設備文件zero中讀取512字節的數據,將其覆蓋到第1塊硬盤(sda),從而破壞MBR扇區中的數據。
    在這裏插入圖片描述
    完成上述操作後重啓系統,將會出現“Operating system not found"的提示信息,表示無法找到可用的操作系統,因此無法啓動主機。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-DpNPWx1v-1592910129049)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623145656040.png)]
在這裏插入圖片描述

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wVu2mCVu-1592910129053)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623145920773.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-pJJ8W1Ph-1592910129054)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623145634365.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SJyDIldl-1592910129054)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623150120849.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7y0CfUfw-1592910129054)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623150231507.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yDhr5gJd-1592910129055)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623153912059.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tsn0Uqxc-1592910129056)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623154046537.png)]
在這裏插入圖片描述
重啓reboot或者init 6 進入系統測試是否正常。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KwufpxiZ-1592910129057)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623154146134.png)]

三:修復GRUB引導故障

GRUB是大多數linux系統默認使用的引導程序,可以通過啓動菜單的方式選擇進入不同的操作系統(如果有的話)

3.1:故障原因

  • 當配置文件/boot/grub/grub.conf丟失

  • 關鍵配置出現錯誤

  • MBR記錄中的引導程序遭到破壞時

3.2:故障現象

  • 系統引導停滯,顯示“grub>”提示符,無法完成進一步的系統啓動過程
    在這裏插入圖片描述

3.3:解決思路

第一步:嘗試手工輸入引導命令(成功率很低,不建議)

第二步:進入急救模式,重寫或者從備份中恢復grub.conf

第三步:向MBR扇區中重建grub程序

3.4:修復實驗步驟

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yKDLuymY-1592910129057)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623155135225.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9cmQ5zSa-1592910129057)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623155258311.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-eogA8Wa5-1592910129057)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623181757253.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-l5csBK3U-1592910129057)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623145634365.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-JfLWu76t-1592910129059)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623150120849.png)]

  • 進入救援模式後切根
 chroot /mnt/sysimage/ 

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9wzEAtQA-1592910129060)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623182015549.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CtmjNa3J-1592910129060)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623182153444.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ipC6CzKg-1592910129062)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623182256526.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-eSFEHMTo-1592910129062)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623182321983.png)]

四:遺忘root用戶的密碼

4.1:故障原因

  • 遺忘root用戶的密碼

4.2:故障現象

  • 無法進行需要root權限的管理操作
  • 若沒有其他可用賬號,將無法登錄系統

4.3:解決思路

  • 進入急救模式,重設密碼

4.4:修復實驗步驟

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oHf3q9F9-1592910129062)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623183004242.png)]

重啓之後直接選擇root 輸入新設置的密碼就OK

五:對於上述三個實驗的一些總結

  • 選擇急救模式,進入救援centos系統的方式都是一樣的
  • 加載鏡像系統命令
chroot /mnt/sysimage
  • 重新構建grub菜單系統命令
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg

六:系統服務控制–使用systemd管理系統

  • systemd不是一個單獨的命令,而是一個集合體
  • systemctl 是管理系統的主要命令,管理單個服務效率更高
  • hostnamectl 是用於查看與修改當前主機信息的命令

6.1:系統服務控制

  • systemctl命令可以控制系統服務,此命令涵蓋了之前版本操作系統的service命令和chkconfig 命令兩者的功能

  • 使用systemctl命令,可以省略服務單元名稱的標識.service,即:不輸入後綴標識,systemctl命令默認將後綴標識當做.service來處理

常用方式
systemctl 控制類型 服務名稱

常用控制類型
start  啓動
stop   停止
restart  重新啓動		'//重新啓動,會中斷服務,此服務的PID值會改變'
reload  重新加載		'//重新加載配置文件不會中斷服務,此服務的PID值會改變'
status  查看服務狀態

例如:
[root@localhost ~]# systemctl start postfix		'//啓動postfix服務'
[root@localhost ~]# systemctl stop postfix		'//停止postfix服務'
[root@localhost ~]# systemctl restart postfix		'//重新啓動postfix服務'
[root@localhost ~]# systemctl reload postfix		'//重新加載postfix服務配置文件'
生產環境中建議使用reload命令來重新加載服務

6.2:Linux系統的運行級別

6.2.1:查看運行級別

runlevel 命令
runlevel 只能查看切換運行級別與當前運行級別

例如
[root@localhost ~]# runlevel 
N 5		'//N 是上一次運行的級別,5是這一次運行的級別。因爲是開機後就查看,所以上一次的運行級別顯示爲N(no)'
'若從init 5 切換到 init 3 ,在init3中輸入runlevel命令,則會顯示 5 3'

systemctl 工具
systemctl 能查看默認的運行級別

6.2.2:臨時切換運行級別

init 命令
init的命令參數是運行級別所對應的數字

init的命令參數有 0到6七個運行級別
init 0代表關機
init 3代表切換到字符界面
init 5代表切換到圖形界面
init 6代表重啓
init運行級別 Systemd 的 target 說明
0 target 關機狀態,使用該級別時會關閉主機
1 rescue.target 單用戶模式,不需要密碼驗證即可登錄系統,多用於系統維護
2 multi-user.target 用戶定義/域特定運行級別,默認等同於3
3 multi-user.target 字符界面的完整用戶模式,大多數服務器主機運行在此級別
4 multi-user.target 用戶定義/域特定運行級別,默認等同於3
5 graphical.target 圖形界面的多用戶模式,提供了圖形桌面操作環境
6 reboot.target 重新啓動,使用該級別時將會重啓主機
systemctl 工具
systemctl 的命令參數是具體的target
進入init 3 = systemctl isolate multi-user.target		(multi-user:多用戶)
進入init 5 = systemctl isolate graphical.target		(graphical:圖形化的)
  • 目標:原本開機自動進入圖形化界面,現在想變成字符化界面
[root@localhost ~]# systemctl get-default 		'查看現在開機默認的進入界面'
graphical.target		'發現是圖形化模式'
[root@localhost ~]# find / -name multi-user.target	 '查詢multi-user.target在哪個目錄下'
/usr/lib/systemd/system/multi-user.target
[root@localhost ~]# find / -name default.target		'查詢default.target在哪個目錄下'
/etc/systemd/system/default.target
/usr/lib/systemd/system/default.target
/usr/lib/systemd/user/default.target
[root@localhost ~]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target		'創建multi-user.target的軟件了並刪除原本的鏈接,將文件存放在/etc/systemd/system/default.target中'
[root@localhost ~]# systemctl get-default 		'查詢現在開機默認的進入界面'
multi-user.target		                        '已經修改成字符化界面'
[root@localhost ~]# 

6.3:優化啓動過程(開機自啓)

6.3.1:系統服務的管理工具

  • ntsysv 工具

    提供一個交互式,可視化窗口(僞圖形化界面)

    可以在字符終端運行

    便於集中管理多個服務

  • systemctl 工具

    不提供交互式,可視化窗口

    管理單個服務效率更高

6.3.2:ntsysv工具

[root@localhost ~]# ntsysv		'//進入ntsysv僞圖形化界面'
*符號代表開機自啓
空格  代表開啓不自啓
Tab鍵 切換到選項(確定,取消)
空格鍵可以輸入 * 或者取消 *

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-An8dbPIA-1592910129063)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200623185705612.png)]

6.3.3:systemctl 工具

[root@localhost ~]# systemctl enable httpd		'//將httpd服務設置開機自啓'
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# systemctl disable httpd		'//將httpd服務設置關閉開機自啓'
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
[root@localhost ~]# 

6.4:系統服務的啓動和查看

6.4.1:設置開機啓動

  • 在運行着的系統上啓動服務不能確保該服務在重啓後依然啓動
  • 同理:在運行着的系統上關閉服務不能確保該服務在重啓後依然關閉
  • 一般用systemctl 命令管理開機自啓動服務
命令基本格式
systemctl [enable|disable] name.service

例如
[root@localhost ~]# systemctl enable httpd		'//將httpd服務設置開機自啓'
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# systemctl disable httpd		'//將httpd服務設置開啓不啓動,即禁用服務'
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
  • 從返回信息可以看出:

systemctl enable 命令相當於在 /etc/systemd/system目錄中添加一個軟鏈接,指

向/sur/lib/systemd/system 目錄中的.service文件

而systemctl disable 則是從 /etc/systemd/system目錄中移除該軟鏈接

開機時,systemd只執行啓動/etc/systemd/system目錄中的配置文件

6.4.2:查看服務啓動狀態

命令基本格式
systemctl status mame.service  '//查看服務啓動狀態'

例如
[root@localhost ~]# systemctl status httpd
 httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 三 2019-11-13 23:46:33 CST; 16min ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 2174 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─2174 /usr/sbin/httpd -DFOREGROUND
           ├─2176 /usr/sbin/httpd -DFOREGROUND
           ├─2177 /usr/sbin/httpd -DFOREGROUND
           ├─2178 /usr/sbin/httpd -DFOREGROUND
           ├─2179 /usr/sbin/httpd -DFOREGROUND
           └─2180 /usr/sbin/httpd -DFOREGROUND

11月 13 23:46:33 localhost.localdomain systemd[1]: Starting The Apache HTTP Se....
11月 13 23:46:33 localhost.localdomain httpd[2174]: AH00558: httpd: Could not r...
11月 13 23:46:33 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

服務狀態關鍵字
load   配置文件被處理
active(running)		一個或多個進程在持續運行
active(exited)		成功完成一個“一次性”配置
active(waiting)		運行但等待“事件”
inactive			未運行
enabled			開啓自啓
disable			開啓不自啓
static			不能自動啓動,只能隨其他單元啓動而啓動

查看服務狀態除了status選項,systemctl還提供了另外兩種查詢服務狀態的方法
[root@localhost ~]# systemctl is-active httpd		'//查看httpd服務是否啓動成功狀態'
active		'//啓動成功'
[root@localhost ~]# systemctl is-failed httpd		'//查看httpd服務是否啓動失敗狀態'
active		'//沒有啓動失敗'

查看服務自啓動狀態
[root@localhost ~]# systemctl is-enabled httpd		'//查看httpd服務自啓動狀態'
disabled

netstat -ntap   	'查看所有tcp協議端口'
'netstat:查看網絡中正在跑的服務器端口,'
'n:以數字形式顯示,'
't:tcp,'
'a:all,'
'p:協議'
[root@localhost ~]# netstat -ntap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1310/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      985/sshd            
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      986/cupsd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1286/master  
以上表示IPV4的地址       
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::22                   :::*                    LISTEN      985/sshd            
tcp6       0      0 ::1:631                 :::*                    LISTEN      986/cupsd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1286/master         
以上表示IPV6的地址
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章