日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

CentOS6 启动流程图文解剖 + 引导文件损坏处理方法

發(fā)布時(shí)間:2025/3/15 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CentOS6 启动流程图文解剖 + 引导文件损坏处理方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CentOS6 啟動(dòng)流程圖文解剖 + 引導(dǎo)文件損壞處理方法

?1570人閱讀?評(píng)論(0)?收藏?舉報(bào)

轉(zhuǎn)載此文章是確實(shí)幫助到我,也希望能幫助到其它人;

解決 VFS:Unable to mount root fs on Unknown-block(0,0) 的問(wèn)題,有可能是內(nèi)核升級(jí)過(guò)程中引導(dǎo)文件損壞造成,如有老內(nèi)核,可進(jìn)入系統(tǒng)重新重成新內(nèi)核的引導(dǎo)文件放到/boot/ 下即可。:) 重新生成引導(dǎo)文件方法參見(jiàn)下文“四、GRUB(GRand Unified Bootloader)、加載內(nèi)核” -> “如何制作 initramfs”


我們?cè)谑褂肔inux操作系統(tǒng)的時(shí)候,我們只需按下電源鍵,等待,然后輸入賬戶和密碼就可以使用Linux操作系統(tǒng)了。那么在按下電源到輸入賬號(hào)和密碼之前,操作系統(tǒng)都做了些什么?下面就來(lái)講述在這段時(shí)間發(fā)生的動(dòng)作。

下面以CentOS6系列為例來(lái)講解Linux的啟動(dòng)流程。

一、Linux啟動(dòng)流程詳解

下圖就是啟動(dòng)流程的大致過(guò)程:

二、POST加電自檢

POST(PowerOnSelfTest)首先對(duì)每一個(gè)設(shè)備進(jìn)行檢查。完成后會(huì)尋找存有引導(dǎo)記錄的設(shè)備,找到后讀入操作系統(tǒng)引導(dǎo)記錄,然后將系統(tǒng)控制權(quán)交給引導(dǎo)記錄,并由引導(dǎo)記錄來(lái)完成系統(tǒng)的順利啟動(dòng)。

三、MBR引導(dǎo)

MBR(Master Boot Record) MBR記錄一般是在磁盤(pán) 0 磁道 1 扇區(qū),共512個(gè)字節(jié)。前446個(gè)字節(jié)是BootLoder,后 4*16 的 64 個(gè)字節(jié)是存放分區(qū)信息的,最后 2 個(gè)字節(jié)是校驗(yàn)信息,一般是 55AA。

四、GRUB(GRand Unified Bootloader)、加載內(nèi)核

就是MBR中的前 446 個(gè)字節(jié),是BooTLoader的一種,它的作用是要選擇要啟動(dòng)的內(nèi)核。

1、GRUB程序的組成:

