1. 程式人生 > 其它 >演算法-連結串列-之查詢連結串列環的入口節點

演算法-連結串列-之查詢連結串列環的入口節點

一.Linux作業系統引導過程

引導過程圖

第一步 開機自檢

伺服器主機開機以後,將根據主機板BIOS中的設定對CPU(Central Processing Unit,中央處理器)、記憶體、顯示卡、鍵盤等裝置進行初步檢測,檢測成功後根據預設的啟動順序移交系統控制權,大多時候回移交給本機硬碟。

第二步 MBR引導
當從本機硬碟中啟動系統時,首先根據硬碟第一扇區中MBR(Master Boot Record,主引導記錄)的設定,將系統控制權傳遞給包含作業系統引導檔案的分割槽;或者直接根據MBR記錄中的引導資訊呼叫啟動選單(如GRUB)。hexdump -C -n 512 /dev/sda 檢視MBR前512個位元組 dd if=/dev/sda of=/root/hu/lianxi bs=512 count=1 備份

執行放在MBR扇區裡的啟動GRUB載入程式

第三步 GRUB選單
對於Linux作業系統來說,GRUB(BRand Unified BootLoader,同意啟動載入器)時使用最為廣泛的多系統引導器程式。系統控制權傳遞給GRUB以後,將會顯示啟動選單提供給使用者選擇,並根據所選項(或採用預設值)載入Linux核心檔案,然後將系統控制權轉交給核心。

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

第四步 載入Linux核心
Linux核心是一個預先編譯好的特殊二進位制檔案,介於各種硬體資源與系統程式之間,負責資源分配與排程。核心接過系統控制權以後,將完全掌控整個Linux作業系統的執行過程。記憶體檔案系統initramfs 是經過gzip 的cpio歸檔,其中包含啟動時所有必要的硬體核心模組,初始化指令碼等。

把核心和映象檔案系統夾在到記憶體中

第五步 init程序初始化
為了完成進一步的系統引導過程,Linux核心首先將系統中的“/sbin/init”程式載入到記憶體中執行(執行中的程序稱為程序),init程序負責完成一系列的系統初始化過程,最後等待使用者進行登入。

夾在硬體驅動程式,核心把init程序夾在到記憶體中執行

系統初始化程序

init程序

由Linux核心載入執行/sbin/init程式;

init程序是系統中第一個程序,是所有程序的父程序;

init程序的PID(程序標記)號永遠為1.

Systemd

Systemd是Linux作業系統的一種init軟體;

從CentOS 7版本的系統開始systemd成為PID恆為1的初始化程序,是核心第一個載入的程式。

systemd程序是不允許被輕易終止的。需要切換不同的系統執行狀態時,可以向systemd程序發 送正確的執行命令,由systemd 自身來完成相關操作。

CentOS 7中執行的第一個 init程序是/lib/systemd/systemd,可以通過pstree命令檢視

Systemd 單元型別

執行級別所對應的Systemd 目標

二.排除啟動類故障

實驗

修復MBR扇區故障

故障原因:病毒,木馬等造成的破壞

不正確的分割槽操作、磁碟讀寫誤操作

故障現象: 找不到載入程式,啟動終端

無法載入作業系統,開機後黑屏

解決思路: 提前做好備份檔案

以安裝光碟引導進入急救模式

從備份檔案中恢復

第一步

echo "- - -"> /sys/class/scsi_host/host0/scan

echo "- - -"> /sys/class/scsi_host/host1/scan

echo "- - -"> /sys/class/scsi_host/host2/scan 新建啟用硬碟

lsblk 檢視硬碟資訊

fdisk /dev/sdb 分割槽

mkfs.xfs /dev/sdb1 格式化

mkdir data 新建data目錄

mount /dev/sdb1/mnt/data 掛載

df 檢視掛載

dd if=/dev/sda of=/mnt/data/mbr.bak bs=512 count=1

複製/dev/sda/mnt/data並改名為mbr.bak 512位元組,一次

dd if=/dev/zero of=/dev/sda bs=512 count=1破壞檔案

複製0並覆蓋到/dev/sba前512位元組,使硬碟無發正常讀取

reboot 重啟

從光碟機載入,選擇Troubleshooting

Rescue a CentOS system進入救援系統

進入救援系統後

1Contime

Mkdir /bak 新建掛載目錄點

Mount /dev/sdb1 /bak 將硬碟sdb1掛載到bak

Dd if=/bak/mbr.bak of=/dev/sda 讀取掛載點資訊並複製mbr.bak到sda

Reboot 重啟

方法二

mount /dev/sdb1 /mnt/data 掛載

scp /mnt/data/mbr.bak 192.168.72.105:/opt/ 複製到目標目錄

切換到2號機

此時cd到opt下檢視,檔案已經複製到opt下

切換到1號機

[root@localhost mntJ#dd if=/dev/zero of=/dev/sda bs=512 count=1破壞

重啟

從光碟機載入,選擇Troubleshooting

選Rescue a CentOS system進入救援系統

進入救援系統後

選3)Skip to shell

Ifconfig ens33 192.168.72.22/24 設定臨時網段

Ping 192.168.72.105通 ping

Scp 192.168.72.105:/opt/mbr.bak ./ 複製到當前目錄

Yes

密碼

Dd if=/mbr.bak of=/dev/sda 從根目錄下複製並替換硬碟sda

Reboot 重啟

完成修復

修復GRUB引導故障

故障原因

遺忘root密碼

三.服務控制及切換執行級別

四.優化啟動過程