日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

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

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux启动流程及自定义gurb

發(fā)布時(shí)間:2023/12/20 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux启动流程及自定义gurb 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

linux 啟動(dòng)流程

POST BIOS(boot sequence) 所選擇的啟動(dòng)設(shè)備次序的MBR中是否有引導(dǎo)程序, ----> MBR(bootloader) 提供內(nèi)核列表 ------->加載選定的Kernel,initrd(內(nèi)存模擬的磁盤(pán)設(shè)備需要緩存),initramfs(緩存) ?---->獲取到根文件系統(tǒng)并掛載,運(yùn)行init

?

bootloadler開(kāi)始以后的掛載流程

1、當(dāng)系統(tǒng)讀取bootloader,掛載內(nèi)核分區(qū)的時(shí)候,不識(shí)別更高級(jí)的磁盤(pán)分區(qū)上,只能放在基本磁盤(pán)分區(qū),而且只支持read1,所以?xún)?nèi)核和根不在同一個(gè)磁盤(pán)分區(qū)上,我們通常把內(nèi)核所在的基本磁盤(pán)分區(qū)掛載到boot分區(qū)上。

2、最終bootloader在啟動(dòng)的時(shí)候是在臨時(shí)掛載的 / 下找 vminuz?

?

3、為了節(jié)約磁盤(pán)空間vmlinuz是被壓縮的,節(jié)約空間和保證IO速度。在使用的時(shí)候內(nèi)核需要解壓,此時(shí)vmlinuz被分為2段,一段是沒(méi)有壓縮(解壓算法),另一端是壓縮的。

解壓后 bootloader讀取initramfs,的控制權(quán)完全交給kernel,內(nèi)核完成自身初始化,加載磁盤(pán)完成后啟動(dòng)init

?

問(wèn)題1:/lib/modules在跟文件系統(tǒng)中,kernel如何掛載?不掛載又怎么能找到這個(gè)硬盤(pán)的驅(qū)動(dòng)程序?

/lib/modules/中是linux所需要的所有模塊存放位置,但是kernel現(xiàn)在不知道我們的設(shè)備硬件是什么,kernel不可能將所有的模塊都放在內(nèi)核中,因?yàn)橛布O(shè)備以及功能模塊太多了。所以就放到了/lib/modules。但是/lib/modules又是在跟文件系統(tǒng)中。那此時(shí)kernel如何能找到硬盤(pán)的驅(qū)動(dòng)模塊完成并加載呢?因?yàn)榇藭r(shí)的模塊就是在根文件系統(tǒng)上,我們需要先掛載他才能找到所有的模塊。這個(gè)情況就是為什么要在boot分區(qū)中還要放置一個(gè)initrd文件的原因了。這個(gè)就是啟動(dòng)時(shí)加載Kernel后掛載的臨時(shí)根文件系統(tǒng)。

?

問(wèn)題2:又是誰(shuí)探測(cè)到了你的硬盤(pán)的型號(hào),并把對(duì)應(yīng)的驅(qū)動(dòng)模塊放置在initramfs文件中提供給bootloader呢?

是安裝操作系統(tǒng)時(shí),安裝程序在安裝操作系統(tǒng)時(shí)可以探測(cè)到你的硬盤(pán)是什么設(shè)備,需要什么啟動(dòng)程序,做成initramfs文件放到了 bootloader可以讀取到的根文件系統(tǒng)中,這樣kernel就可以通過(guò)這個(gè)文件加載根文件系統(tǒng),而后就可以讀取/lib/modules/ 加載所有的其他需要的模塊了

就是這個(gè)文件,所以有可能都安裝了同樣的操作系統(tǒng),但是硬盤(pán)的驅(qū)動(dòng)不同。導(dǎo)致了硬盤(pán)互換也不能啟動(dòng)的原因。

initrd是個(gè)文件系統(tǒng),幫助kernel完成初始化。內(nèi)核要將其掛載,以這個(gè)為根,掛載后在這里加載真正根文件系統(tǒng)的驅(qū)動(dòng)模塊,加載后initrd中有個(gè)程序運(yùn)行后可以替換跟文件系統(tǒng),將真正的根文件系統(tǒng)替換initrd,替換完以后這個(gè)應(yīng)用程序由誰(shuí)終止,自身終止就是系統(tǒng)啟動(dòng)的第0個(gè)進(jìn)程。之后就是要訪問(wèn)/sbin/init

