一、CentOS 6 的啟動流程
10年積累的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有興海免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。第一步:加電自檢(POST)
主要檢查硬件設(shè)備是否存在并能正常運(yùn)行,如:CPU、內(nèi)存、硬盤、風(fēng)扇、輸入輸出設(shè)備等。自檢功能主要是通過BIOS來實(shí)現(xiàn)的,BIOS程序是裝載在一個(gè)硬件芯片CMOS上的,加電過程就是給CMOS通電,然后啟動BIOS程序,BIOS程序會根據(jù)CMOS上面的一些配置信息區(qū)讀取其他的硬件設(shè)備信息并檢測其是否存在并能正常運(yùn)行,之后進(jìn)行硬件設(shè)備的初始化。
第二步:選擇啟動順序,加載MBR
按照BIOS中設(shè)置的Boot Sequence查找Boot Loader程序所在的設(shè)備。Boot Loader是一個(gè)程序,它依賴于一個(gè)硬件之上,這個(gè)硬件就是硬盤,準(zhǔn)確的說為第一個(gè)可以啟動的硬盤的第一個(gè)扇區(qū)內(nèi),即MBR(Master Boot Record,主引導(dǎo)記錄)。
Boot Loader的主要功能就是去識別、加載操作系統(tǒng)中的核心文件,并提交到內(nèi)存中運(yùn)行,進(jìn)而來啟動對應(yīng)的操作系統(tǒng)。另一個(gè)主要功能是提供菜單信息(可以提供不同的啟動項(xiàng)來加載不同的操作系統(tǒng)),并將啟動管理功能轉(zhuǎn)交給其他的加載程序。
第三步:加載系統(tǒng)內(nèi)核(Kernel)文件,執(zhí)行系統(tǒng)初始化信息
Boot Loader程序讀取操作系統(tǒng)的內(nèi)核文件后,會將其解壓后裝載到內(nèi)存當(dāng)中,然后接管BIOS的工作開始測試并加載各個(gè)設(shè)備(CPU、硬盤、網(wǎng)卡等)。
因?yàn)閮?nèi)核文件(Kernel)通常是存放在系統(tǒng)上的/boot目錄中,并且是以vmlinuz開頭的文件,此時(shí)內(nèi)存程序還沒有加載到硬盤,因此無法讀取系統(tǒng)上的內(nèi)核文件,而如果先去加載硬盤則必須有硬盤的驅(qū)動程序,因此這將會產(chǎn)生一個(gè)先后順序的問題,為了解決這個(gè)問題,Linux采用GRUB啟動管理程序來識別硬盤信息,RTUB程序的執(zhí)行過程需要三個(gè)階段,具體的執(zhí)行過程將在下面的第二章節(jié)介紹。
第四步:啟動第一個(gè)執(zhí)行程序/sbin/init
在內(nèi)核、硬件及驅(qū)動信息加載完畢后,內(nèi)核會呼叫用戶控件的第一個(gè)執(zhí)行程序/sbin/init,init程序主要功能是準(zhǔn)備軟件運(yùn)行環(huán)境,包括系統(tǒng)的主機(jī)名稱、網(wǎng)絡(luò)配置、文件系統(tǒng)格式等其他服務(wù)的啟動管理。而這些所有的操作都是通過init的配置文件來定義的。
在CentOS 5 中 init 的配置文件為:/etc/inittab
在CentOS 6 中 init 的配置文件為:/etc/inittab,/etc/init/*.conf
在init的配置文件中有個(gè)一非常重要的配置項(xiàng)目,那就是默認(rèn)的系統(tǒng)啟動級別。啟動級別是為系統(tǒng)維護(hù)的目的而設(shè)定的,其實(shí)現(xiàn)方式是關(guān)閉或啟動對應(yīng)級別下的服務(wù)。以下為init的7個(gè)運(yùn)行級別:
0:halt,關(guān)機(jī)
1:Single user,單用戶模式,此級別允許以root用戶身份登錄,而無需認(rèn)證,相當(dāng)于windows的安全模式
2:Multiuser,多用戶模式,需要用戶認(rèn)證,會啟動網(wǎng)絡(luò)功能,但不會啟動NFS
3:Full multiuser,完全多用戶模式,文本界面
4:unused,預(yù)留級別,目前無特別的使用目的
5:X11,正常級別,也是完全多用戶模式,圖形界面
6:reboot,重啟
通常使用較多的默認(rèn)級別為3或5,服務(wù)器上一般默認(rèn)使用3級別,不同級別之間是可以進(jìn)行切換的,切換方式為:init [0-6],可以使用 who -r 或 run_leave命令查看運(yùn)行級別。
第五步:運(yùn)行系統(tǒng)初始化腳本
根據(jù) init 的配置文件,先獲取默認(rèn)的 runlevel,然后再執(zhí)行 /etc/rc.d/rc.sysinit 腳本完成系統(tǒng)初始化。
系統(tǒng)初始化腳本所做的事情主要有:
1、設(shè)定主機(jī)名(讀取/etc/sysconfig/network文件)
2、激活 SELinux 和 udev
3、打印文本歡迎信息
4、掛載所有定義在/etc/fstab文件中的文件系統(tǒng)
5、激活 swap 設(shè)備
6、檢測跟文件系統(tǒng),并實(shí)現(xiàn)以讀寫方式重新掛載
7、設(shè)置系統(tǒng)時(shí)鐘
8、根據(jù) /etc/sysctl.conf 文件設(shè)定內(nèi)核參數(shù)的值
9、激活LVM和RAID設(shè)備
10、加載額外的設(shè)備驅(qū)動程序
11、清理操作
第六步:啟動系統(tǒng)服務(wù)
按照默認(rèn)級別的參數(shù)N,執(zhí)行 /etc/rcN.d/ 目錄下設(shè)定的關(guān)閉和啟動相應(yīng)的服務(wù)。
第七步:打印登錄提示符
二、GRUB程序的三個(gè)階段
stage1:運(yùn)行Boot Loader主程序,這個(gè)程序必須要被安裝在啟動區(qū)(MBR)。因?yàn)镸BR空間有限,因此在MBR當(dāng)中僅安裝Boot Loader的最小主程序,并沒有安裝Boot Loader的相關(guān)配置文件。
stage1_5:存放在MBR隨后的扇區(qū)中,主要用于與stage2所在分區(qū)的文件系統(tǒng)進(jìn)行交互。
stage2:通過Boot Loader加載所有配置文件及相關(guān)的環(huán)境參數(shù)信息,這些配置文件及相關(guān)的環(huán)境參數(shù)都存放于磁盤分區(qū)上的/boot目錄下。
grup的配置文件路徑為:/boot/grub/grub.conf,內(nèi)容如下:
default:設(shè)定默認(rèn)啟動的內(nèi)核和操作系統(tǒng),如果同時(shí)安裝了多個(gè)操作系統(tǒng)或內(nèi)核,0表示定義的第一個(gè)title系統(tǒng),1表示定義的第二個(gè)title系統(tǒng),依次類推;
timeout:設(shè)定系統(tǒng)啟動時(shí)選擇操作系統(tǒng)菜單的等待時(shí)間,單位是秒(s);
splashp_w_picpath:設(shè)定系統(tǒng)啟動時(shí)grub菜單的背景圖片。圖片格式為xpm,14bits顏色,大小為640*480,需要gzip壓縮;
hiddenmenu:隱藏選擇菜單,默認(rèn)情況下是不顯示菜單信息,如果想要顯示菜單,將該配置注釋即可;
title:定義一個(gè)操作系統(tǒng)或系統(tǒng)內(nèi)核,且包括下面內(nèi)容:
root:指明引導(dǎo)當(dāng)前操作系統(tǒng)或內(nèi)核文件所在的分區(qū);
kernel:指定文件路徑、根文件系統(tǒng)所在設(shè)備,以及傳遞給內(nèi)核的參數(shù)。由于啟動過程中需要掛載跟目錄,因此需要指定根目錄所在的分區(qū)。內(nèi)核參數(shù) rhgb表示色彩顯示,quiet表示靜默模式加載內(nèi)核;
initrd:指定用于輔助內(nèi)核完成系統(tǒng)啟動的ramdisk文件路徑;
三、關(guān)于GRUB的調(diào)試
1、破解root用戶密碼
第一步:系統(tǒng)啟動時(shí)按任意鍵進(jìn)入GRUB菜單,動作一定要快,默認(rèn)是5s的倒計(jì)時(shí)
如上圖所示,可以使用上下鍵選擇要啟動的操作系統(tǒng)(這里只用一個(gè));
按“e”可以對選擇的項(xiàng)進(jìn)行編輯;
按“a”可以對選擇的項(xiàng)進(jìn)行內(nèi)核參數(shù)修改;
按“c”可以進(jìn)入命令行模式;
第二步:根據(jù)提示,選擇相應(yīng)的菜單,然后按“a”,在原有內(nèi)核參數(shù)的最后加上“1或s或S或single”的任意一個(gè)參數(shù),表示進(jìn)入單用戶模式,然后按回車鍵啟動系統(tǒng)
第三步:以單用戶模式進(jìn)入系統(tǒng)后,使用passwd命令修改root用戶密碼,修改完之后重啟系統(tǒng)即可使用新的root用戶密碼登錄系統(tǒng)。
2、為GRUB菜單設(shè)置保護(hù)密碼
默認(rèn)情況下進(jìn)入GRUB菜單后不需要任何密碼就可以進(jìn)行編輯,相對來說是比較危險(xiǎn)的,因此可以修改 grub.conf 配置文件為GRUB菜單設(shè)置密碼保護(hù),在 grub.conf 文件中的title字段上面新增一行pwssword PASSWD,password支持命令口令和加密口令,具體設(shè)置如下圖所示:
md5加密口令的生成命令為:grub-md5-crypt
在grub.conf文件中新增password后,再次進(jìn)入GRUB菜單時(shí)如果想要編輯則必須按“p”鍵,然后通過密碼驗(yàn)證后才能編輯,如下圖所示:
同理,在grub.conf 配置文件中的title內(nèi)添加password,可以保護(hù)內(nèi)核,即進(jìn)入系統(tǒng)時(shí)需要輸入密碼驗(yàn)證后才能啟動。
3、取消圖形界面的啟動,使用文本界面啟動
系統(tǒng)默認(rèn)的啟動方式是圖形界面啟動,因此看不到系統(tǒng)的啟動過程,可以通過修改 grub.conf 配置文件設(shè)置成文本界面啟動,生產(chǎn)環(huán)境下也建議使用文本界面啟動,因?yàn)檫@種啟動方式可以看到整個(gè)過程,如果哪個(gè)服務(wù)在啟動過程中出錯(cuò)可以及時(shí)發(fā)現(xiàn)。修改方法是把kernel參數(shù)中的rhgb和quiet刪除。
4、如果/boot下的文件損壞或丟失的恢復(fù)方法
第一步:使用安裝光盤進(jìn)入救援模式,進(jìn)入時(shí)需要根據(jù)提示手動選擇語言、鍵盤等
加載救援模式的過程中會提示硬盤上的系統(tǒng)已經(jīng)被找到并掛載到/mnt/sysp_w_picpath下,因此進(jìn)入救援模式后可以使用 chroot /mnt/sysp_w_picpath 命令切換到硬盤上操作系統(tǒng)的根目錄下,因?yàn)榫仍J较绿峁┑拿畋容^有限,好多命令都不支持。
如果進(jìn)入到救援模式后,沒有發(fā)現(xiàn)硬盤上的根文件系統(tǒng),則需要使用相關(guān)命令查找并分析根文件系統(tǒng)所在硬盤分區(qū)位置,如果硬盤使用的是普通分區(qū),則可以通過 blkid 命令和 fdisk -l 命令分析出根文件系統(tǒng)的分區(qū)位置,而如果硬盤使用的是LVM分區(qū),則可以使用 lvscan 命令查看分區(qū),并且需要使用 vgchange -ay 命令激活VG卷組。
分析出根文件系統(tǒng)所在分區(qū)后掛載根文件系統(tǒng),然后檢查并修改fstab文件,如果該文件丟失,則手動創(chuàng)建一份,按照相應(yīng)格式在其中添加掛載根文件系統(tǒng)的條目,然后重啟系統(tǒng),直到能夠自動檢測出硬盤上的系統(tǒng)并掛載到/mnt/sysp_w_picpath下為止。
第二步:進(jìn)入到硬盤的根文件系統(tǒng)后,使用mount命令掛載光盤,比如將光盤掛載到/mnt/cdrom上:
第三步:使用rpm命令安裝kernel包,安裝時(shí)會提示kernel已安裝,需要使用--force或--replacepkgs選項(xiàng)強(qiáng)制安裝。安裝完之后會在/boot目錄下自動生成initramfs文件和vmlinuz文件
vmlinuz-2.6.32-642.el6.x86_64 和 initramfs-2.6.32-642.el6.x86_64.img 是系統(tǒng)啟動時(shí)必要的兩個(gè)文件,缺一不可。
vmlinuz-2.6.32-642.el6.x86_64:內(nèi)核文件,如果只是該文件丟失,可以從光盤或者相同版本的操作系統(tǒng)上拷貝。
initramfs-2.6.32-642.el6.x86_64.img:虛擬文件系統(tǒng),通過Boot Loader程序能夠?qū)⑵浼虞d到內(nèi)存中,然后這個(gè)文件會被解壓縮并且在內(nèi)存中模擬一個(gè)跟文件系統(tǒng),這個(gè)跟文件系統(tǒng)能夠提供一個(gè)可以運(yùn)行的程序,通過該程序可以加載在啟動過程中所需要的核心模塊(RAID、LVM、SCSI等文件系統(tǒng)與磁盤的驅(qū)動程序),加載完成之后,會協(xié)助內(nèi)核重新呼叫/sbin/init來執(zhí)行后續(xù)的正常啟動。如果只是該文件丟失,可以使用 mkinitrd /boot/initramfs-`uname -r`.img `uname -r` 重新生成 。
第四步:使用 grub-install 命令修復(fù)grub,需要注意的是該命令需要指定/boot目錄的父目錄,如果/boot的父目錄是根目錄(/),則可以省略 --root-directory=DIR 選項(xiàng)。該命令也可以修復(fù)/boot/grub下的文件
第五步:在/boot/grub下創(chuàng)建 grub.conf 配置文件,配置文件內(nèi)容如下圖所示
第六步:使用exit命令退出硬盤中的文件系統(tǒng),再使用reboot命令重啟系統(tǒng)
5、grub.conf文件損壞的修復(fù)
如果grub.conf文件損壞,則操作系統(tǒng)將不能正常啟動,此時(shí)手中如果有安裝光盤的話可以通過救援模式重新創(chuàng)建grub.conf文件,但如果沒有安裝光盤的話,可以通過以下方式修復(fù):
第一步:如果grub.conf文件損壞,則系統(tǒng)系統(tǒng)時(shí)會自動進(jìn)入grub的命令行模式,該模式下可以通過 help 命令查看幫助。使用root命令可以顯示當(dāng)前grub所在硬盤的分區(qū)位置;
第二步:使用 root 命令指定內(nèi)核存放的位置;
第三步:使用 kernel 命令設(shè)置kernel文件路徑及根文件系統(tǒng)所在設(shè)備,支持Tab命令補(bǔ)全;
第四步:使用 initrd 命令設(shè)置initramfs路徑,支持Tab命令補(bǔ)全;
第五步:使用 boot 命令啟動系統(tǒng);
第六步:系統(tǒng)啟動后手工重新編寫 /boot/grub/grub.conf 配置文件。
四、在U盤上自制 Linux 系統(tǒng)
根據(jù) CentOS 6 的啟動過程,可以在U盤上自制一個(gè)定制版的Linux系統(tǒng),首先需要?jiǎng)澐殖鲆粋€(gè)/boot分區(qū)和一個(gè)根(/)分區(qū),其次需要安裝grub,然后將內(nèi)核文件和initramfs文件放入到U盤的/boot目錄下,最后創(chuàng)建必要的配置文件,具體步驟如下:
第一步:使用 fdisk 命令為U盤創(chuàng)建/boot分區(qū)和根分區(qū),/boot分區(qū)(/dev/sdb1)大小為100M,根分區(qū)(/dev/sdb2)大小為6G
第二步:格式化分區(qū),將/boot分區(qū)(/dev/sdb1)和根分區(qū)(/dev/sdb2)都格式化成ext4格式
第三步:分別將U盤上的boot(/dev/sdb1)分區(qū)和根分區(qū)(/dev/sdb2)掛載到當(dāng)前系統(tǒng)的/mnt/boot和/mnt/sysroot上
第四步:使用 grub-install 命令安裝grub,注意需要指定所掛載U盤/boot分區(qū)的父目錄為/mnt
第五步:在/mnt/boot/grub目錄下創(chuàng)建grub.conf配置文件,該配置文件中需要在kernel參數(shù)配置項(xiàng)中關(guān)閉selinux,并指定init程序?yàn)?bin/bash
第六步:復(fù)制內(nèi)核文件和initramfs文件到/mnt/boot目錄下
第七步:在/mnt/sysroot目錄下創(chuàng)建一級目錄
第八步:在/mnt/sysroot/bin目錄下創(chuàng)建fstab的自動掛載文件
第九步:復(fù)制bash命令及相關(guān)庫文件,注意bash命令和庫文件的路徑一定要放對,可以使用which命令查看bash路徑,使用ldd命令查看bash的依賴庫。
第十步:參考第九步,根據(jù)需求復(fù)制相應(yīng)的命令及庫文件,可以使用腳本復(fù)制命令和庫,腳本內(nèi)容如下:
[root@localhost ~]# cat copycmd.sh #!/bin/bash ch_root="/mnt/sysroot" [ ! -d $ch_root ] && mkdir $ch_root bincopy() { if which $1 &>/dev/null; then local cmd_path=`which --skip-alias $1` local bin_dir=`dirname $cmd_path` [ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir} [ -f ${ch_root}${cmd_path} ] || cp -n $cmd_path ${ch_root}${bin_dir} return 0 else echo "Command not found." return 1 fi } libcopy() { local lib_list=$(ldd `which --skip-alias $1` | grep -Eo '/[^[:space:]]+') for loop in $lib_list;do local lib_dir=`dirname $loop` [ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir} [ -f ${ch_root}${loop} ] || cp -n $loop ${ch_root}${lib_dir} done } read -p "Please input a command: " command while [ "$command" != "quit" ];do if bincopy $command ;then libcopy $command fi read -p "Please input a command or quit: " command done
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。