1. 程式人生 > 實用技巧 >Linux系統啟動過程及其修復過程簡析(CentOS5、6)

Linux系統啟動過程及其修復過程簡析(CentOS5、6)

Linux組成

Linux: kernel+rootfs

kernel: 程序管理、記憶體管理、網路管理、驅動程式、檔案系統、安全功能

rootfs:程式和glibc

庫:函式集合, function, 呼叫介面(標頭檔案負責描述)

過程呼叫:procedure,無返回值

函式呼叫:function

程式:二進位制執行檔案

核心設計流派:

單核心(monolithic kernel):Linux

把所有功能集成於同一個程式

微核心(micro kernel):Windows, Solaris

每種功能使用一個單獨子系統實現


核心

Linux核心特點:

支援模組化:.ko(核心物件)

如:檔案系統,硬體驅動,網路協議等

支援核心模組的動態裝載和解除安裝

組成部分:

核心檔案:/boot/vmlinuz-VERSION-release

ramdisk:輔助的偽根系統

CentOS 5: /boot/initrd-VERSION-release.img

CentOS6,7: /boot/initramfs-VERSION-release.img

模組檔案:/lib/modules/VERSION-release


示例:Linux的核心檔案

wKiom1feQFbRZArfAABBWby7AtM306.png


CentOS 6的啟動流程

1.載入BIOS的硬體資訊,獲取第一個啟動裝置

2.讀取第一個啟動裝置MBR的引導載入程式(grub)的啟動資訊

3.載入核心作業系統的核心資訊,核心開始解壓縮,並嘗試驅動所有的硬體裝置

4.核心執行init程式,並獲取預設的執行資訊

5.init程式執行/etc/rc.d/rc.sysinit檔案

6.啟動核心的外掛模組

7.init執行執行的各個批處理檔案(scripts)

8.init執行/etc/rc.d/rc.local

9.執行/bin/login程式,等待使用者登入

10.登入之後開始以Shell控制主機


Linux啟動流程

wKioL1feQcWxLnUXAAHhfW5uN8E023.jpg

1、POST:Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主機板、記憶體RAM、硬碟子系統、顯示子系統、串並行介面、鍵盤、CD-ROM光碟機等硬體情況的檢測。

ROM:BIOS,Basic Input and Output System,儲存著有關計算機系統最重要的基本輸入輸出程式,系統資訊設定、開機加電自檢程式和系統啟動自舉程式等。

RAM:CMOS互補金氧半導體,儲存各項引數的設定按次序查詢引導裝置,第一個有載入程式的裝置為本次啟動裝置

2、MBR:

其中Bootloader佔據446位元組,分割槽表佔據64位元組,magic num佔據2位元組。MBR將載入Bootloader去開始後邊的工作。

3、bootloader: 引導載入器,載入程式

Linux:功能豐富,提供選單,允許使用者選擇要啟動系統或不同的核心版本;把使用者選定的核心裝載到記憶體中的特定空間中,解壓、展開,並把系統控制權移交給核心

LILO:Linux Loader

Bootloader(核心載入器)位於第0磁軌第0扇區的446位元組是最前邊的446位元組!Bootloader的工作機制:bootloader可以訪問檔案系統,而核心則作為檔案而存在。所以bootloader可以訪問核心檔案,深入的說bootloader訪問核心檔案時,是將核心檔案Vmlinz所在的整個分割槽當作根去訪問的,如訪問/Vmlinz而根"/"本身的存在位置是由核心檔案自己決定。(因為每個檔案必須要有一個自己的起始路徑)現代我們常用的核心載入器是grub(Grand Unified Bootloader)以此grub來載入核心。載入核心之前grub所做的工作

4、GRUB:就是MBR中的前 446 個位元組,是BooTLoader的一種,它的作用是要選擇要啟動的核心

primary boot loader : 1st stage,1.5 stage

secondary boot loader :2nd stage,分割槽檔案

/boot/grub資料夾裡面有各種啟動的檔案備份

wKiom1feRTHzgtXSAAB7HdmUcp4377.png