/sbin/init: 功能

  /etc/inittab

    /etc/rc.d/rc.sysinit腳本

      操作:

      設(shè)置主機(jī)名

      打印文本歡迎信息

      激活selinux 與 udev探測(cè)額外的硬件設(shè)備并為其裝在模塊

      激活swap

      ? 掛載etc/fstab中定義的本地文件系統(tǒng)

      實(shí)現(xiàn)檢測(cè)根文件系統(tǒng),并對(duì)其以讀寫(xiě)方式重新掛在

      設(shè)置系統(tǒng)時(shí)鐘,從硬件讀取時(shí)鐘,維護(hù)系統(tǒng)軟時(shí)鐘

      裝在鍵盤(pán)映射

      根據(jù) etc/sysctl.conf 設(shè)置內(nèi)核參數(shù)

      激活軟raid與lvm設(shè)備

      清理var等等目錄的操作

    設(shè)定默認(rèn)運(yùn)行級(jí)別

    啟動(dòng)各種服務(wù)    

 init特性:

  id 操作的id

  runlevels 在那些級(jí)別下運(yùn)行次操作

  action ? 動(dòng)作

    initdefault 默認(rèn)執(zhí)行

  process 操作

?

  Centos 5 init: SystemV格式:啟動(dòng)順序是串行化,初始化程序一個(gè)一個(gè)執(zhí)行

  Centos 6 init: Upstart:程序依然有依賴(lài),但是不用等待所依賴(lài)的程序完成初始化完成(啟動(dòng)初始化程序通過(guò)dbus相互通信),和System V兼容性不太好。

  Centos 7 : ? SystemD,和SysV兼容。并且參考OS X 中并行初始化的過(guò)程

    啟動(dòng)應(yīng)用程序:將應(yīng)用程序定義到啟動(dòng)級(jí)別中

      ? 0:關(guān)機(jī)

     ? ? ?1:單用戶(hù)模式

      2:多用戶(hù)模式,不支持NFS文進(jìn)系統(tǒng)    

      3:完全多用戶(hù)模式

      4:預(yù)留級(jí)別

      5:完全多用戶(hù)模式:圖形模式

      6:重啟

  /etc/init/rcS.conf ? upstart 支持的腳本   

  

start on startupstop on runleveltask# Note: there can be no previous runlevel here, if we have one it's bad # information (we enter rc1 not rcS for maintenance). Run /etc/rc.d/rc # without information so that it defaults to previous=N runlevel=S. console output pre-start script
#啟動(dòng)前腳本
for t in $(cat /proc/cmdline); docase $t inemergency)start rcS-emergencybreak;;esacdone end script exec /etc/rc.d/rc.sysinit #中間會(huì)執(zhí)行這個(gè)腳本 post-stop script #upstat特有的格式,會(huì)定義什么時(shí)候執(zhí)行
#停止后腳本if [ "$UPSTART_EVENTS" = "startup" ]; thenif [ "$UPSTART_EVENTS" = "startup" ]; then[ -f /etc/inittab ] && runlevel=$(/bin/awk -F ':' '$3 == "initdefault" && $1 !~ "^#" { print $2 }' /etc/inittab)[ -z "$runlevel" ] && runlevel="3"for t in $(cat /proc/cmdline); docase $t in-s|single|S|s) runlevel="S" ;;[1-9]) runlevel="$t" ;;esacdoneexec telinit $runlevelfi end script

直到最后打印登錄界面

?

/proc/cmdline ?啟動(dòng)內(nèi)核時(shí)傳遞給內(nèi)核的參數(shù) ?or /proc/process/cmdline 啟動(dòng)程序時(shí)的啟動(dòng)命令。

?

MBR:

  bootloader:引導(dǎo)加載器,裝操作系統(tǒng)時(shí)又不同的操作系統(tǒng)設(shè)定安裝的。

  引導(dǎo)程序:

    win:ntloder

    linux:LILO:

        LInux LOader,不能引導(dǎo)位于1024柱面(Cylinder以后的分區(qū))的操作系統(tǒng)

       GRUB: GRand Unified Bootloader

          把系統(tǒng)引導(dǎo)過(guò)程劃分了3端:

               1st stage:位于 MBR bootloader--為了引導(dǎo)snd stage

               1.5 stage:位于boot分區(qū)上,為識(shí)別內(nèi)核文件所在的文件系統(tǒng),系統(tǒng)文件系統(tǒng)擴(kuò)展(為什么linux可以識(shí)別更多的文件系統(tǒng))

               2ndstage:位于boot分區(qū)上,GRUB引導(dǎo)程序

               

[root@vm2 keepalived]# ls /boot/grub/ device.map ffs_stage1_5 jfs_stage1_5 reiserfs_stage1_5 stage2 xfs_stage1_5 e2fs_stage1_5 grub.conf menu.lst splash.xpm.gz ufs2_stage1_5 fat_stage1_5 iso9660_stage1_5(docker) minix_stage1_5 stage1 vstafs_stage1_5

 menu.lst -> ./grub.conf 這個(gè)就是grob主配置文件,stage2 讀取這個(gè)配置文件

# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-358.el6.x86_64)root (hd0,0)kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root nomodeset rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quietinitrd /initramfs-2.6.32-358.el6.x86_64.img

