centos7啟動過程及systemd詳細說明

来源:http://www.cnblogs.com/mfyang/archive/2017/08/02/7275966.html
-Advertisement-
Play Games

開機啟過程 POST—>BOOT SEQUENCE—> BOOTLOADER—>KERNEL + INITRAMFS(INITRD)—>ROOTFS—>/sbin/init POST:加電自檢 當開機按下電源按鈕後,電腦開始加電,主板上的BIOS或UEFI基本輸入輸出程式開始對硬體進行檢查,檢查內 ...


開機啟過程

POST—>BOOT SEQUENCE—> BOOTLOADER—>KERNEL + INITRAMFS(INITRD)—>ROOTFS—>/sbin/init

POST:加電自檢

當開機按下電源按鈕後,電腦開始加電,主板上的BIOS或UEFI基本輸入輸出程式開始對硬體進行檢查,檢查記憶體,CPU等等吧,當檢測到錯誤的時候機器會中斷或者啟動不了,這個做過電腦維護的人都知道,記憶體氧化可導至開不了機,還有的機器如果沒插滑鼠鍵盤自檢也不會通過卡在那裡了,不會繼續往下走。

Boot sequence:選擇引導順序

當自檢通過後,接著就要選擇引導介質或方式,是通過光碟啟動,硬碟啟動,網路啟動,還是U盤啟動,這些也是在BIOS中設定的,所以設定的第一啟動項是哪個就從那個開始引導,這個裝過WINDOWS的都很熟悉了。

Bootloader:引導載入器

確定引導介質後便開始從介質中裝載引導程式如grub2,這個是一個微小程式,我們知道MBR引導記錄大小為512位元組,其中前446個位元組就是Bootloader,主要用來引導用戶選擇要啟動的系統或不同的內核版本,把用戶選定的內核裝載到RAM中的特定空間中,解壓,展開,而後把系統控制權移交給內核。

grub2就是Linux中Bootloader程式,由於MBR記錄限制,所以grub2分為兩個部分:

1.在MBR引導記錄中,大小為446位元組,主要功能是引導啟動介質的grub主體文件

2.partition,/boot/grub[2],此為grub的主體。

KERNEL + INITRAMFS(INITRD)—>ROOTFS :載入內核

這時候kernel開始初始化,探測可識別的硬體設備,載入硬體啟動程式。以只讀方式載入根文件系統

kernel在記憶體中載入時,為了模擬系統環境,會生成一個ramdisk文件,來進行下一步操作,等到載入到真正的根文件系統時,就會退出ramdisk,切換到真正的根文件系統中去。

ramdisk:記憶體上臨時虛擬的系統

ramdisk(虛擬磁碟,雙緩衝,雙緩存)----> ramfs(虛擬文件系統)

centos5:initrd

工具程式:mkinitrd

centos6,7:initramfs

工具程式:dracut,mkinitrd

/sbin/init:運行用戶空間的第一個應用程式