主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5組成。

device.map:存放的是核心檔案的根分割槽

grub.conf:就是選單列表。裡面設定了可以選擇的核心選單,存放於stage2中。

stage:用於grub載入程式過大,所以分2段引導,第一段存放在MBR中,第二段存放於核心檔案系統中,第一段引導完成後可以找到第二段。 但是,第二段是存放於核心檔案系統中的,此時還沒有格式化檔案系統,如何可以訪問到第二段的 menu.lst 呢??就需要藉助於中間層 stage1_5,有它來協助 stage1 段來訪問 stage2 段。stage1_5通常位於 stage1 欄位後的 63 個扇區。 由於stage2 在記憶體中存放可以使用的檔案系統不確定,所以這就是有多個 stage1_5 的原因了。


示例:grub.conf檔案

wKiom1feSs2RpAwgAAAmBSj4Smg699.png


5、kernel:

自身初始化:

探測可識別到的所有硬體裝置

載入硬體驅動程式(可能借助於ramdisk載入驅動)

以只讀方式掛載根檔案系統

執行使用者空間的第一個應用程式:/sbin/init



系統啟動流程

init程式的型別

SysV: init, CentOS 5之前

配置檔案:/etc/inittab

Upstart: init,CentOS6

配置檔案:/etc/inittab , /etc/init/*.conf

Systemd:systemd, CentOS 7

配置檔案:/usr/lib/systemd/system ,/etc/systemd/system

ramdisk:

核心中的特性之一:使用緩衝和快取來加速對磁碟上的檔案訪問

ramdisk--> ramfs提高速度

CentOS 5: initrd, 工具程式:mkinitrd

CentOS 6: initramfs,工具程式:mkinitrd, dracut

系統初始化:

POST --> BootSequence(BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只讀) --> init(systemd)


/sbin/initCentOS 6之前

執行級別:為系統執行或維護等目的而設定;0-6:7個級別

0:關機

1:單使用者模式(root自動登入), single, 維護模式

2: 多使用者模式,啟動網路功能,但不會啟動NFS;維護模式

3:多使用者模式,正常模式;文字介面

4:預留級別;可同3級別

5:多使用者模式,正常模式;圖形介面

6:重啟

預設級別:3(多使用者CLI模式), 5(圖形化模式)

切換級別:init#

檢視級別:runlevel; who -r

wKiom1feTSyA6Cr4AAAHqRWmAoM174.png


init讀取其初始化檔案:/etc/inittab

初始執行級別(RUN LEVEL)

系統初始化指令碼

對應執行級別的指令碼目錄

捕獲某個關鍵字順序

定義UPS電源終端/恢復指令碼

在虛擬控制檯生成getty

在執行級別5初始化X


CentOS 5的inittab檔案

配置檔案:/etc/inittab

每一行定義一種action以及與之對應的process

id:runlevel:action:process

action:

wait: 切換至此級別執行一次

respawn:此process終止,就重新啟動之

initdefault:設定預設執行級別;process省略

sysinit:設定系統初始化方式,此處一般為指定

/etc/rc.d/rc.sysinit

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc0

l1:1:wait:/etc/rc.d/rc1...

l6:6:wait:/etc/rc.d/rc6


CentOS 6 /etc/inittab和相關檔案

/etc/inittab

設定系統預設的執行級別

id:3:initdefault:

/etc/init/control-alt-delete.conf

/etc/init/tty.conf

/etc/init/start-ttys.conf

/etc/init/rc.conf

/etc/init/prefdm.conf


示例:CentOS6的/etc/inittab檔案。如果需要設定為圖形化啟動,把3改成5即可

wKioL1feT8nBcCTWAACieaknX6E981.png

/etc/rc.d/rc.sysinit: 系統初始化指令碼

(1) 設定主機名

(2) 設定歡迎資訊

(3) 啟用udev和selinux

(4) 掛載/etc/fstab檔案中定義的檔案系統

(5) 檢測根檔案系統,並以讀寫方式重新掛載根檔案系統

(6) 設定系統時鐘

(7) 啟用swap裝置

(8) 根據/etc/sysctl.conf檔案設定核心引數

(9) 啟用lvm及software raid裝置

(10) 載入額外裝置的驅動程式

(11) 清理操作


wKioL1feUM2De59PAABuVeGpGdY621.png

說明:rcN --> 意味著開機讀取/etc/rc.d/rcN.d/

K*: K##*:##執行次序;數字越小,越先執行;數字越小的服務,通常為依賴到別的服務

S*: S##*:##執行次序;數字越小,越先執行;數字越小的服務,通常為被依賴到的服務

啟動服務的指令碼:

for srvin /etc/rc.d/rcN.d/K*; do

$srv stop

done

for srvin /etc/rc.d/rcN.d/S*; do

$srv start

done


示例:屬於init3開機級別的服務程序檔案

wKiom1feURuz67F9AADIyRBpcUY103.png


chkconfig命令 --檢視服務在所有級別的啟動或關閉設定情形:

chkconfig [--list] [name]

新增:

SysV的服務指令碼放置於/etc/rc.d/init.d(/etc/init.d)

chkconfig --add name

#!/bin/bash

#LLLL 表示初始在哪個級別下啟動,-表示都不啟動

# chkconfig: LLLL nnnn

刪除:

chkconfig --del name

修改指定的連結型別

chkconfig [--level levels] name <on|off|reset>

--level LLLL: 指定要設定的級別;省略時表示2345

ntsysv命令:圖形化的chkconfig命令


示例:製作一個模擬服務程序,並啟動它

#chkconfig:2345表示能被這幾個級別的init程式執行,88表示啟動優先順序,22表示關閉優先順序

wKioL1feWGnhR7c_AAA0ekUPFXU537.png

把指令碼複製到/etc/init.d/目錄下面

wKioL1feWWKiEM4KAAA4RQde2vs164.png新增指令碼到服務裡面,可以看見指令碼預設的啟動級別了,這個是根據腳本里面來定義的

wKioL1feWgXAFYKMAAAzVz_x-2U407.png

可以關閉某些執行的級別

wKioL1feWwXi3OrnAAAd60_x2JE741.png

可以檢視到/etc/rc.d/rcN.d/資料夾下面的各種K和S打頭的testservice檔案

wKioL1feYJuhgEowAAB_S64RrME851.png

可以用chkconfig --level N SERVICE on | off 修改服務的開機預設開啟狀態

可以看見,其實/etc/rc.d/rcN.d/下面的K和S打頭的檔案就是一個軟連結而已~

wKioL1feYPKzt--aAACA8F_Uqdg133.png

至於為什麼這些只是一個軟連結的檔案,大家可以參考/etc/rc.d/rc的腳本里面可以看到

例如這裡定義K開頭的服務,這裡只是rc指令碼的一部分。

wKioL1feYyeBxghwAABLs-q6TDo733.png測試此服務開啟,關閉

wKiom1feXBGwP6PmAAArbF6zwtY755.png


守護程序:xinetd管理的服務(很多的服務依賴於此服務)

service 命令:手動管理服務

service 服務start|stop|restart

service --status-all

瞬態(Transient)服務被xinetd程序所管理

進入的請求首先被xinetd代理

配置檔案:/etc/xinetd.conf、/etc/xinetd.d/<service>

與libwrap.so檔案連結

用chkconfig控制的服務:

chkconfigtftpon

wKioL1feZpyTfJM4AABMBWKwRYY380.png

注意:正常級別下,最後啟動一個服務S99local沒有連結至/etc/rc.d/init.d一個服務指令碼,而是指向了/etc/rc.d/rc.local指令碼

不便或不需寫為服務指令碼放置於/etc/rc.d/init.d/目錄,且又想開機時自動執行的命令,可直接放置於/etc/rc.d/rc.local檔案中

/etc/rc.d/rc.local在指定執行級別指令碼後執行

可以根據情況,進行自定義修改


總結:/sbin/init--> (/etc/inittab) --> 設定預設執行級別--> 執行系統初始指令碼、完成系統初始化--> (關閉對應下需要關閉的服務)啟動需要啟動服務--> 設定登入終端


CentOS 6 init程式為: upstart, 其配置檔案:

/etc/inittab, /etc/init/*.conf,配置檔案的語法遵循upstart配置檔案語法格式,和CentOS5不同


示例:破解CentOS5和6的root口令

首先,在進入選單這裡,點選a進入編輯核心引數

wKioL1fehSrBAa8DAAAW7GImK0M233.png

在引數後面加一個1 | s | S | singel 引數都可以,然後輸入回車,進入單機模式

wKiom1fehSvC2ZNVAAAQl4H2xEg187.png

在單機模式下面,直接輸入passwd命令修改root賬號密碼,搞定。

wKioL1fehSuiWOw2AAAHfqjdAs8827.png


grub legacy

CentOS 6啟動流程

POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) --> rootfs--> switchroot--> /sbin/init-->(/etc/inittab, /etc/init/*.conf) --> 設定預設執行級別--> 系統初始化指令碼rc.sysinit--> 關閉或啟動對應級別的服務--> 啟動終端

grub: GRand Unified Bootloader

grub 0.97: grub legacy

grub 2.x: grub2

grub legacy:

stage1: mbr

stage1_5: mbr之後的扇區,讓stage1中的bootloader能識別stage2所在的分割槽上的檔案系統

stage2:磁碟分割槽(/boot/grub/)

配置檔案:/boot/grub/grub.conf <--/etc/grub.conf(軟連結)

stage2及核心等通常放置於一個基本磁碟分割槽


功用

(1) 提供啟動選單、並提供互動式介面

a:核心引數

e: 編輯模式,用於編輯選單

c: 命令模式,互動式介面

(2) 載入使用者選擇的核心或作業系統

允許傳遞引數給核心

可隱藏啟動選單

(3) 為選單提供了保護機制

為編輯啟動選單進行認證

為啟用核心或作業系統進行認證


grub的命令列介面

help: 獲取幫助列表

help KEYWORD: 詳細幫助資訊

find (hd#,#)/PATH/TO/SOMEFILE:

root (hd#,#)

kernel /PATH/TO/KERNEL_FILE: 設定本次啟動時用到的核心檔案;額外還可新增許多核心支援使用的cmdline引數

例如:max_loop=100 selinux=0init=/path/to/init

initrd/PATH/TO/INITRAMFS_FILE: 設定為選定的核心提供額外檔案的ramdisk

boot: 引導啟動選定的核心

cat /proc/cmdline 檢視核心的位置

核心引數文件:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt



識別硬碟裝置:

(hd#,#)

hd#: 磁碟編號,用數字表示;從0開始編號

#: 分割槽編號,用數字表示; 從0開始編號

(hd0,0) 第一塊硬碟,第一個分割槽


手動在grub命令列介面啟動系統:

grub> root (hd#,#)

grub> kernel /vmlinuz-VERSION-RELEASE roroot=/dev/DEVICE

grub> initrd/initramfs-VERSION-RELEASE.img

grub> boot




配置檔案:/boot/grub/grub.conf

default=#: 設定預設啟動的選單項;落單項(title)編號從0開始

timeout=#:指定選單項等待選項選擇的時長

splashp_w_picpath=(hd#,#)/PATH/TO/XPM_FILE:選單背景圖片檔案路徑

hiddenmenu:隱藏選單

password [--md5] STRING: 啟動選單編輯認證

title TITLE:定義選單項“標題”, 可出現多次

root (hd#,#):grub查詢stage2及kernel檔案所在裝置分割槽;為grub“根”

kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的核心

initrd/PATH/TO/INITRAMFS_FILE: 核心匹配的ramfs檔案

password [--md5] STRING: 啟動選定的核心或作業系統時進行認證


wKioL1fekNyjt2bkAABaKBCjGG0885.png


grub-md5-crypt命令

破解root口令:

啟動系統時,設定其執行級別1

進入單使用者模式:

(1) 編輯grub選單(選定要編輯的title,而後使用e命令);

(2) 在選定的kernel後附加1, s, S或single都可以;

(3) 在kernel所在行,鍵入“b”命令


openssl命令

openssl passwd -1 密碼加密

openssl passwd -salt "HRSby" -1 指定鹽為"HRSby"


grub安裝

安裝grub:

(1) grub-install

安裝grub stage1和stage1_5到/dev/DISK磁碟上,並複製GRUB相關檔案到DIR/boot目錄下

grub-install --root-directory=DIR /dev/DISK

(2) grub

grub> root (hd#,#)

grub> setup (hd#)


示例1:新建一個啟動項,並且調整核心引數

修改grub.conf檔案的引數

default=1 即是開機的時候預設啟動第二個選項,預設是0

password --md5 XXX 那裡的意思,如果在title前面,那麼進入選單欄前面的時候會提示輸入密碼,

如果在title後面。那麼在進入指定的選單的時候,會提示輸入密碼。

kernel 核心後面加了max_loop=20 selinux=0 rhgb quiet,一會看一下效果

wKioL1feqt6g1do2AAA-9y7C5oo491.png然後在此處,預設選中了剛建立的Hello Linux的啟動選單

wKioL1fepBmCtdHHAAATl94oH3k362.png

在進入選單後,會發現,提示我們輸入密碼

wKiom1feqWbyIJxsAAACiaghFZE081.png

kernel rhgb quiet 的效果,靜默進入作業系統,這個功能不建議選用,因為看不到開機的啟動選單

wKiom1fepGGzRv8fAABxY_viZHA706.png

如果沒有核心引數rhgb quiet的話,我們可以看見每個程序的開機自檢過程

wKiom1fepBzRVVteAAAnZUJSTVI499.png

wKioL1fepBqhRJN0AABaMjPvnd0467.png

kernel max_loop=20的效果,預設的話只有7個

wKiom1fepByBb35jAADUVbw-LQk456.png


示例2:當引導有問題的時候,手動輸入命令啟動系統



假如grub裡面設定了系統啟動密碼

wKiom1ffR7ejFZrpAAAyXw-IN18818.png

啟動的時候發現忘記了密碼,囧,怎麼辦

wKiom1ffR7jQ_0wZAAAGTgKzzVg581.png

此時可以退回選單,選擇c的的cli啟動方式。

wKioL1ffR7jSy4rkAAAWIV1uXRA003.png

手動輸入root的位置,核心,以及initramfss的位置,然後輸入boot載入

wKioL1ffR7mR8ApfAAAYaL9Y_Xc848.png

因為selinux的關係,啟動的時候可能系統會進行自檢,此時等待一會就可以了,又後者可以在核心引數那裡直接新增selinux=0來跳過系統自檢

wKiom1ffSS_RF3JOAAAZItGZsDQ127.png

然後發現已經可以登陸進去系統了,此時再登陸進去,然後把grub.conf裡面的password刪掉就可以了

wKioL1ffSU2TTXc6AAAFuvPe9xA836.png


示例3:分割槽情況下,刪除/boot 和/etc/fstab,破壞446位元組的mbr資訊,並恢復之

首先,破壞mbr前446個位元組,把/boot目錄下面所有的檔案刪除,把/etc/grub.conf檔案刪除


wKioL1ffc8SQzc_5AAAY82RSpjY979.png

此時再重啟,會發現,計算機根本就識別不到硬碟上面的系統

wKiom1ffc8Xzod9rAAAf50Jsclo999.png

此時我們放入光碟(此步驟也可以從其他有同樣檔案的地方來scp拷一份過來)


wKiom1ffc8CQ6bMrAACL_AjAW_U292.png

載入光盤裡面的救援模式

wKiom1ffc8SigQW7AAa-4vcf1VM528.png


然後進去救援模式,會提示我們的計算機上面沒有發現linux分割槽,因為我們前面把分割槽表破壞了

wKioL1ffc8XR6jkLAAAMOG-L4Hw781.png

此處選擇開啟shell就可以

wKiom1ffc8aTDgcYAAAKEEzS8Uk808.png

進入到救援模式的cli介面,此時需要操作的是:

  1. 假設我們並不瞭解此計算機的分割槽,首先要查詢原來的分割槽表,此時可以用用lsblk命令檢視到此前系統的塊裝置資訊,雖然可以看到塊裝置資訊,但是我們還是不能夠了解此前的分割槽資訊,df命令出來的結果也並沒有顯示,所以,此時我們只能夠推斷此前的/根目錄是在哪個位置。

  2. 建立一個空的目錄,然後把塊裝置掛載到此目錄

  3. 通過掛載,然後ls檢視裡面的資訊,然後可以推斷出來此前的根目錄大概是哪裡,還有boot分割槽在哪裡,找到根目錄和boot目錄,然後就可以進入下一步的操作了

  4. 建立/etc/fstab檔案,以儲存我們已知的分割槽資訊

wKioL1ffc8bjS2ifAAA__bk8_TA976.png

此處由於暫時只知道兩個資訊,然後把資訊寫入到此檔案wKiom1ffc8fT2Xj-AAAF0RZOVo4369.png

完成此掛載資訊後,千萬不能自己再對根目錄等進行操作,以免造成其他問題,此處應該要重啟電腦

wKioL1ffc8fRhHDRAAAN5bVjCBk930.png

重啟電腦以後再進入救援模式,會發現,已經提示有找到linux系統了,並且把系統掛載到了/mnt/sysp_w_picpath目錄下面

wKiom1ffc8iyknQ-AAATWLkbOEU749.png

wKioL1ffc8iw1VJCAAAIItG5hF0118.png

之前那一步驟,只是稍微的修復了系統配置檔案裡面的兩個分割槽的資訊而已

下面,我們需要對核心和grub進行修復

1.首先,掛載光碟機到一個空目錄,然後安裝光盤裡面的核心~

wKiom1ffc8ih-ew7AAANOw8OklA973.png

wKioL1ffc8nAiAt5AAAY-8HtufY990.png

2.安裝完核心以後,我們可以切換到真實的系統,可以發現/boot目錄下面的檔案大部分已經修復了,但是此處還是沒有grub.conf檔案

3.然後我們開始對grub檔案進行修復,命令是grub-install DEVICE

修復的過程中,會彈出來好多資訊,注意的是千萬不要中斷此操作,不然會出現問題

wKioL1ffc8mzQ5-cAAAm4PugEl0113.png

等了一段時間以後,會發現修復已經完成,但是grub檔案還是沒有,因為此處只是修復mbr

wKiom1ffc8mx7H0FAAAgFVnEP2s963.png

然後我們自己建立一個grub.conf的檔案,並且手動新增以下等核心資訊

wKiom1ffc8qxz0a1AAAKyWEHJas030.png

編輯完,重啟計算機

wKioL1ffc8rC5h4MAAAGCQjnLH0922.png

然後此處會遇上selinux自檢,需要等待一段時間了,如果想調過此步操作,可以在之前的操作裡面新增到kernel那一行的最後那裡輸入selinux=0,以此來關閉selinux,不過不是很建議這麼操作。

wKiom1ffc8qCF0GwAAAJq1PuAU4691.png

好久以後,發現登陸介面已經出來了~此時修復操作已經完畢。

wKioL1ffc8vBqa7GAAAFwvTwCek598.png

注意:此操作是恢復了,但是分割槽表裡面的資訊,還是剛剛手動新增的分割槽表的資訊,所以重啟掛載那些分割槽也是一個麻煩的事情,通過此案例,大家可以知道mbr引導,/boot目錄和/etc/fstab的重要性了吧?所以這些檔案,最好平時就最好備份的操作,以免等到出現問題才來修復,會浪費很多的時間的。


示例4:假設是在邏輯卷情況下,刪除mbr 、/boot 和/etc/fstab,並且恢復之

之前的示例3是在普通的磁碟上面的修復操作,但是生產環境中,很可能我們會用上邏輯卷等,那麼修復的操作就一樣了,但是修復的原理是跟示例3的幾乎是一樣的,只是在修復邏輯卷的地方稍有不同。

此處的前面的步驟是跟示例3的是一樣的,所以此處只介面跟示例3不一樣的地方


首先,也是需要進入救援模式

當mbr 、/boot 和/etc/fstab等資訊刪除以後,進入救援模式裡面也是提示找不到linux分割槽,此處我們依然不需要理會

wKioL1ffc8XR6jkLAAAMOG-L4Hw781.png

進入到救援模式裡面,我們直接用blkid命令,發現邏輯卷也沒有顯示出來,所以此處應該用邏輯卷的命令

1、輸入lvscan,然後就可以查詢到此前系統裡面的邏輯卷,並且此處帶有邏輯卷板的卷標,一看就知道該邏輯卷是掛載到哪裡的,這樣的話對於我們修復的幫助就非常大

2、輸入vgchange -ay啟用邏輯卷分割槽,預設的話是不啟用的,所以開始的時候用blkid是不會顯示,在啟用以後再輸入blkid,會發現已經可以檢視到相關的資訊。

3、找到分割槽資訊的,下一步就跟示例3的一樣,需要掛載分割槽資訊了

wKioL1ffhKLjFDTzAABQ5je0zJg295.png

編輯/etc/fstab檔案,輸入相關的掛載資訊

wKioL1ffhKLxvgM6AAAMnfxDYOg369.png

編輯完文件,此刻就可以重啟了

wKiom1ffhKLjZmHaAAAPY7WmXfA284.png

重啟完再重新進入救援模式,會提示系統已經掛載到/mnt/sysp_w_picpath目錄裡面的,跟此前的操作是一樣的

wKiom1ffc8iyknQ-AAATWLkbOEU749.png

進入到救援模式,就開始修復grub的mbr資訊,此操作過程跟示例3的一樣就不重複展示了。

修復完mbr的資訊,此時就可以手動建立grub.conf檔案

此處的kernel後面root=/dev/vg0/root,而不是此前的/dev/sda2,需要注意了,應該現在的root根目錄是掛載在邏輯卷裡面,此處就是指定根的目錄位置,編輯完grub.conf檔案,確認沒有問題就重啟電腦

wKioL1ffhKOzsVHjAAAK9rQO72k680.png

重啟完電腦以後,可以發現已經可以重新進入系統了,此處實驗已經完畢。

wKiom1ffhKTwN5eMAABAwNY_2PE516.png


示例5:修改Linux開機背景

有時候,Linux黑色的開機北京略顯無聊,此處我們當然也可以修改拉

在grub.conf檔案裡面我們可以此處有一個指向(hd0,0)/grub/splash.xpm.gz檔案,這個就是開機的背景檔案了,並且是個壓縮的檔案。

wKiom1ffiJiCSs0PAAAxDLyd7Ko608.png

此檔案我們可以在/boot/grub目錄下面看到它,好了,既然知道檔案在那裡,那麼修改起來大家就知道怎麼操作了吧?不過有一個要求就是此圖片的解析度為640x480.而且替換的背景的圖片也需要跟原檔案一樣的字尾名,就是需要生成XXX.xpm.gz這樣格式的圖片

此處我們需要一個linux的工具ImageMagick軟體

wKiom1ffibmiTaZ7AAAlZaNCTq0387.png

然後把需要替換的原圖,用此工具編輯一下,然後把編輯完的圖片放到/boot/grub/目錄下面

wKioL1ffibqCN97fAAAz5P6jKjo008.png

這就是修改完開機背景的linux系統,是不是很炫酷?

wKiom1ffib_BG8kyAAWYGgCxKH8619.png

修改圖片具體操作步驟

wKioL1ffib-zSIL5AACF61LZo0g814.png


轉載於:https://blog.51cto.com/weiweidefeng/1854066