?

?grob 功能;

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

    內(nèi)核:linux

    系統(tǒng),win or linux

    隱藏

  2.提供交互式接口

    e:可以編輯修改grob.conf 中的內(nèi)容

   ? ? ?1:單用戶(hù)模式,給予密碼的保護(hù)(1,啟用內(nèi)核,2,傳遞參數(shù)及進(jìn)入編輯模式)

    

?

grub.conf 中title 就是現(xiàn)實(shí)在啟動(dòng)界面的字符

root(hd0,0) 設(shè)定內(nèi)核所在分區(qū)為grub的根

kernel 制定內(nèi)核文件的路徑。后面可以傳遞給內(nèi)核的啟動(dòng)參數(shù)

initrd : 指定為內(nèi)核提供額外驅(qū)動(dòng)功能的ramdisk(因?yàn)閗ernel認(rèn)為這是磁盤(pán),所以需要做一個(gè)磁盤(pán)轉(zhuǎn)換為內(nèi)存的緩存,所以速度慢) ?,單 ramfs(因?yàn)槭俏募到y(tǒng),不需要再次緩存,所以快)

?

> c

進(jìn)入修改模式

help root 獲取root命令的幫助

?

查找vmlinuz內(nèi)核在哪個(gè)磁盤(pán)上,如果有可以tab補(bǔ)全

然后就可以輸入 grub> root (hd0,0) ? ? 回車(chē)

? ? ? ? ? ? ? ? ? ? ?grub> kernel /vmlinz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root?這個(gè)root值必須要寫(xiě)最好備份一份root的位置。因?yàn)檫@個(gè)是找不到的

? ? ? ? ? ? ? ? ? ? ?grub> initrd ?/initramfs-2.6.32-642.el6.x86_64.img?#這個(gè)文件版本必須和kernel版本對(duì)應(yīng)       ? ?

? ? ? ? ? ? ? ? ? ? ?boot ?啟動(dòng)

>e

進(jìn)入編輯模式

>e 針對(duì)某一行進(jìn)行修改

修改grub 的根分區(qū)

?

?

修改添加kernel參數(shù)

添加 : 1 單用戶(hù)模式:幾乎不會(huì)啟動(dòng)任何服務(wù),且不要登錄,但是會(huì)執(zhí)行/etc/rc.d/rc.sysinit

  ? ?  如果不上執(zhí)行rc.sysinit ?傳遞 emergency

   ? ? 如果想讓用戶(hù)不能隨意進(jìn)入單用戶(hù)模式,兩種方式

    位置不同輸入密碼的時(shí)間就不同

    

    設(shè)置加密密碼:

    

        

? ? ? ? ??

   重啟

    

    ?需要敲e建輸入密碼 ,這是需要p進(jìn)入密碼輸入

    ?啟動(dòng)輸入密碼:

    

?

grub.conf 位置文件其他的含義  

?

default=0 . #定義默認(rèn)啟動(dòng)那個(gè)title timeout=5   #啟動(dòng)倒計(jì)時(shí) splashimage=(hd0,0)/grub/splash.xpm.gz #顯示啟動(dòng)時(shí)背景圖片 hiddenmenu       #隱藏菜單 默認(rèn)隱藏,只顯示倒計(jì)時(shí)。去掉就直接顯示選擇的那個(gè)os password --md5 $1$PFbU5/$/h/7uhL5LISHvrPyVTBiz0 #password centos title CentOS 6 (2.6.32-642.el6.x86_64)root (hd0,0) #hd0 磁盤(pán), 0分區(qū)
               #磁盤(pán)表示方式:在grub中,都已hd開(kāi)頭,并緊跟一個(gè)數(shù)字做各磁盤(pán)設(shè)備的標(biāo)記,第幾塊硬盤(pán)
               #分區(qū):0-3 主分區(qū),邏輯分區(qū)從5開(kāi)始,一般boot在磁盤(pán)的最外道的分區(qū)上
                    
kernel
/vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8
          rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet# 制定內(nèi)核文件,及傳遞給內(nèi)核的參數(shù)
#ro root=/path/to/DEVICE 以只讀方式掛載真正的根分區(qū)位置,而后在sysinit中還要重新rw掛在一邊
#quiet 內(nèi)核初始化信息模式:靜默,不輸初始化信息
     initrd
/initramfs-2.6.32-642.el6.x86_64.img
#通常為cpio歸檔,并使用gzip壓縮,通常以img作為后綴,因?yàn)檫@個(gè)是個(gè)磁盤(pán)映像文件。
      password
--md5 $1$PFbU5/$/h/7uhL5LISHvrPyVTBiz0 ~

?

轉(zhuǎn)載于:https://www.cnblogs.com/python-way/p/6189260.html

總結(jié)

以上是生活随笔為你收集整理的linux启动流程及自定义gurb的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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