1. 程式人生 > 其它 >系統的引導過程與服務控制

系統的引導過程與服務控制

一:Linux 作業系統的引導,及systemd

1.1 引導過程

(1 ),開機自檢

開機後,將根據主機板BIOS 中的設定對硬體進行檢測,如cpu,記憶體,顯示卡,等裝置,檢測第一個引導系統的裝置,可以是硬碟,光碟機,U盤,網路引。

(2),MBR 引導

當從本機硬碟中啟動系統時,根據第一個硬碟的第一個扇區裡的MBR設定呼叫GRUB啟動選單。centOS7 使用GRUB2 啟動引導器

(3),GRUB選單

GRUB載入程式讀取GRUB的配置檔案 /boot/grub2/grub.cfg,獲取核心和映象檔案系統的設定和路徑位置

(4),載入Linux 核心

將核心和映象檔案系統 載入到記憶體中 。CentOS 7預設的核心檔案位於"/boot/vmlinuz-3.10.0-514.e17.x86 64"

(5),init 程序初始化

載入硬體驅動程式,核心將init 程序載入到記憶體中執行。init程式是在/sbin/init 中。CentOS 7 中為Systemd

1.2 系統初始化程序

1.2.1 init 程序

  • 由Linux核心載入執行/sbin/init 程式
  • init 程序是系統中的第一個程序 ,是所有程序的父程序
  • init 程序的 PID 號永遠是為1

1.2.2 Systemd (也被稱為上帝程序)

  • Systemd 是Linux 作業系統的一種init 軟體
  • Centos 7 中採用全新的Systemd 啟動方式 ,取代傳統的SysVint
  • CentOS 7 中執行的第一個init 程序是 /lib/systemd/systemd

#傳統 SysVinit 依賴於序列執行she11指令碼啟動服務導致效率低下,系統啟動速度較慢

# systemd 能夠將更多的服務程序並行啟動,並且具有提供按需啟動服務的能力,使得啟動更少程序,從而提高系統啟動速度。

pstree 命令 可以檢視到 程序樹

ps -aux 可以檢視到PID號

在CentOS 7 中,檢視 /sbin/init 可以發現是一個指向 /lib/systemd/systemd 的軟連結

1.3 systemd 單元型別

單元: 在systemd,一個單元指的是讓系統知道如何進行操作和管理的資源。這是systemd知道如何去處理的主要物件。這些資源使用叫作單元檔案的配置檔案來定義。

單元型別:

systemd根據他們描述的資源型別來分類單元。最簡單的確定單元型別的方式是使用它們的型別字尾,其被附加在資源名後面
單元型別 副檔名 說明
Service .service 描述一個系統服務
Socket .socket 描述一個程序間通訊的套接字
Device .device 描述一個核心識別的裝置檔案
Mount .mount 描述一個檔案的掛載點
Automount .automount 描述一個檔案系統的自動掛載點
Swap .swap 描述一個記憶體交換裝置或交換檔案
Path .path 描述一個檔案系統中檔案或目錄
Timer .timer 描述一個定時器(用於實現類似cron的排程任務)
Snapshot .snapshot 用於儲存一個systemd的狀態
Scope .scope 使用systemd的匯流排介面以程式設計的方式建立外部程序
Slice .slice 描述居於Cgroup的一組通過層次組織的管理系統程序
Target .target 描述一組systemd的單元

二: Linux 系統的執行級別

2.1 執行級別

CentOS 7 的 /etc/rc.d 目錄下有7個 rc0-6.d 的目錄,對應系統的7個執行級別(0-6)

0: 系統停機(關機)模式,系統預設執行級別不能設定為0,否則不能正常啟動,一開機就自動關機。 1:單使用者模式,root許可權,用於系統維護,禁止遠端登陸,就像Windows下的安全模式登入。 2:多使用者模式,沒有NFS網路支援。 3:完整的多使用者文字模式,有NFS,登陸後進入控制檯命令列模式。 4:系統未使用,保留一般不用,在一些特殊情況下可以用它來做一些事情。例如在膝上型電腦的電池用盡時,可以切換到這個模式來做一些設定。 5:圖形化模式,登陸後進入圖形GUI模式或GNOME、KDE圖形化介面,如X Window系統。 6:重啟模式,預設執行級別不能設為6,否則不能正常啟動,就會一直開機重啟開機重啟。

init 執行級別

此命令可以快速切換系統的執行級別

2.2 檢視執行級別

2.2.1 runlevel 命令

runlevel 命令可以檢視到之前一次的執行級別和當前的執行級別

[root@localhost ~]# runlevel
N 5                                   #N 為null ,表示執行級別尚未改變。 5 為當前的執行級別