init:

     Centos 5: SysV init       配置文件:/etc/inittab

     Centos 6: Upstart         配置文件:/etc/inittab;/etc/init/*.conf(主要)

     Centos 7: systemd        配置文件:/etc/systemd/system;/usr/lib/systemd/system

至此,內核空間就已經啟動完畢,內核啟動完成接著開始啟動用戶態啟動過程。systemd是個守護進程,pid號為1,後面所有啟動的服務或進程都是systemd的子進程及子進程的子進程。

那麼用戶態的啟動順序又是什麼樣的呢?

設置預設允許級別—>初始化腳本,完成系統初始化--->關閉及啟動對應級別下的服務----->設置登錄終端----->[啟動圖形終端]

 

Systemd新特性:

系統引導時實現服務並行啟動,沒有順序之分

按需激活進程

支持系統狀態快照

基於依賴關係定義服務控制邏輯

關鍵特性:

基於socket的激活機制:socket與服務程式分離;按需激活程式或服務,可並行啟動

基於bus的激活機制:

基於device的激活機制:當某個硬體設備變得可用時就可激活某設備

基於path的激活機制

系統快照:保存各unit的當前狀態信息於持久存儲設備中

向後相容sysv init腳本

不相容:

systemctl命令固定不變,非由systemd啟動的服務,systemctl無法與之通信

核心概念:unit

配置文件進行標識和配置,文件中主要包含了系統服務,監聽socket,保存的系統快照以及其它與init相關的信息,保存至:

/usr/lib/systemd/system

/run/systemd/system

/etc/systemd/system

unit的類型

Service unit:文件擴展名為.service 無需執行許可權,用於定義系統服務

Target unit:文件擴展名為.target,用於模擬實現“運行級別”

Device unit:文件擴展名為.device,用於定義內核識別的設備

Mount unit:文件擴展名為.mount,定義文件系統掛載點

Socket unit:文件擴展名為.socket,用於標識進程間通信用的socket文件

Snapshot unit:文件擴展名為.snapshot,管理系統快照

Swap unit:文件擴展名為.swap,用於標識swap設備

Automount unit:文件擴展名為.automount,文件系統的自動掛載點

Path unit:文件擴展名為.path,用於定義文件系統中的一個文件或目錄

管理系統服務

啟動:systemctl start name.service

停止:systemctl stop name .service

重啟:systemctl restart name.service

重載:systemctl reload name.service

條件式重啟:systemctl try-restart name.service

查看某服務當前是否運行:systemctl is-active name.service

查看所有已經激活的服務:systemctl list-units –type service systemctl list-units –type service –-all

開機自啟動:systemctl enable name.service

開機不啟動:systemctl disable name.service

查看所有服務開機自啟動狀態:systemctl list-unit-files –-type service

查看服務是否開機自啟:systemctl is-enabled name.service

查看服務的依賴關係:systemctl list-dependencies name.service

禁止設定為開機自啟:systemctl mask name.service

取消禁止設定為開機自啟:systemctl unmask name.service

 

Target units:(模擬運行級別)

unit配置文件,以.target後輟名結尾

關機:runlevel0.target,poweroff.target

救援:runlevel1.target,rescue.target

多用戶:multi-user.target

圖形:graphical.target

重啟:reboot.target

級別切換:systemctl isolate name.target

查看級別:systemctl list-units –-type target       systemctl get-default

設置級別:systemctl set-default name.target

切換至緊急救援模式:systemctl rescue

切換至emergency模式:systemctl emergency(服務不載入不啟動,驅動不載入,更徹底)

其它常用命令

關機:systemctl halt,systemctl poweroff

重啟:systemctl reboot

掛起:systemctl suspend

快照:systemctl hibernate

快照並掛起:systemctl hybrid-sleep


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • https://trace.ncbi.nlm.nih.gov/Traces/study/?acc=PRJNA323422 lne是perl的參數,效果是: perl接收你的鍵盤輸入(用後面的代碼)處理後,輸出一個換行,然後等待接收下一個輸入 perl -lne '$id=substr($_,0,6) ...
  • 在終端輸入 來創建配置文件 按i插入 插入以下內容(用戶數任意,註意最後一個用戶密碼後面沒有逗號) {"server":"my_server_ip", #填入你的IP地址"local_address": "127.0.0.1","local_port":1080,"port_password": { ...
  • 1.創建一個本地項目,比如/d/text文件夾 2.建立本地倉庫 首先進入text文件夾 初始化執行指令: 將所有文件添加到倉庫執行指令: 執行指令(雙引號內是提交註釋): git commit -m "提交文件" 執行指令(雙引號內是提交註釋): 3.關聯github倉庫 到github text ...
  • sratookit 下載後解壓 移動到專門安裝生物信息軟體的目錄下 加入環境變數 測試 下載測試文件SRR390728,預設存放在家目錄下的ncbi文件夾中 轉換sra文件的套路: -O 指定輸出路徑 --gzip 指定輸出格式為gzip壓縮格式(fastqc軟體可以直接識別gzip壓縮的文件) - ...
  • 1.創建用戶 groupadd sftp 2.添加用戶並設置為sftp組 useradd -g sftp -s /sbin/nologin -M sftp (/sbin/nologin為禁止登錄shell的用戶) 3.設置用戶密碼 passwd sftp 4.創建用戶目錄。並設置許可權。 cd /ho ...
  • LNMP編譯安裝之php安裝--圖文詳解 1、前言 本次安裝採用源碼安裝,主要資源包從官網下載,次要依賴則使用yum進行安裝,本篇只涉及php的安裝,不涉及php的配置,對應nginx如何訪問php,本篇也不涉及。該教程純屬安裝,不涉及任何重要知識點,老少皆宜。 2、安裝步驟 php官網:http: ...
  • 在使用Linux系統時,有時會因為文件創建時間很久,而記不得全全名,只能記得模糊的幾個關鍵字時,就可以使用文件查找命令來進行快速搜索。Linux提供最常用的搜索方有兩個工具locate與find。不過在日常中還是使用find比較多,因為他具有時效性。 一、 locate locate的搜索是基於數據 ...
  • Windows下的常見壓縮格式有.zip和.rar,而Linux下的常見壓縮格式有:gz,bzip2,xz,zip等由於壓縮演算法的不同,所以以上幾個壓縮後的文件大小各不同。 一、gzip 用法: gzip壓縮與解壓完成後會刪除源文件。 二、bzip2 用法: 壓縮文件: 解壓文件: k 不刪除原文件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...