Linux啟動(dòng)過程分析和常見錯(cuò)誤匯總
一.Linux引導(dǎo)過程
1.開機(jī)自檢
服務(wù)器主機(jī)開機(jī)以后,將根據(jù)主板 BI0S中的設(shè)置對CPU(CentralProcessingUnit,中央處理器)、內(nèi)存、顯卡、鍵盤等設(shè)備進(jìn)行初步檢測,檢測成功后根據(jù)預(yù)設(shè)的啟動(dòng)順序移交系統(tǒng)控制權(quán),大多時(shí)候會移交給本機(jī)硬盤。
2.MBR引導(dǎo)
當(dāng)從本機(jī)硬盤中啟動(dòng)系統(tǒng)時(shí),首先根據(jù)硬盤第一個(gè)扇區(qū)中BR(MasterBoot Record,主引導(dǎo)記錄)的設(shè)置,將系統(tǒng)控制權(quán)傳遞給包含操作系統(tǒng)引導(dǎo)文件的分區(qū);或者直接根據(jù)MBR記錄中的引導(dǎo)信息調(diào)用啟動(dòng)菜單(如 GRUB)準(zhǔn)雜準(zhǔn)昶隱
3.GRUB菜單
對于 Linux 操作系統(tǒng)來說,GRUB(GRand Unified Bootloader,統(tǒng)一啟動(dòng)加載器)是使用最為廣泛的多系統(tǒng)引導(dǎo)器程序。系統(tǒng)控制權(quán)傳遞給GRUB以后,將會顯示啟動(dòng)菜單給用戶選擇,并根據(jù)所選項(xiàng)(或采用默認(rèn)值)加載 Linux 內(nèi)核文件,然后將系統(tǒng)控制權(quán)轉(zhuǎn)交給內(nèi)核。需要注意的是,Centos7采用的是GRUB2 啟動(dòng)引導(dǎo)器。
4.加載Linux內(nèi)核
Linux 內(nèi)核是一個(gè)預(yù)先編譯好的特殊二進(jìn)制文件,介于各種硬件資源與系統(tǒng)程序之間,負(fù)責(zé)資源分配與調(diào)度。內(nèi)核接過系統(tǒng)控制權(quán)以后,將完全掌控整個(gè)Linux操作系統(tǒng)的運(yùn)行過程。在0penEuler 系統(tǒng)中,默認(rèn)的內(nèi)核文件位于“/boot/vmlinuz-6.6.0-72.0.0.76.oe2403sp1.x86_64”。
5.systemd進(jìn)程初始化
為了完成進(jìn)一步的系統(tǒng)引導(dǎo)過程,Linux內(nèi)核首先將系統(tǒng)中的“/sbin/init”程序加載到內(nèi)存中運(yùn)行(運(yùn)行中的程序稱為進(jìn)程),init 進(jìn)程負(fù)責(zé)完成一系列的系統(tǒng)初始化過程,最后等待用戶進(jìn)行登錄。
二.系統(tǒng)初始化進(jìn)程及文件
1.init進(jìn)程
Linux 操作系統(tǒng)中的進(jìn)程使用數(shù)字進(jìn)行標(biāo)記,每個(gè)進(jìn)程的身份標(biāo)記號稱為 PID。在引導(dǎo)Linux 操作系統(tǒng)的過程中,“/sbin/init”是內(nèi)核第一個(gè)加載的程序,因此 init 進(jìn)程對應(yīng)的 PID號總是為 1。init 進(jìn)程運(yùn)行以后將陸續(xù)執(zhí)行系統(tǒng)中的其他程序,不斷生成新的進(jìn)程,這些進(jìn)程稱為 init 進(jìn)程的子進(jìn)程。反過來說,init 進(jìn)程是這些進(jìn)程的父進(jìn)程。當(dāng)然,這些子進(jìn)程也可以進(jìn)一步生成各自的子進(jìn)程,依次不斷繁衍下去,最終構(gòu)成一棵枝繁葉茂的進(jìn)程樹,共同為用戶提供服務(wù)。
2.systemd進(jìn)程
Systemd 是 Linux 操作系統(tǒng)的一種 init軟件,Cent0s7系統(tǒng)中采用了全新的 Systemd 啟動(dòng)方式,取代了傳統(tǒng)的 SysVinit。Systemd 啟動(dòng)方式使系統(tǒng)初始化時(shí)諸多服務(wù)并行啟動(dòng),大大提高了開機(jī)效率。0penEuler 系統(tǒng)中“/sbin/init”是“/lib/systemd/systemd”的鏈接文件。換言之,0penEuler 系統(tǒng)中運(yùn)行的第一個(gè) init 進(jìn)程是“/lib/systemd/systemd”。systemd 守護(hù)進(jìn)程負(fù)責(zé) Linux 的系統(tǒng)和服務(wù),systemctl 用于控制 systemd 管理的系統(tǒng)和服務(wù)狀態(tài)。Systemd 將其管理的資源組織成各種類型的單元(Unit)。
Systemd 使用的各種單元類型:
單元類型 | 擴(kuò)展名 | 說明 |
Service | .service | 描述一個(gè)系統(tǒng)服務(wù) |
Socket | .socket | 描述一個(gè)進(jìn)程間通信的套接字 |
Device | .device | 描述一個(gè)內(nèi)核識別的設(shè)備文件 |
Mount | .mount | 描述一個(gè)文件系統(tǒng)的掛載點(diǎn) |
Automount | .automount | 描述一個(gè)文件系統(tǒng)的自動(dòng)掛載點(diǎn) |
Swap | .swap | 描述一個(gè)內(nèi)存交換設(shè)備或交換文件 |
Poth | .poth | 描述一個(gè)文件系統(tǒng)中文件或目錄 |
Timer | .timer | 描述一個(gè)定時(shí)器(用于實(shí)現(xiàn)類似cron的調(diào)度任務(wù)) |
Snapshot | .snapshot | 用于保存一個(gè)systemd的狀態(tài) |
Scope | .scope | 使用systemd的總線接口以編程的方式創(chuàng)建外部進(jìn)程 |
Slice | .slice | 描述居于Cgroup的一組通過層次組織的管理系統(tǒng)進(jìn)程 |
Target | .target | 描述一個(gè)systemd的單元 |
排除系統(tǒng)啟動(dòng)類故障
三.MBR扇區(qū)故障
1.備份MBR扇區(qū)數(shù)據(jù)
由于 MBR扇區(qū)中包含了整個(gè)硬盤的分區(qū)表記錄,因此該扇區(qū)的備份文件必須存放到其他的存儲設(shè)備中,否則在恢復(fù)時(shí)將無法讀取到備份文件。例如,執(zhí)行以下操作可以將第一塊硬盤(nvme0n1)的MBR扇區(qū)備分到第二塊硬盤的 sda1 分區(qū)中(掛載到/mbr 目錄)。
2.模擬MBR扇區(qū)故障
這里仍然使用 dd 命令,人為地將MBR扇區(qū)的記錄覆蓋,以便模擬出 MBR扇區(qū)被破壞的故障情況(切記要先做好備份,并且將備份文件存放到其他硬盤)。例如,執(zhí)行以下操作可以從設(shè)備文件zero中讀取512 字節(jié)的數(shù)據(jù),并將其覆蓋到第一塊硬盤(nvme0n1),從而破壞 MBR 扇區(qū)中的數(shù)據(jù)。
3.從備份文件恢復(fù)MBR扇區(qū)數(shù)據(jù)
由于 MBR扇區(qū)被破壞以后,就無法再從該硬盤啟動(dòng)系統(tǒng),所以需要使用其他硬盤中的操作系統(tǒng)進(jìn)行引導(dǎo),或者直接使用0penEuer系統(tǒng)的安裝光盤進(jìn)行引導(dǎo)。不管使用哪種方式,目的都是相同的--獲得一個(gè)可以執(zhí)行命令的 Shell 環(huán)境,以便從備份文件中恢復(fù) MBR 扇區(qū)中的數(shù)據(jù)。以使用 0penEuler 安裝光盤引導(dǎo)為例,當(dāng)出現(xiàn)安裝向?qū)Ы缑鏁r(shí),選擇“Troubleshooting”選項(xiàng),進(jìn)入修復(fù)故障頁面。
然后系統(tǒng)會自動(dòng)?xùn)苏矣脖P中的 Linux分區(qū)并嘗試將其掛載到/mnt/sysimage 目錄(選擇“1”確認(rèn)并按 Enter 鍵繼續(xù))。接下來會出現(xiàn)rescue 字符界面。
最后,按 Enter 鍵后將進(jìn)入帶“sh-4.2#”提示符的 Bash Shell 環(huán)境,只要執(zhí)行相應(yīng)的命令掛載保存有備份文件的硬盤分區(qū)(sda1),并將數(shù)據(jù)恢復(fù)到硬盤“/dev/nvme0n1”中即可,具體探作如下。需要注意的是,當(dāng)前使用的系統(tǒng)環(huán)境是光盤中的Linux 目錄結(jié)構(gòu)。
四.GRUB引導(dǎo)故障
大多數(shù) Linux 操作系統(tǒng)默認(rèn)使用的引導(dǎo)程序,可以通過啟動(dòng)菜單的方式選擇進(jìn)入不同的操作系統(tǒng)(如果有)。當(dāng)配置文件/boot/grub2/grub.cfg 丟失,或者關(guān)鍵配置出現(xiàn)錯(cuò)誤,或者 MBR中的引導(dǎo)程序遭到破壞時(shí),Linux主機(jī)啟動(dòng)后可能只出現(xiàn)“grub”的提示符,無法完成進(jìn)一步的系統(tǒng)啟動(dòng)過程。
由于在“grub>”環(huán)境中使用的命令較為復(fù)雜,且一般也難以記住相關(guān)的命令選項(xiàng)、內(nèi)核加載參數(shù)等,因此用戶可以采用另一種修復(fù)辦法,同樣使用 0penEuler 的安裝光盤引導(dǎo)進(jìn)入急救模式(參考上一小節(jié))。若分區(qū)表未被破壞,將備份過的/boot/grub/grub.cfg文件恢復(fù)即可。
如果未備份過/boot/grub2/grub.cfg,則需要重新建立/boot/grub2/grub.cfg文件,若未執(zhí)行“chroot /mnt/sysimage”命令,則重新建立的 grub.cfg 配置文件應(yīng)該位于/mnt/sysimage/boot/grub2/grub. cfg.
如果是MBR扇區(qū)中的引導(dǎo)程序出現(xiàn)損壞,則在重建grub.cfg配置文件后仍然可能無法成功啟動(dòng)系統(tǒng),這時(shí)可以通過 0penEuler 救援模式的 Shell 環(huán)境重新安裝 grub 引導(dǎo)程序。切換到待修復(fù)的 Linux操作系統(tǒng)根環(huán)境,執(zhí)行“grub2-install /dev/sda”命令可以重新將 grub 引導(dǎo)程序安裝到第一塊硬盤(nvme0n1)的 MRB 扇區(qū),具體操作如下:
注意:執(zhí)行“dd if=/dev/zero of=/dev/sda bs=446 count=1”命令可以模擬出對 MBR 扇區(qū)中 GRUE引導(dǎo)程序的破壞(注意先做好備份),但并不會破壞分區(qū)表(實(shí)際上分區(qū)表保存在MBR扇區(qū)中的第447~510 字節(jié)中,MBR 總共 512 字節(jié),前 446 字節(jié)是主引導(dǎo)記錄,從第 447 字節(jié)開始后的 64 字節(jié),每 16 字節(jié)為一組,是硬盤分區(qū)表)。
遺忘root用戶的密碼
進(jìn)入急救模式的 Shell環(huán)境,切換到待修復(fù) Linux 操作系紡的根目錄環(huán)境,直接執(zhí)行“passwd root”命令重設(shè)root 用戶的密碼即可;或者修改/ete/shadow 文件,將 root 用戶的密碼字段清空,重啟后以空密碼可登錄系統(tǒng)。以下操作即為進(jìn)入急救模式重設(shè) root 用戶密碼。
五.服務(wù)控制及優(yōu)化啟動(dòng)過程
1.系統(tǒng)服務(wù)控制
在 OpenEuler 系統(tǒng)中,各種系統(tǒng)服務(wù)的控制腳本默認(rèn)放在/usr/lib/systemd 目錄下。通過systemctl命令工具可以實(shí)現(xiàn)對指定系統(tǒng)服務(wù)的控制,語法格式如下:
systemctl 控制類型 服務(wù)名稱 |
常見的控制類型:
start | 運(yùn)行指定的系統(tǒng)服務(wù)程序 |
stop | 終止指定的系統(tǒng)服務(wù)程序 |
restart | 重啟指定的系統(tǒng)服務(wù)程序 |
reload | 不退出服務(wù)程序,只刷新配置 |
status | 查看指定的系統(tǒng)服務(wù)的運(yùn)行狀態(tài)及相關(guān)信息 |
2.切換運(yùn)行級別
(1.查看系統(tǒng)的target
明確當(dāng)前系統(tǒng)所在的 target 將有助于管理員排除一些應(yīng)用故障。若未能確知當(dāng)前所處的目標(biāo),可以直接執(zhí)行“runlevel”命令進(jìn)行査詢,顯示結(jié)果中的兩個(gè)字符分別表示切換前的目標(biāo)、當(dāng)前的目標(biāo)。若之前尚未切換過運(yùn)行級別,則第1列將顯示“N”。
認(rèn)的 target,命令如下:
若用戶想查看系統(tǒng)啟動(dòng)時(shí)默認(rèn)運(yùn)行的target,可以執(zhí)行“systemctlget-default”命令以顯示系統(tǒng)默認(rèn)的target。
(2.切換系統(tǒng)的target
運(yùn)行級別 | systemd的target | 說明 |
init 0 | 關(guān)機(jī) | 使用該級別時(shí)將會關(guān)閉主機(jī) |
init 1 | rescue.target | 單用戶模式,不需要密碼驗(yàn)證即可登錄,多用于系統(tǒng)維護(hù) |
init 2 | multi-user.target | 用戶定義/域特定運(yùn)行級別。默認(rèn)等同于3 |
init 3 | multi-user.target | 字符界面的完整多用戶模式,大多數(shù)服務(wù)器主機(jī)運(yùn)行在此級別 |
init 4 | multi-user.target | 用戶定義/域特定運(yùn)行級別。默認(rèn)等同于3 |
init 5 | graphical.tatget | 圖形界面的多用戶模式,提供了圖形桌面操作環(huán)境 |
init 6 | reboot.target | 重新啟動(dòng),使用該級別時(shí)將會重啟主機(jī) |
上述內(nèi)容中的運(yùn)行級別切換均為臨時(shí)切換,若要永久切換運(yùn)行級別,可通過n(鏈接)命令指定當(dāng)前系統(tǒng)的默認(rèn)運(yùn)行級別。例如,執(zhí)行如下命令可將當(dāng)前系統(tǒng)的開機(jī)默認(rèn)運(yùn)行級別從graphical.target 更改 multi-user.target。其中,-s 選項(xiàng)表示創(chuàng)建軟鏈接;-f 表示強(qiáng)行刪除任何已存在的目標(biāo)文件。
六.優(yōu)化啟動(dòng)過程
1.常見的系統(tǒng)服務(wù)
服務(wù)名稱 | 用途簡介 | 備注 |
atd | 延期、定時(shí)執(zhí)行任務(wù) | 建議關(guān)閉 |
bluetooth | 發(fā)現(xiàn)、認(rèn)證藍(lán)牙相關(guān)設(shè)備 | 建議關(guān)閉 |
crond | 按預(yù)定周期執(zhí)行計(jì)劃任務(wù) | 建議開啟 |
irqbalance | 多核心cpu處理器的調(diào)度支持 | 建議開啟 |
kdump | 記錄內(nèi)核崩潰的內(nèi)存信息 | 建議關(guān)閉 |
lvm2-monitor | lvm管理及監(jiān)控 | 建議開啟 |
netfs | 訪問共享文件夾等網(wǎng)絡(luò)文件系統(tǒng) | 建議開啟 |
network | 配置及使用網(wǎng)卡、網(wǎng)絡(luò)地址 | 建議開啟 |
restorecond | SELinux安全機(jī)制的文件監(jiān)控和恢復(fù)功能 | 建議關(guān)閉 |
rhnsd | 訪問Red Hat Network,獲取通知、提交訂閱等 | 建議關(guān)閉 |
rpcgssd | 管理NFS訪問中的客戶程序語境 | 建議關(guān)閉 |
saslauthd | 基于文本的身份認(rèn)證 | 建議關(guān)閉 |
smartd | 監(jiān)控本地硬盤的狀態(tài)并故障報(bào)告 | 建議開啟 |
smb | 文件共享服務(wù) | 建議關(guān)閉 |
sshd | 提供遠(yuǎn)程登陸和管理Linux主機(jī)的功能 | 建議開啟 |
rsyslog | 記錄內(nèi)核、系統(tǒng)的日志信息 | 建議開啟 |
vsftpd | 通過FTP提供文件上傳、下載功能 | 建議關(guān)閉 |
2.優(yōu)化開機(jī)自動(dòng)加載的服務(wù)
Linux操作系統(tǒng)在每次開機(jī)后會進(jìn)入默認(rèn)的systemd 運(yùn)行目標(biāo)(如字符模式或圖形模式),并運(yùn)行該目標(biāo)中默認(rèn)設(shè)為啟動(dòng)的各種系統(tǒng)服務(wù)。若要禁止某些系統(tǒng)服務(wù)自動(dòng)運(yùn)行,可以使用ntsysv或者systemctl 工具進(jìn)行優(yōu)化。
(1.使用 ntsysv 工具
單獨(dú)執(zhí)行“ntsysv”命令時(shí)僅用于管理當(dāng)前運(yùn)行目標(biāo)中的服務(wù);通過“--level”選項(xiàng)可以對指定運(yùn)行目標(biāo)(級別)中的服務(wù)進(jìn)行管理。例如,執(zhí)行“ntsysv--level35”命令可以打開 ntsysv 管理程序
操作時(shí)按1、↓方向鍵來選擇不同的系統(tǒng)服務(wù),按Space(空格)鍵設(shè)置服務(wù)的默認(rèn)啟動(dòng)狀態(tài)(“[*]”表示啟動(dòng),“[]”表示關(guān)閉)。如果要查看所選定服務(wù)的說明信息,按F1鍵可以獲取幫助。
(2.使用 systemctl 工具
systemctl工具與 ntsysv的功能類似,但是 systemctl 不提供交互式的操作界面,它用于査詢或設(shè)置系統(tǒng)服務(wù)的默認(rèn)啟動(dòng)狀態(tài)。當(dāng)需要設(shè)置某一個(gè)服務(wù)在當(dāng)前運(yùn)行目標(biāo)中的默認(rèn)啟動(dòng)狀態(tài)時(shí),使用systemct1工具會更有效率。使用systemctl 工具控制服務(wù)開機(jī)啟停的命令格式如下:
systemctl 控制選項(xiàng) 服務(wù)名稱 |
常見選項(xiàng):
enable | 開機(jī)自動(dòng)開啟 |
disable | 開機(jī)自動(dòng)關(guān)閉 |
is-enable | 查看開機(jī)啟動(dòng)狀態(tài) |
到此這篇關(guān)于Linux啟動(dòng)過程分析和常見錯(cuò)誤匯總的文章就介紹到這了,更多相關(guān)Linux啟動(dòng)過程和常見錯(cuò)誤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Centos 6.9環(huán)境下創(chuàng)建用戶及刪除用戶的方法
這篇文章主要介紹了Centos 6.9環(huán)境下創(chuàng)建用戶及刪除用戶的方法,結(jié)合實(shí)例形式分析了Centos 6.9創(chuàng)建用戶及刪除用戶相關(guān)的用戶名、密碼創(chuàng)建、刪除及權(quán)限設(shè)置等相關(guān)命令使用方法,需要的朋友可以參考下2018-04-04Linux下Oracle設(shè)置定時(shí)任務(wù)備份數(shù)據(jù)庫的教程
這篇文章主要介紹了Linux下Oracle設(shè)置定時(shí)任務(wù)備份數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11增強(qiáng)Linux內(nèi)核中訪問控制安全的方法
這篇文章主要給大家介紹了關(guān)于增強(qiáng)Linux內(nèi)核中訪問控制安全的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12linux下實(shí)現(xiàn)web數(shù)據(jù)同步的四種方式(性能比較)
這篇文章主要介紹了linux下常用的四種web數(shù)據(jù)同步方法,并且說明了每個(gè)方法的功能與優(yōu)勢,需要的朋友可以參考下2013-09-09CentOS6.7系統(tǒng)中配置LNMP環(huán)境
LNMP 代表的就是:Linux系統(tǒng)下Nginx+MySQL+PHP這種網(wǎng)站服務(wù)器架構(gòu)。LNMP 這種架構(gòu)目前也是非常流行,今天我們就來看下如何在CentOS6.7系統(tǒng)中配置LNMP環(huán)境2016-10-10