[root@localhost ~]# runlevel
5 3                                   # 5 表示上一次的執行級別為 5 , 當前的執行級別為 3

2.2.2 who 命令

who -r 命令 可以檢視到當前和上一次的執行級別

[root@localhost ~]# who -r
         執行級別 3 2021-06-22 19:46                   最近=5      #當前的執行級別是5 ,上一次的是3

2.2.3 systemctl 工具

systemctl 可以檢視到預設的執行級別

[root@localhost ~]# systemctl get-default    #檢視當前的預設執行級別
graphical.target                             #這個預設執行級別是 5 圖形化模式            

2.3 切換執行級別

2.3.1 臨時切換執行級別

(1) 使用init 命令

init 命令後面跟上執行級別,可以快速切換

[root@localhost ~]# runlevel
5 3 
[root@localhost ~]# init 5       #切換到 5 執行級別
[root@localhost ~]# runlevel
3 5

(2) systemctl 命令

systemctl isolate systemd的target

執行級別與systemd 的target對應

執行級別 Systemd的target 說明
0 target(poweroff.target) 系統停機(關機)模式,系統預設執行級別不能設定為0,否則不能正常啟動,一開機就自動關機。
1 rescue.target 單使用者模式,root許可權,用於系統維護,禁止遠端登陸,就像Windows下的安全模式登入。
2 multi-user.target 多使用者模式,沒有NFS網路支援。
3 multi-user.target 完整的多使用者文字模式,有NFS,登陸後進入控制檯命令列模式。
4 multi-user.target 系統未使用,保留一般不用,在一些特殊情況下可以用它來做一些事情。例如在膝上型電腦的電池用盡時,可以切換到這個模式來做一些設定。
5 graphical.target 圖形化模式,登陸後進入圖形GUI模式或GNOME、KDE圖形化介面,如X Window系統。
6 reboot.target 重啟模式,預設執行級別不能設為6,否則不能正常啟動,就會一直開機重啟開機重啟。
[root@localhost ~]# runlevel
3 5
[root@localhost ~]# systemctl isolate multi-user.target          #切換到執行級別3
[root@localhost ~]# runlevel
5 3
[root@localhost ~]# systemctl isolate poweroff.target             #切換到執行級別0 (關機)
Connection closing...Socket close.

2.3.2 設定預設執行級別與永久切換執行級別

(1) systemctl set-default systemd的target

[root@localhost ~]# 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@localhost ~]# systemctl get-default      #檢視預設執行級別
multi-user.target

2 ln -fs /lib/systemd/system/執行級別target標籤 /etc/systemd/system/default.target

檢視預設執行級別,實際是檢視軟連線檔案 /etc/systemd/system/default.target 。所以,可以通過修改該軟連線的原始檔,來修改預設執行級別

[root@localhost ~]# ll /etc/systemd/system/default.target      
lrwxrwxrwx. 1 root root 41 6月  23 19:04 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target

[root@localhost ~]# ls /lib/systemd/system/multi-user.target
/lib/systemd/system/multi-user.target
[root@localhost ~]# ln -sf /lib/systemd/system/multi-user.target  /etc/systemd/system/default.target   
#將/etc/systemd/system/default.target 強制做成 /lib/systemd/system/multi-user.target 的軟連線。
[root@localhost
~]# systemctl get-default multi-user.target #預設執行級別是 3 multi-user.target

三:優化啟動過程

3.1 ntsysv 工具

(1)特點:

  • 該工具提供一個互動式,視覺化視窗
  • 可以在字元終端執行
  • 便於集中管理多個服務
  • 用於控制服務是否開機自啟動

(2) 使用

命令列使用 ntsysv 命令進入

ntsysv 工具操作:

* 號表示啟用自啟

空格打上 * 或者 取消*

tab 鍵切換游標 到 【確定】 【取消】 或者切換回選項操作

3. 2 systemctl 命令

systemctl 不提供互動式,視覺化視窗

管理單個服務效率更高

用於CentOs 7 版本

systemctl 可以用 enable 和disable 開啟和關閉 服務的自動啟動

用 is-enabled 檢視 服務是否設定了開機自啟

[root@localhost ~]# systemctl is-enabled httpd    #檢視httpd 服務是否設定了開機自啟
disabled                                          #httpd 沒有設定開機自啟

[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 is-enabled httpd
enabled

[root@localhost ~]# systemctl disable  httpd      #關閉 httpd 的開機自啟
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
[root@localhost ~]# systemctl is-enabled httpd
disabled

systemctl [選項] 命令 服務

常用選項

--after #在某個服務之後啟動

--before #在某個服務之前啟動