Linux系统启动过程及其修复过程简析(CentOS5、6)
Linux組成
Linux: kernel+rootfs
????kernel: 進(jìn)程管理、內(nèi)存管理、網(wǎng)絡(luò)管理、驅(qū)動(dòng)程序、文件系統(tǒng)、安全功能
????rootfs:程序和glibc
????庫(kù):函數(shù)集合, function, 調(diào)用接口(頭文件負(fù)責(zé)描述)
????????過(guò)程調(diào)用:procedure,無(wú)返回值
????????函數(shù)調(diào)用:function
????程序:二進(jìn)制執(zhí)行文件
內(nèi)核設(shè)計(jì)流派:
????單內(nèi)核(monolithic kernel):Linux
????????把所有功能集成于同一個(gè)程序
????微內(nèi)核(micro kernel):Windows, Solaris
????????每種功能使用一個(gè)單獨(dú)子系統(tǒng)實(shí)現(xiàn)
內(nèi)核
Linux內(nèi)核特點(diǎn):
????支持模塊化:.ko(內(nèi)核對(duì)象)
????????如:文件系統(tǒng),硬件驅(qū)動(dòng),網(wǎng)絡(luò)協(xié)議等
????支持內(nèi)核模塊的動(dòng)態(tài)裝載和卸載
組成部分:
????核心文件:/boot/vmlinuz-VERSION-release
????????ramdisk:輔助的偽根系統(tǒng)
????????CentOS 5: /boot/initrd-VERSION-release.img
????????CentOS6,7: /boot/initramfs-VERSION-release.img
????模塊文件:/lib/modules/VERSION-release
示例:Linux的核心文件
CentOS 6的啟動(dòng)流程
1.加載BIOS的硬件信息,獲取第一個(gè)啟動(dòng)設(shè)備
2.讀取第一個(gè)啟動(dòng)設(shè)備MBR的引導(dǎo)加載程序(grub)的啟動(dòng)信息
3.加載核心操作系統(tǒng)的核心信息,核心開(kāi)始解壓縮,并嘗試驅(qū)動(dòng)所有的硬件設(shè)備
4.核心執(zhí)行init程序,并獲取默認(rèn)的運(yùn)行信息
5.init程序執(zhí)行/etc/rc.d/rc.sysinit文件
6.啟動(dòng)核心的外掛模塊
7.init執(zhí)行運(yùn)行的各個(gè)批處理文件(scripts)
8.init執(zhí)行/etc/rc.d/rc.local
9.執(zhí)行/bin/login程序,等待用戶登錄
10.登錄之后開(kāi)始以Shell控制主機(jī) ? ?
Linux啟動(dòng)流程
1、POST:Power-On-Self-Test,加電自檢,是BIOS功能的一個(gè)主要部分。負(fù)責(zé)完成對(duì)CPU、主板、內(nèi)存RAM、硬盤子系統(tǒng)、顯示子系統(tǒng)、串并行接口、鍵盤、CD-ROM光驅(qū)等硬件情況的檢測(cè)。
????ROM:BIOS,Basic Input and Output System,保存著有關(guān)計(jì)算機(jī)系統(tǒng)最重要的基本輸入輸出程序,系統(tǒng)信息設(shè)置、開(kāi)機(jī)加電自檢程序和系統(tǒng)啟動(dòng)自舉程序等。
????RAM:CMOS互補(bǔ)金屬氧化物半導(dǎo)體,保存各項(xiàng)參數(shù)的設(shè)定按次序查找引導(dǎo)設(shè)備,第一個(gè)有引導(dǎo)程序的設(shè)備為本次啟動(dòng)設(shè)備
2、MBR:
? ??其中Bootloader占據(jù)446字節(jié),分區(qū)表占據(jù)64字節(jié),magic num占據(jù)2字節(jié)。MBR將加載Bootloader去開(kāi)始后邊的工作。
3、bootloader: 引導(dǎo)加載器,引導(dǎo)程序
????Linux:功能豐富,提供菜單,允許用戶選擇要啟動(dòng)系統(tǒng)或不同的內(nèi)核版本;把用戶選定的內(nèi)核裝載到內(nèi)存中的特定空間中,解壓、展開(kāi),并把系統(tǒng)控制權(quán)移交給內(nèi)核
????LILO:Linux Loader
Bootloader(內(nèi)核加載器)位于第0磁道第0扇區(qū)的446字節(jié)是最前邊的446字節(jié)!Bootloader的工作機(jī)制:bootloader可以訪問(wèn)文件系統(tǒng),而內(nèi)核則作為文件而存在。所以bootloader可以訪問(wèn)內(nèi)核文件,深入的說(shuō)bootloader訪問(wèn)內(nèi)核文件時(shí),是將內(nèi)核文件Vmlinz所在的整個(gè)分區(qū)當(dāng)作根去訪問(wèn)的,如訪問(wèn)/Vmlinz而根"/"本身的存在位置是由內(nèi)核文件自己決定。(因?yàn)槊總€(gè)文件必須要有一個(gè)自己的起始路徑)現(xiàn)代我們常用的內(nèi)核加載器是grub(Grand Unified Bootloader)以此grub來(lái)加載內(nèi)核。加載內(nèi)核之前grub所做的工作
4、GRUB:就是MBR中的前 446 個(gè)字節(jié),是BooTLoader的一種,它的作用是要選擇要啟動(dòng)的內(nèi)核
????primary boot loader : 1st stage,1.5 stage
????secondary boot loader :2nd stage,分區(qū)文件
/boot/grub文件夾里面有各種啟動(dòng)的文件備份
主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5組成。
device.map:存放的是內(nèi)核文件的根分區(qū)
grub.conf:就是菜單列表。里面設(shè)置了可以選擇的內(nèi)核菜單,存放于stage2中。
stage:用于grub引導(dǎo)程序過(guò)大,所以分2段引導(dǎo),第一段存放在MBR中,第二段存放于內(nèi)核文件系統(tǒng)中,第一段引導(dǎo)完成后可以找到第二段。 但是,第二段是存放于內(nèi)核文件系統(tǒng)中的,此時(shí)還沒(méi)有格式化文件系統(tǒng),如何可以訪問(wèn)到第二段的 menu.lst 呢??就需要借助于中間層 stage1_5,有它來(lái)協(xié)助 stage1 段來(lái)訪問(wèn) stage2 段。stage1_5通常位于 stage1 字段后的 63 個(gè)扇區(qū)。 由于stage2 在內(nèi)存中存放可以使用的文件系統(tǒng)不確定,所以這就是有多個(gè) stage1_5 的原因了。
示例:grub.conf文件
5、kernel:
? ?自身初始化:
????探測(cè)可識(shí)別到的所有硬件設(shè)備
????加載硬件驅(qū)動(dòng)程序(可能借助于ramdisk加載驅(qū)動(dòng))
????以只讀方式掛載根文件系統(tǒng)
????運(yùn)行用戶空間的第一個(gè)應(yīng)用程序:/sbin/init
系統(tǒng)啟動(dòng)流程
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:
內(nèi)核中的特性之一:使用緩沖和緩存來(lái)加速對(duì)磁盤上的文件訪問(wèn)
????ramdisk--> ramfs提高速度
????CentOS 5: initrd, 工具程序:mkinitrd
????CentOS 6: initramfs,工具程序:mkinitrd, dracut
系統(tǒng)初始化:
????POST --> BootSequence(BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只讀) --> init(systemd)
/sbin/init????CentOS 6之前
運(yùn)行級(jí)別:為系統(tǒng)運(yùn)行或維護(hù)等目的而設(shè)定;0-6:7個(gè)級(jí)別
????0:關(guān)機(jī)
????1:單用戶模式(root自動(dòng)登錄), single, 維護(hù)模式
????2: 多用戶模式,啟動(dòng)網(wǎng)絡(luò)功能,但不會(huì)啟動(dòng)NFS;維護(hù)模式
????3:多用戶模式,正常模式;文本界面
????4:預(yù)留級(jí)別;可同3級(jí)別
????5:多用戶模式,正常模式;圖形界面
????6:重啟
默認(rèn)級(jí)別:3(多用戶CLI模式), 5(圖形化模式)
切換級(jí)別:init#
查看級(jí)別:runlevel; who -r
init讀取其初始化文件:/etc/inittab
????初始運(yùn)行級(jí)別(RUN LEVEL)
????系統(tǒng)初始化腳本
????對(duì)應(yīng)運(yùn)行級(jí)別的腳本目錄
????捕獲某個(gè)關(guān)鍵字順序
????定義UPS電源終端/恢復(fù)腳本
????在虛擬控制臺(tái)生成getty
????在運(yùn)行級(jí)別5初始化X
CentOS 5的inittab文件
配置文件:/etc/inittab
每一行定義一種action以及與之對(duì)應(yīng)的process
????id:runlevel:action:process
????action:
????wait: 切換至此級(jí)別運(yùn)行一次
????respawn:此process終止,就重新啟動(dòng)之
????initdefault:設(shè)定默認(rèn)運(yùn)行級(jí)別;process省略
????sysinit:設(shè)定系統(tǒng)初始化方式,此處一般為指定
????????/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和相關(guān)文件
/etc/inittab
????設(shè)置系統(tǒng)默認(rèn)的運(yùn)行級(jí)別
????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文件。如果需要設(shè)置為圖形化啟動(dòng),把3改成5即可
/etc/rc.d/rc.sysinit: 系統(tǒng)初始化腳本
(1) 設(shè)置主機(jī)名
(2) 設(shè)置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統(tǒng)
(5) 檢測(cè)根文件系統(tǒng),并以讀寫方式重新掛載根文件系統(tǒng)
(6) 設(shè)置系統(tǒng)時(shí)鐘
(7) 激活swap設(shè)備
(8) 根據(jù)/etc/sysctl.conf文件設(shè)置內(nèi)核參數(shù)
(9) 激活lvm及software raid設(shè)備
(10) 加載額外設(shè)備的驅(qū)動(dòng)程序
(11) 清理操作
說(shuō)明:rcN --> 意味著開(kāi)機(jī)讀取/etc/rc.d/rcN.d/
????K*: K##*:##運(yùn)行次序;數(shù)字越小,越先運(yùn)行;數(shù)字越小的服務(wù),通常為依賴到別的服務(wù)
????S*: S##*:##運(yùn)行次序;數(shù)字越小,越先運(yùn)行;數(shù)字越小的服務(wù),通常為被依賴到的服務(wù)
啟動(dòng)服務(wù)的腳本:
????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開(kāi)機(jī)級(jí)別的服務(wù)進(jìn)程文件
chkconfig命令 --?查看服務(wù)在所有級(jí)別的啟動(dòng)或關(guān)閉設(shè)定情形:
????chkconfig [--list] [name]
添加:
????SysV的服務(wù)腳本放置于/etc/rc.d/init.d(/etc/init.d)
????chkconfig --add name
????????#!/bin/bash
????????#LLLL 表示初始在哪個(gè)級(jí)別下啟動(dòng),-表示都不啟動(dòng)
????????# chkconfig: LLLL nnnn
刪除:
????chkconfig --del name
修改指定的鏈接類型
????chkconfig [--level levels] name <on|off|reset>
???????? ?--level LLLL: 指定要設(shè)置的級(jí)別;省略時(shí)表示2345
ntsysv命令:圖形化的chkconfig命令
示例:制作一個(gè)模擬服務(wù)進(jìn)程,并啟動(dòng)它。
#chkconfig:2345表示能被這幾個(gè)級(jí)別的init程序運(yùn)行,88表示啟動(dòng)優(yōu)先級(jí),22表示關(guān)閉優(yōu)先級(jí)
把腳本復(fù)制到/etc/init.d/目錄下面
添加腳本到服務(wù)里面,可以看見(jiàn)腳本默認(rèn)的啟動(dòng)級(jí)別了,這個(gè)是根據(jù)腳本里面來(lái)定義的
可以關(guān)閉某些運(yùn)行的級(jí)別
可以查看到/etc/rc.d/rcN.d/文件夾下面的各種K和S打頭的testservice文件
可以用chkconfig --level N SERVICE on | off 修改服務(wù)的開(kāi)機(jī)默認(rèn)開(kāi)啟狀態(tài)
可以看見(jiàn),其實(shí)/etc/rc.d/rcN.d/下面的K和S打頭的文件就是一個(gè)軟鏈接而已~
至于為什么這些只是一個(gè)軟鏈接的文件,大家可以參考/etc/rc.d/rc的腳本里面可以看到
例如這里定義K開(kāi)頭的服務(wù),這里只是rc腳本的一部分。
測(cè)試此服務(wù)開(kāi)啟,關(guān)閉
守護(hù)進(jìn)程:xinetd管理的服務(wù)(很多的服務(wù)依賴于此服務(wù))
service 命令:手動(dòng)管理服務(wù)
????service 服務(wù)start|stop|restart
????service --status-all
瞬態(tài)(Transient)服務(wù)被xinetd進(jìn)程所管理
進(jìn)入的請(qǐng)求首先被xinetd代理
配置文件:/etc/xinetd.conf、/etc/xinetd.d/<service>
與libwrap.so文件鏈接
用chkconfig控制的服務(wù):
????chkconfigtftpon
注意:正常級(jí)別下,最后啟動(dòng)一個(gè)服務(wù)S99local沒(méi)有鏈接至/etc/rc.d/init.d一個(gè)服務(wù)腳本,而是指向了/etc/rc.d/rc.local腳本
不便或不需寫為服務(wù)腳本放置于/etc/rc.d/init.d/目錄,且又想開(kāi)機(jī)時(shí)自動(dòng)運(yùn)行的命令,可直接放置于/etc/rc.d/rc.local文件中
/etc/rc.d/rc.local在指定運(yùn)行級(jí)別腳本后運(yùn)行
可以根據(jù)情況,進(jìn)行自定義修改
總結(jié):/sbin/init--> (/etc/inittab) --> 設(shè)置默認(rèn)運(yùn)行級(jí)別--> 運(yùn)行系統(tǒng)初始腳本、完成系統(tǒng)初始化--> (關(guān)閉對(duì)應(yīng)下需要關(guān)閉的服務(wù))啟動(dòng)需要啟動(dòng)服務(wù)--> 設(shè)置登錄終端
CentOS 6 init程序?yàn)? upstart, 其配置文件:
/etc/inittab, /etc/init/*.conf,配置文件的語(yǔ)法遵循upstart配置文件語(yǔ)法格式,和CentOS5不同
示例:破解CentOS5和6的root口令
首先,在進(jìn)入菜單這里,點(diǎn)擊a進(jìn)入編輯內(nèi)核參數(shù)
在參數(shù)后面加一個(gè)1 | s | S | singel 參數(shù)都可以,然后輸入回車,進(jìn)入單機(jī)模式
在單機(jī)模式下面,直接輸入passwd命令修改root賬號(hào)密碼,搞定。
grub legacy
CentOS 6啟動(dòng)流程:
????POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) --> rootfs--> switchroot--> /sbin/init-->(/etc/inittab, /etc/init/*.conf) --> 設(shè)定默認(rèn)運(yùn)行級(jí)別--> 系統(tǒng)初始化腳本rc.sysinit--> 關(guān)閉或啟動(dòng)對(duì)應(yīng)級(jí)別的服務(wù)--> 啟動(dòng)終端
grub: GRand Unified Bootloader
? ?grub 0.97: grub legacy
? ?grub 2.x: grub2
? ?grub legacy:
?????stage1: mbr
?????stage1_5: mbr之后的扇區(qū),讓stage1中的bootloader能識(shí)別stage2所在的分區(qū)上的文件系統(tǒng)
?????stage2:磁盤分區(qū)(/boot/grub/)
配置文件:/boot/grub/grub.conf <--/etc/grub.conf(軟鏈接)
stage2及內(nèi)核等通常放置于一個(gè)基本磁盤分區(qū)
功用:
(1) 提供啟動(dòng)菜單、并提供交互式接口
????a:內(nèi)核參數(shù)
????e: 編輯模式,用于編輯菜單
????c: 命令模式,交互式接口
(2) 加載用戶選擇的內(nèi)核或操作系統(tǒng)
????允許傳遞參數(shù)給內(nèi)核
????可隱藏啟動(dòng)菜單
(3) 為菜單提供了保護(hù)機(jī)制
????為編輯啟動(dòng)菜單進(jìn)行認(rèn)證
????為啟用內(nèi)核或操作系統(tǒng)進(jìn)行認(rèn)證
grub的命令行接口
????help: 獲取幫助列表
????help KEYWORD: 詳細(xì)幫助信息
????find (hd#,#)/PATH/TO/SOMEFILE:
????root (hd#,#)
????kernel /PATH/TO/KERNEL_FILE: 設(shè)定本次啟動(dòng)時(shí)用到的內(nèi)核文件;額外還可添加許多內(nèi)核支持使用的cmdline參數(shù)
????例如:max_loop=100 selinux=0init=/path/to/init
????initrd/PATH/TO/INITRAMFS_FILE: 設(shè)定為選定的內(nèi)核提供額外文件的ramdisk
????boot: 引導(dǎo)啟動(dòng)選定的內(nèi)核
cat /proc/cmdline 查看內(nèi)核的位置
內(nèi)核參數(shù)文檔:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt
識(shí)別硬盤設(shè)備:
????(hd#,#)
????hd#: 磁盤編號(hào),用數(shù)字表示;從0開(kāi)始編號(hào)
????#: 分區(qū)編號(hào),用數(shù)字表示; 從0開(kāi)始編號(hào)
????(hd0,0) 第一塊硬盤,第一個(gè)分區(qū)
手動(dòng)在grub命令行接口啟動(dòng)系統(tǒng):
????grub> root (hd#,#)
????grub> kernel /vmlinuz-VERSION-RELEASE roroot=/dev/DEVICE
????grub> initrd/initramfs-VERSION-RELEASE.img
????grub> boot
配置文件:/boot/grub/grub.conf
default=#: 設(shè)定默認(rèn)啟動(dòng)的菜單項(xiàng);落單項(xiàng)(title)編號(hào)從0開(kāi)始
timeout=#:指定菜單項(xiàng)等待選項(xiàng)選擇的時(shí)長(zhǎng)
splashp_w_picpath=(hd#,#)/PATH/TO/XPM_FILE:菜單背景圖片文件路徑
hiddenmenu:隱藏菜單
password [--md5] STRING: 啟動(dòng)菜單編輯認(rèn)證
title TITLE:定義菜單項(xiàng)“標(biāo)題”, 可出現(xiàn)多次
root (hd#,#):grub查找stage2及kernel文件所在設(shè)備分區(qū);為grub“根”
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動(dòng)的內(nèi)核
initrd/PATH/TO/INITRAMFS_FILE: 內(nèi)核匹配的ramfs文件
password [--md5] STRING: 啟動(dòng)選定的內(nèi)核或操作系統(tǒng)時(shí)進(jìn)行認(rèn)證
grub-md5-crypt命令
破解root口令:
????啟動(dòng)系統(tǒng)時(shí),設(shè)置其運(yùn)行級(jí)別1
進(jìn)入單用戶模式:
????(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磁盤上,并復(fù)制GRUB相關(guān)文件到DIR/boot目錄下
????grub-install --root-directory=DIR /dev/DISK
(2) grub
????grub> root (hd#,#)
????grub> setup (hd#)
示例1:新建一個(gè)啟動(dòng)項(xiàng),并且調(diào)整內(nèi)核參數(shù)
修改grub.conf文件的參數(shù)
default=1 即是開(kāi)機(jī)的時(shí)候默認(rèn)啟動(dòng)第二個(gè)選項(xiàng),默認(rèn)是0
password --md5 XXX 那里的意思,如果在title前面,那么進(jìn)入菜單欄前面的時(shí)候會(huì)提示輸入密碼,
如果在title后面。那么在進(jìn)入指定的菜單的時(shí)候,會(huì)提示輸入密碼。
kernel 內(nèi)核后面加了max_loop=20 selinux=0 rhgb quiet,一會(huì)看一下效果
然后在此處,默認(rèn)選中了剛創(chuàng)建的Hello Linux的啟動(dòng)菜單
在進(jìn)入菜單后,會(huì)發(fā)現(xiàn),提示我們輸入密碼
kernel rhgb quiet 的效果,靜默進(jìn)入操作系統(tǒng),這個(gè)功能不建議選用,因?yàn)榭床坏介_(kāi)機(jī)的啟動(dòng)菜單
如果沒(méi)有內(nèi)核參數(shù)rhgb quiet的話,我們可以看見(jiàn)每個(gè)進(jìn)程的開(kāi)機(jī)自檢過(guò)程
kernel max_loop=20的效果,默認(rèn)的話只有7個(gè)
示例2:當(dāng)引導(dǎo)有問(wèn)題的時(shí)候,手動(dòng)輸入命令啟動(dòng)系統(tǒng)
假如grub里面設(shè)置了系統(tǒng)啟動(dòng)密碼
啟動(dòng)的時(shí)候發(fā)現(xiàn)忘記了密碼,囧,怎么辦
此時(shí)可以退回菜單,選擇c的的cli啟動(dòng)方式。
手動(dòng)輸入root的位置,內(nèi)核,以及initramfss的位置,然后輸入boot加載
因?yàn)閟elinux的關(guān)系,啟動(dòng)的時(shí)候可能系統(tǒng)會(huì)進(jìn)行自檢,此時(shí)等待一會(huì)就可以了,又后者可以在內(nèi)核參數(shù)那里直接添加selinux=0來(lái)跳過(guò)系統(tǒng)自檢
然后發(fā)現(xiàn)已經(jīng)可以登陸進(jìn)去系統(tǒng)了,此時(shí)再登陸進(jìn)去,然后把grub.conf里面的password刪掉就可以了
示例3:分區(qū)情況下,刪除/boot 和/etc/fstab,破壞446字節(jié)的mbr信息,并恢復(fù)之
首先,破壞mbr前446個(gè)字節(jié),把/boot目錄下面所有的文件刪除,把/etc/grub.conf文件刪除
此時(shí)再重啟,會(huì)發(fā)現(xiàn),計(jì)算機(jī)根本就識(shí)別不到硬盤上面的系統(tǒng)
此時(shí)我們放入光盤(此步驟也可以從其他有同樣文件的地方來(lái)scp拷一份過(guò)來(lái))
加載光盤里面的救援模式
然后進(jìn)去救援模式,會(huì)提示我們的計(jì)算機(jī)上面沒(méi)有發(fā)現(xiàn)linux分區(qū),因?yàn)槲覀兦懊姘逊謪^(qū)表破壞了
此處選擇開(kāi)啟shell就可以
進(jìn)入到救援模式的cli界面,此時(shí)需要操作的是:
假設(shè)我們并不了解此計(jì)算機(jī)的分區(qū),首先要查詢?cè)瓉?lái)的分區(qū)表,此時(shí)可以用用lsblk命令查看到此前系統(tǒng)的塊設(shè)備信息,雖然可以看到塊設(shè)備信息,但是我們還是不能夠了解此前的分區(qū)信息,df命令出來(lái)的結(jié)果也并沒(méi)有顯示,所以,此時(shí)我們只能夠推斷此前的/根目錄是在哪個(gè)位置。
創(chuàng)建一個(gè)空的目錄,然后把塊設(shè)備掛載到此目錄
通過(guò)掛載,然后ls查看里面的信息,然后可以推斷出來(lái)此前的根目錄大概是哪里,還有boot分區(qū)在哪里,找到根目錄和boot目錄,然后就可以進(jìn)入下一步的操作了
創(chuàng)建/etc/fstab文件,以保存我們已知的分區(qū)信息
此處由于暫時(shí)只知道兩個(gè)信息,然后把信息寫入到此文件
完成此掛載信息后,千萬(wàn)不能自己再對(duì)根目錄等進(jìn)行操作,以免造成其他問(wèn)題,此處應(yīng)該要重啟電腦
重啟電腦以后再進(jìn)入救援模式,會(huì)發(fā)現(xiàn),已經(jīng)提示有找到linux系統(tǒng)了,并且把系統(tǒng)掛載到了/mnt/sysp_w_picpath目錄下面
之前那一步驟,只是稍微的修復(fù)了系統(tǒng)配置文件里面的兩個(gè)分區(qū)的信息而已
下面,我們需要對(duì)內(nèi)核和grub進(jìn)行修復(fù)
1.首先,掛載光驅(qū)到一個(gè)空目錄,然后安裝光盤里面的內(nèi)核~
2.安裝完內(nèi)核以后,我們可以切換到真實(shí)的系統(tǒng),可以發(fā)現(xiàn)/boot目錄下面的文件大部分已經(jīng)修復(fù)了,但是此處還是沒(méi)有g(shù)rub.conf文件
3.然后我們開(kāi)始對(duì)grub文件進(jìn)行修復(fù),命令是grub-install DEVICE
修復(fù)的過(guò)程中,會(huì)彈出來(lái)好多信息,注意的是千萬(wàn)不要中斷此操作,不然會(huì)出現(xiàn)問(wèn)題
等了一段時(shí)間以后,會(huì)發(fā)現(xiàn)修復(fù)已經(jīng)完成,但是grub文件還是沒(méi)有,因?yàn)榇颂幹皇切迯?fù)mbr
然后我們自己創(chuàng)建一個(gè)grub.conf的文件,并且手動(dòng)添加以下等核心信息
編輯完,重啟計(jì)算機(jī)
然后此處會(huì)遇上selinux自檢,需要等待一段時(shí)間了,如果想調(diào)過(guò)此步操作,可以在之前的操作里面添加到kernel那一行的最后那里輸入selinux=0,以此來(lái)關(guān)閉selinux,不過(guò)不是很建議這么操作。
好久以后,發(fā)現(xiàn)登陸界面已經(jīng)出來(lái)了~此時(shí)修復(fù)操作已經(jīng)完畢。
注意:此操作是恢復(fù)了,但是分區(qū)表里面的信息,還是剛剛手動(dòng)添加的分區(qū)表的信息,所以重啟掛載那些分區(qū)也是一個(gè)麻煩的事情,通過(guò)此案例,大家可以知道m(xù)br引導(dǎo),/boot目錄和/etc/fstab的重要性了吧?所以這些文件,最好平時(shí)就最好備份的操作,以免等到出現(xiàn)問(wèn)題才來(lái)修復(fù),會(huì)浪費(fèi)很多的時(shí)間的。
示例4:假設(shè)是在邏輯卷情況下,刪除mbr 、/boot 和/etc/fstab,并且恢復(fù)之
之前的示例3是在普通的磁盤上面的修復(fù)操作,但是生產(chǎn)環(huán)境中,很可能我們會(huì)用上邏輯卷等,那么修復(fù)的操作就一樣了,但是修復(fù)的原理是跟示例3的幾乎是一樣的,只是在修復(fù)邏輯卷的地方稍有不同。
此處的前面的步驟是跟示例3的是一樣的,所以此處只界面跟示例3不一樣的地方
首先,也是需要進(jìn)入救援模式
當(dāng)mbr 、/boot 和/etc/fstab等信息刪除以后,進(jìn)入救援模式里面也是提示找不到linux分區(qū),此處我們依然不需要理會(huì)
進(jìn)入到救援模式里面,我們直接用blkid命令,發(fā)現(xiàn)邏輯卷也沒(méi)有顯示出來(lái),所以此處應(yīng)該用邏輯卷的命令
1、輸入lvscan,然后就可以查找到此前系統(tǒng)里面的邏輯卷,并且此處帶有邏輯卷板的卷標(biāo),一看就知道該邏輯卷是掛載到哪里的,這樣的話對(duì)于我們修復(fù)的幫助就非常大
2、輸入vgchange -ay激活邏輯卷分區(qū),默認(rèn)的話是不激活的,所以開(kāi)始的時(shí)候用blkid是不會(huì)顯示,在激活以后再輸入blkid,會(huì)發(fā)現(xiàn)已經(jīng)可以查看到相關(guān)的信息。
3、找到分區(qū)信息的,下一步就跟示例3的一樣,需要掛載分區(qū)信息了
編輯/etc/fstab文件,輸入相關(guān)的掛載信息
編輯完文檔,此刻就可以重啟了
重啟完再重新進(jìn)入救援模式,會(huì)提示系統(tǒng)已經(jīng)掛載到/mnt/sysp_w_picpath目錄里面的,跟此前的操作是一樣的
進(jìn)入到救援模式,就開(kāi)始修復(fù)grub的mbr信息,此操作過(guò)程跟示例3的一樣就不重復(fù)展示了。
修復(fù)完mbr的信息,此時(shí)就可以手動(dòng)創(chuàng)建grub.conf文件
此處的kernel后面root=/dev/vg0/root,而不是此前的/dev/sda2,需要注意了,應(yīng)該現(xiàn)在的root根目錄是掛載在邏輯卷里面,此處就是指定根的目錄位置,編輯完grub.conf文件,確認(rèn)沒(méi)有問(wèn)題就重啟電腦
重啟完電腦以后,可以發(fā)現(xiàn)已經(jīng)可以重新進(jìn)入系統(tǒng)了,此處實(shí)驗(yàn)已經(jīng)完畢。
示例5:修改Linux開(kāi)機(jī)背景
有時(shí)候,Linux黑色的開(kāi)機(jī)北京略顯無(wú)聊,此處我們當(dāng)然也可以修改拉
在grub.conf文件里面我們可以此處有一個(gè)指向(hd0,0)/grub/splash.xpm.gz文件,這個(gè)就是開(kāi)機(jī)的背景文件了,并且是個(gè)壓縮的文件。
此文件我們可以在/boot/grub目錄下面看到它,好了,既然知道文件在那里,那么修改起來(lái)大家就知道怎么操作了吧?不過(guò)有一個(gè)要求就是此圖片的分辨率為640x480.而且替換的背景的圖片也需要跟原文件一樣的后綴名,就是需要生成XXX.xpm.gz這樣格式的圖片
此處我們需要一個(gè)linux的工具ImageMagick軟件
然后把需要替換的原圖,用此工具編輯一下,然后把編輯完的圖片放到/boot/grub/目錄下面
這就是修改完開(kāi)機(jī)背景的linux系統(tǒng),是不是很炫酷?
修改圖片具體操作步驟
轉(zhuǎn)載于:https://blog.51cto.com/weiweidefeng/1854066
總結(jié)
以上是生活随笔為你收集整理的Linux系统启动过程及其修复过程简析(CentOS5、6)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Nginx中传输带宽限制
- 下一篇: linux 进程带宽限制,如何限制网络带