主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5組成。對(duì)于這些部分我的理解是這樣:

  • device.map:存放的是內(nèi)核文件的根分區(qū)
  • menu.lis:是grub.conf的鏈接文件,但是這個(gè)名字我覺(jué)得更與它的功能接近,就是菜單列表。里賣(mài)弄設(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 的原因了。

2、grub.conf 文件參數(shù)意義

  • default=1????#?默認(rèn)啟動(dòng)的內(nèi)核title,?0?表示是第一個(gè) ?
  • timeout=5????#?默認(rèn)等待時(shí)間 ?
  • splashimage=(hd0,0)/grub/splash.xpm.gz????#?指定菜單的背景圖片的路徑。為xpm格式,采用gzip壓縮,只能為14bits色 ?
  • hiddenmenu????#?隱藏菜單 ?
  • title?CentOS?(2.6.32-358.el6.x86_64)????#?標(biāo)題名,用戶可自定義 ?
  • ????root?(hd0,0)????#?指定?grub?的根位置 ?
  • ????#?指定?kernel?文件的位置,還要指出?root(系統(tǒng)啟動(dòng)后)?的位置,掛載方式?ro,這項(xiàng)很關(guān)鍵。 ?
  • ????#?加載后會(huì)啟動(dòng)?init?進(jìn)程。 ?
  • ????kernel?/vmlinuz-2.6.32-358.el6.x86_64?ro?root=/dev/mapper/vg0-root?rd_NO_LUKS?rd_NO_DM?LANG=en_US.UTF-8?rd_LVM_LV=vg0/swap?rd_NO_MD?SYSFONT=latarcyrheb-sun16?crashkernel=auto?rd_LVM_LV=vg0/root??KEYBOARDTYPE=pc?KEYTABLE=us?rhgb?crashkernel=auto?quiet?rhgb?quiet ?
  • ????#?在內(nèi)核啟動(dòng)過(guò)程中裝載根文件系統(tǒng)時(shí)有用 ?
  • ????initrd?/initramfs-2.6.32-358.el6.x86_64.img?
  • initramfs-2.6.32-358.el6.x86_64.img 的本質(zhì)是????
  • #?initramfs?是以?gzip?壓縮的?cpio?格式的文件。內(nèi)核啟動(dòng)時(shí)將他作為一個(gè)臨時(shí)的根文件系統(tǒng)。 ?
  • #?grub?的?stage2?將initrd加載到內(nèi)存里,讓后將其中的內(nèi)容釋放到內(nèi)容中, ?
  • #?內(nèi)核便去執(zhí)行init腳本,這時(shí)內(nèi)核將控制權(quán)交給了init文件處理。 ?
  • #?init?它也主要是加載各種存儲(chǔ)介質(zhì)相關(guān)的設(shè)備驅(qū)動(dòng)程序。當(dāng)所需的驅(qū)動(dòng)程序加載完后, ?
  • #?會(huì)創(chuàng)建一個(gè)根設(shè)備,然后將根文件系統(tǒng)rootfs以只讀的方式掛載。 ?
  • #?這一步結(jié)束后,釋放未使用的內(nèi)存,轉(zhuǎn)換到真正的根文件系統(tǒng)上面去,同時(shí)運(yùn)行/sbin/init程序, ?
  • #?執(zhí)行系統(tǒng)的1號(hào)進(jìn)程。此后系統(tǒng)的控制權(quán)就全權(quán)交給/sbin/init進(jìn)程了。?
  • 如何制作 initramfs 呢?

  • #?可以使用?dircut?命令,用法如下: ?
  • #?只有在?initramfs?文件損毀的時(shí)候會(huì)使用到 ?
  • [root@server?~]#?dracut?/mnt/initramfs-`uname?-r`.img?`uname?-r` ?
  • [root@server?~]#?du?-sh?/mnt/initramfs-2.6.32-358.el6.x86_64.img? ?
  • 16M?/mnt/initramfs-2.6.32-358.el6.x86_64.img ?
  • [root@server?~]#?du?-sh?/boot/initramfs-2.6.32-358.el6.x86_64.img? ?
  • 16M?/boot/initramfs-2.6.32-358.el6.x86_64.img ?
  • #?詳細(xì)介紹,可使用這個(gè)鏈接:https://zh.opensuse.org/index.php?title=SDB:Dracut&variant=zh-cn#.E5.90.AF.E7.94.A8_dracut_.E7.94.9F.E6.88.90.E7.9A.84_initramfs?
  • 3、grub的功能

    1)提供菜單,并提供交互式接口

    e: 進(jìn)入編輯模式

    2)選擇要啟動(dòng)的內(nèi)核或系統(tǒng)

    允許傳遞引導(dǎo)參數(shù)給內(nèi)核

    選擇界面可隱藏

  • #?可以自啟動(dòng)是通過(guò)?grub?像內(nèi)核傳遞參數(shù)。 ?
  • #?應(yīng)用之一是:修改?root?密碼(忘記密碼),使用?e?選項(xiàng),傳遞單用戶指令。?
  • 3)為編輯功能提供保護(hù)機(jī)制

    啟用內(nèi)核文件

    選擇運(yùn)行指定的內(nèi)核得先輸入密碼

    傳遞參數(shù)

    使用e命令得先輸入密碼

  • [root@server?root]#?grub-md5-crypt? ?
  • Password:? ?
  • Retype?password:? ?
  • $1$Mp7Rp1$l2wzOILNUqpUhAR7zXvQb0 ?
  • #?上面是生成的加密字符串 ?
  • #?然后將信息加入到?grub.conf?文件中,格式如下: ?
  • password?--md5?$1$Mp7Rp1$l2wzOILNUqpUhAR7zXvQb0 ?
  • #?當(dāng)然加入?grub.conf?文件的位置不同,加密效果也不一樣。 ?
  • #?加入到?title?之前的話,會(huì)加密整個(gè)菜單。 ?
  • #?加入到?title?指內(nèi)的話,會(huì)加密對(duì)應(yīng)的操作系統(tǒng)的入口。?
  • 4、安裝grub的方式

    1)使用grub-install命令

  • #?grub-install?[--root-directory=/path/to/somewhere]?DEVICE?
  • 2)grub交互是命令

    在這里我們自制一個(gè)精簡(jiǎn)grub,當(dāng)然啟動(dòng)的時(shí)候只啟動(dòng)一個(gè)bash就可以。示例是在 VMware 虛擬機(jī)下完成的。

    第一步:準(zhǔn)備好塊新磁盤(pán),分 2 個(gè)區(qū)出來(lái)

    第二步:模擬啟動(dòng)時(shí)的boot目錄,和根目錄,并掛載。如下

  • [root@server?~]#?df?-H?|?tail?-n?2 ?
  • /dev/sdd1??????????????518M????11M???481M???3%?/mnt/boot ?
  • /dev/sdd2??????????????2.2G????71M???2.0G???4%?/mnt/sysroot?
  • 第三步:制作 grub,并生成 grub 的配置文件

    制作grub

    拷貝內(nèi)核文件和 initramfs 文件到 /mnt/boot 目錄下,并生成 grub.conf 文件

  • [root@server?~]#?cp?/boot/vmlinuz-2.6.32-358.el6.x86_64?/mnt/boot/vmlinuz ?
  • [root@server?~]#?cp?/boot/initramfs-2.6.32-358.el6.x86_64.img?/mnt/boot/initramfs.img ?
  • [root@server?~]#?ll?/mnt/boot/ ?
  • total?20106 ?
  • drwxr-xr-x?2?root?root?????1024?Jul?24?20:58?grub ?
  • -rw-r--r--?1?root?root?16542269?Jul?24?21:06?initramfs.img ?
  • -rwxr-xr-x?1?root?root??4043888?Jul?24?21:05?vmlinuz ?
  • #?生成的?grub.conf?文件 ?
  • [root@server?~]#?cat?/mnt/boot/grub/grub.conf ?
  • default=0?
  • timeout=10?
  • title?Mini?Linux ?
  • ????root?(hd0,0)? ?
  • ????kernel?/vmlinuz?ro?root=/dev/sda2?selinux=0?init=/bin/bash ?
  • ????initrd?/initramfs.img?
  • 第四步: 生成根文件系統(tǒng)

    第五步:拷貝使用命令和庫(kù)到對(duì)應(yīng)根目錄下

    將剛才的磁盤(pán)鏡像作為另一個(gè)虛擬機(jī)的啟動(dòng)盤(pán)。

    五、啟動(dòng) init 進(jìn)程

    init 進(jìn)程是系統(tǒng)啟動(dòng)的第一個(gè)進(jìn)程。其他進(jìn)程都是有此進(jìn)程控制fork出來(lái)的,也就是說(shuō),init是其他進(jìn)程的“祖先”,PID=1。當(dāng)然,PID=0進(jìn)程我們稱(chēng)為空閑進(jìn)程是屬于內(nèi)核的。

    init啟動(dòng)后所做的事情:

    1、讀取/etc/inittab來(lái)讀取默認(rèn)級(jí)別?假設(shè):讀取到的默認(rèn)級(jí)別是 3

    /etc/init/*.conf

  • #?啟動(dòng)級(jí)別:(runlevel) ?
  • #?0:關(guān)機(jī) ?
  • #?1:單用戶模式 ?
  • #?2:多用戶模式,不支持?NFS?功能 ?
  • #?3:完全多用戶模式,支持文本接口 ?
  • #?4:預(yù)留模式 ?
  • #?5:完全多用戶模式,支持圖形模式 ?
  • #?6:關(guān)機(jī) ?
  • #?/etc/inittab文件格式如下,這是遵循了CentOS5的風(fēng)格。 ?
  • id:3:initdefault:?
  • 2、執(zhí)行初始化系統(tǒng)腳本 /etc/rc.d/rc.sysinit 來(lái)初始化腳本

    這個(gè)大家有機(jī)會(huì)可以讀讀,腳本主要的作用如下:

  • #?獲取網(wǎng)絡(luò)環(huán)境與主機(jī)類(lèi)型。首先會(huì)讀取網(wǎng)絡(luò)環(huán)境設(shè)置文件"/etc/sysconfig/network",獲取主機(jī)名稱(chēng)與默認(rèn)網(wǎng)關(guān)等網(wǎng)絡(luò)環(huán)境。 ?
  • #?答應(yīng)文本歡迎信息。 ?
  • #?掛載/etc/fstab文件中定義的其它文件系統(tǒng)。 ?
  • #?激活swap ?
  • #?檢測(cè)根文件系統(tǒng),并以讀寫(xiě)方式重新掛載 ?
  • #?決定是否啟動(dòng)SELinux和udev。 ?
  • #?接口設(shè)備的檢測(cè)與即插即用(pnp)參數(shù)的測(cè)試。 ?
  • #?用戶自定義模塊的加載。用戶可以再"/etc/sysconfig/modules/*.modules"加入自定義的模塊,此時(shí)會(huì)加載到系統(tǒng)中。 ?
  • #?加載核心的相關(guān)設(shè)置。按"/etc/sysctl.conf"這個(gè)文件的設(shè)置值配置功能。 ?
  • #?設(shè)置系統(tǒng)時(shí)間(clock)。 ?
  • #?設(shè)置終端的控制臺(tái)的字形。 ?
  • #?設(shè)置raid及LVM等硬盤(pán)功能。 ?
  • #?以方式查看檢驗(yàn)磁盤(pán)文件系統(tǒng)。 ?
  • #?進(jìn)行磁盤(pán)配額quota的轉(zhuǎn)換。 ?
  • #?重新以讀取模式載入系統(tǒng)磁盤(pán)。 ?
  • #?啟動(dòng)quota功能。 ?
  • #?啟動(dòng)系統(tǒng)隨機(jī)數(shù)設(shè)備(產(chǎn)生隨機(jī)數(shù)功能)。 ?
  • #?清楚啟動(dòng)過(guò)程中的臨時(shí)文件。 ?
  • #?將啟動(dòng)信息加載到"/var/log/dmesg"文件中。?
  • 3、然后執(zhí)行 /etc/rc.d/rc 腳本

    此腳本運(yùn)行的時(shí)候此腳本的時(shí)候,會(huì)讀取/etc/rc.d/rc3.d/下的所有腳本,來(lái)控制系統(tǒng)啟動(dòng)的時(shí)候啟動(dòng)或者關(guān)閉那些服務(wù)

  • #?這里面的腳本大致分為?2?類(lèi),以?S?開(kāi)頭的和以?K?開(kāi)頭的腳本。 ?
  • #?S?代表開(kāi)機(jī)時(shí)啟動(dòng)的,K?表示開(kāi)機(jī)時(shí)不啟動(dòng)。 ?
  • #?每個(gè)文件的命名格式,例如:S01sysstat?S?開(kāi)機(jī)啟動(dòng)?01?啟動(dòng)次序?sysstat?啟動(dòng)腳本名 ?
  • #?啟動(dòng)的定義是在每個(gè)腳本中定義的:例如 ?
  • #?#?chkconfig:?-?85?15 ?
  • #?默認(rèn)級(jí)別?啟動(dòng)次序?不啟動(dòng)次序?
  • 這些腳本是否開(kāi)機(jī)自啟動(dòng),可由 chkconfig 命令來(lái)管理。

  • #?常用選項(xiàng): ?
  • #?chkconfig?--add?SRV_SCRIPT?可以將自己寫(xiě)的一些腳本,讓此命令統(tǒng)一管理。例如:chkconfig?--add?httpd ?
  • #?chkconfig?--del?SRV_SCRIPT?將服務(wù)刪除,意思就是服務(wù)不由chkconfig這種機(jī)制來(lái)管理 ?
  • #?chkconfig?SRV_SCRIPT?{on|off}?設(shè)置服務(wù)開(kāi)機(jī)是否自啟動(dòng),默認(rèn)管理的級(jí)別是2345. ?
  • #?--level?2345?等,指定默認(rèn)級(jí)別,可以與其他選項(xiàng)一起使用?
  • 4、執(zhí)行/etc/rc.d/rc.local腳本,此腳本是啟動(dòng)過(guò)程中最后啟動(dòng)的一個(gè)腳本。

    最后會(huì)執(zhí)行 /bin/login 登錄用戶。至此系統(tǒng)啟動(dòng)過(guò)程完成。

    0

    總結(jié)

    以上是生活随笔為你收集整理的CentOS6 启动流程图文解剖 + 引导文件损坏处理方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。