成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

CentOS6 啟動流程圖文解剖

系統 Linux
我們在使用Linux操作系統的時候,我們只需按下電源鍵,等待,然后輸入賬戶和密碼就可以使用Linux操作系統了。那么在按下電源到輸入賬號和密碼之前,操作系統都做了些什么?下面就來講述在這段時間發生的動作。

我們在使用Linux操作系統的時候,我們只需按下電源鍵,等待,然后輸入賬戶和密碼就可以使用Linux操作系統了。那么在按下電源到輸入賬號和密碼之前,操作系統都做了些什么?下面就來講述在這段時間發生的動作。

下面以CentOS6系列為例來講解Linux的啟動流程。

一、Linux啟動流程詳解

下圖就是啟動流程的大致過程:

wKiom1PQxc6SML8nAAFcDmK4XC0648.jpg

二、POST加電自檢

POST(PowerOnSelfTest)首先對每一個設備進行檢查。完成后會尋找存有引導記錄的設備,找到后讀入操作系統引導記錄,然后將系統控制權交給引導記錄,并由引導記錄來完成系統的順利啟動。

三、MBR引導

MBR(Master Boot Record) MBR記錄一般是在磁盤 0 磁道 1 扇區,共512個字節。前446個字節是BootLoder,后 4*16 的 64 個字節是存放分區信息的,*** 2 個字節是校驗信息,一般是 5***A。

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

就是MBR中的前 446 個字節,是BooTLoader的一種,它的作用是要選擇要啟動的內核。

1、GRUB程序的組成:

wKioL1PQ4efw0SE_AAJbTpZuDV4737.jpg

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

  • device.map:存放的是內核文件的根分區
  • menu.lis:是grub.conf的鏈接文件,但是這個名字我覺得更與它的功能接近,就是菜單列表。里賣弄設置了可以選擇的內核菜單。存放于stage2中。
  • stage:用于grub引導程序過大,所以分2段引導,***段存放在MBR中,第二段存放于內核文件系統中,***段引導完成后可以找到第二段。 但是,第二段是存放于內核文件系統中的,此時還沒有格式化文件系統,如何可以訪問到第二段的 menu.lst 呢??就需要借助于中間層 stage1_5,有它來協助 stage1 段來訪問 stage2 段。stage1_5通常位于 stage1 字段后的 63 個扇區。 由于stage2 在內存中存放可以使用的文件系統不確定,所以這就是有多個 stage1_5 的原因了。

2、grub.conf 文件參數意義

  1. default=1    # 默認啟動的內核title, 0 表示是***個  
  2. timeout=5    # 默認等待時間  
  3. splashimage=(hd0,0)/grub/splash.xpm.gz    # 指定菜單的背景圖片的路徑。為xpm格式,采用gzip壓縮,只能為14bits色  
  4. hiddenmenu    # 隱藏菜單  
  5. title CentOS (2.6.32-358.el6.x86_64)    # 標題名,用戶可自定義  
  6.     root (hd0,0)    # 指定 grub 的根位置  
  7.     # 指定 kernel 文件的位置,還要指出 root(系統啟動后) 的位置,掛載方式 ro,這項很關鍵。  
  8.     # 加載后會啟動 init 進程。  
  9.     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  
  10.     # 在內核啟動過程中裝載根文件系統時有用  
  11.     initrd /initramfs-2.6.32-358.el6.x86_64.img 
initramfs-2.6.32-358.el6.x86_64.img 的本質是????
  1. # initramfs 是以 gzip 壓縮的 cpio 格式的文件。內核啟動時將他作為一個臨時的根文件系統。  
  2. # grub 的 stage2 將initrd加載到內存里,讓后將其中的內容釋放到內容中,  
  3. # 內核便去執行init腳本,這時內核將控制權交給了init文件處理。  
  4. # init 它也主要是加載各種存儲介質相關的設備驅動程序。當所需的驅動程序加載完后,  
  5. # 會創建一個根設備,然后將根文件系統rootfs以只讀的方式掛載。  
  6. # 這一步結束后,釋放未使用的內存,轉換到真正的根文件系統上面去,同時運行/sbin/init程序,  
  7. # 執行系統的1號進程。此后系統的控制權就全權交給/sbin/init進程了。 

wKioL1PQ7u_RXEQAAAHfgGw63dE269.jpg

如何制作 initramfs 呢?

  1. # 可以使用 dircut 命令,用法如下:  
  2. # 只有在 initramfs 文件損毀的時候會使用到  
  3. [root@server ~]# dracut /mnt/initramfs-`uname -r`.img `uname -r`  
  4. [root@server ~]# du -sh /mnt/initramfs-2.6.32-358.el6.x86_64.img   
  5. 16M /mnt/initramfs-2.6.32-358.el6.x86_64.img  
  6. [root@server ~]# du -sh /boot/initramfs-2.6.32-358.el6.x86_64.img   
  7. 16M /boot/initramfs-2.6.32-358.el6.x86_64.img  
  8. # 詳細介紹,可使用這個鏈接: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: 進入編輯模式

wKiom1PQ8uLRTFq2AAFFyUCSOSo430.jpg

2)選擇要啟動的內核或系統

允許傳遞引導參數給內核

選擇界面可隱藏

  1. # 可以自啟動是通過 grub 像內核傳遞參數。  
  2. # 應用之一是:修改 root 密碼(忘記密碼),使用 e 選項,傳遞單用戶指令。 

3)為編輯功能提供保護機制

啟用內核文件

選擇運行指定的內核得先輸入密碼

傳遞參數

使用e命令得先輸入密碼

  1. [root@server root]# grub-md5-crypt   
  2. Password:   
  3. Retype password:   
  4. $1$Mp7Rp1$l2wzOILNUqpUhAR7zXvQb0  
  5. # 上面是生成的加密字符串  
  6. # 然后將信息加入到 grub.conf 文件中,格式如下:  
  7. password --md5 $1$Mp7Rp1$l2wzOILNUqpUhAR7zXvQb0  
  8. # 當然加入 grub.conf 文件的位置不同,加密效果也不一樣。  
  9. # 加入到 title 之前的話,會加密整個菜單。  
  10. # 加入到 title 指內的話,會加密對應的操作系統的入口。 

#p#

4、安裝grub的方式

1)使用grub-install命令

  1. # grub-install [--root-directory=/path/to/somewhere] DEVICE 

2)grub交互是命令

wKiom1PQ_HiCHYTqAALwLfHE0OI236.jpg

在這里我們自制一個精簡grub,當然啟動的時候只啟動一個bash就可以。示例是在 VMware 虛擬機下完成的。

***步:準備好塊新磁盤,分 2 個區出來

wKiom1PRAY_CbjOxAAFQGeXx0nE979.jpg

第二步:模擬啟動時的boot目錄,和根目錄,并掛載。如下

  1. [root@server ~]# df -H | tail -n 2  
  2. /dev/sdd1              518M    11M   481M   3% /mnt/boot  
  3. /dev/sdd2              2.2G    71M   2.0G   4% /mnt/sysroot 

第三步:制作 grub,并生成 grub 的配置文件

制作grub

wKiom1PRA4njlzRSAANnZuPPwug409.jpg

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

  1. [root@server ~]# cp /boot/vmlinuz-2.6.32-358.el6.x86_64 /mnt/boot/vmlinuz  
  2. [root@server ~]# cp /boot/initramfs-2.6.32-358.el6.x86_64.img /mnt/boot/initramfs.img  
  3. [root@server ~]# ll /mnt/boot/  
  4. total 20106  
  5. drwxr-xr-x 2 root root     1024 Jul 24 20:58 grub  
  6. -rw-r--r-- 1 root root 16542269 Jul 24 21:06 initramfs.img  
  7. -rwxr-xr-x 1 root root  4043888 Jul 24 21:05 vmlinuz  
  8. # 生成的 grub.conf 文件  
  9. [root@server ~]# cat /mnt/boot/grub/grub.conf  
  10. default=0 
  11. timeout=10 
  12. title Mini Linux  
  13.     root (hd0,0)   
  14.     kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash  
  15.     initrd /initramfs.img 

第四步: 生成根文件系統

wKiom1PRBtWiGC9QAAJM8RoL0uA295.jpg

第五步:拷貝使用命令和庫到對應根目錄下

wKioL1PRDKij5REwAAM4ghH8fUw006.jpg

將剛才的磁盤鏡像作為另一個虛擬機的啟動盤。

wKioL1PRD2KC4J8-AAFGpnnDVLM992.jpg

wKioL1PRD3LSg0DtAALqgLLfnXg176.jpg

#p#

五、啟動 init 進程

init 進程是系統啟動的***個進程。其他進程都是有此進程控制fork出來的,也就是說,init是其他進程的“祖先”,PID=1。當然,PID=0進程我們稱為空閑進程是屬于內核的。

init啟動后所做的事情:

1、讀取/etc/inittab來讀取默認級別 假設:讀取到的默認級別是 3

/etc/init/*.conf

  1. # 啟動級別:(runlevel)  
  2. # 0:關機  
  3. # 1:單用戶模式  
  4. # 2:多用戶模式,不支持 NFS 功能  
  5. # 3:完全多用戶模式,支持文本接口  
  6. # 4:預留模式  
  7. # 5:完全多用戶模式,支持圖形模式  
  8. # 6:關機  
  9. # /etc/inittab文件格式如下,這是遵循了CentOS5的風格。  
  10. id:3:initdefault: 

2、執行初始化系統腳本 /etc/rc.d/rc.sysinit 來初始化腳本

這個大家有機會可以讀讀,腳本主要的作用如下:

  1. # 獲取網絡環境與主機類型。首先會讀取網絡環境設置文件"/etc/sysconfig/network",獲取主機名稱與默認網關等網絡環境。  
  2. # 答應文本歡迎信息。  
  3. # 掛載/etc/fstab文件中定義的其它文件系統。  
  4. # 激活swap  
  5. # 檢測根文件系統,并以讀寫方式重新掛載  
  6. # 決定是否啟動SELinux和udev。  
  7. # 接口設備的檢測與即插即用(pnp)參數的測試。  
  8. # 用戶自定義模塊的加載。用戶可以再"/etc/sysconfig/modules/*.modules"加入自定義的模塊,此時會加載到系統中。  
  9. # 加載核心的相關設置。按"/etc/sysctl.conf"這個文件的設置值配置功能。  
  10. # 設置系統時間(clock)。  
  11. # 設置終端的控制臺的字形。  
  12. # 設置raid及LVM等硬盤功能。  
  13. # 以方式查看檢驗磁盤文件系統。  
  14. # 進行磁盤配額quota的轉換。  
  15. # 重新以讀取模式載入系統磁盤。  
  16. # 啟動quota功能。  
  17. # 啟動系統隨機數設備(產生隨機數功能)。  
  18. # 清楚啟動過程中的臨時文件。  
  19. # 將啟動信息加載到"/var/log/dmesg"文件中。 

3、然后執行 /etc/rc.d/rc 腳本

此腳本運行的時候此腳本的時候,會讀取/etc/rc.d/rc3.d/下的所有腳本,來控制系統啟動的時候啟動或者關閉那些服務

wKiom1PSA-mDbCDSAAZ9kiqbBP4645.jpg

  1. # 這里面的腳本大致分為 2 類,以 S 開頭的和以 K 開頭的腳本。  
  2. # S 代表開機時啟動的,K 表示開機時不啟動。  
  3. # 每個文件的命名格式,例如:S01sysstat S 開機啟動 01 啟動次序 sysstat 啟動腳本名  
  4. # 啟動的定義是在每個腳本中定義的:例如  
  5. # # chkconfig: - 85 15  
  6. # 默認級別 啟動次序 不啟動次序 

這些腳本是否開機自啟動,可由 chkconfig 命令來管理。

  1. # 常用選項:  
  2. # chkconfig --add SRV_SCRIPT 可以將自己寫的一些腳本,讓此命令統一管理。例如:chkconfig --add httpd  
  3. # chkconfig --del SRV_SCRIPT 將服務刪除,意思就是服務不由chkconfig這種機制來管理  
  4. # chkconfig SRV_SCRIPT {on|off} 設置服務開機是否自啟動,默認管理的級別是2345.  
  5. # --level 2345 等,指定默認級別,可以與其他選項一起使用 

4、執行/etc/rc.d/rc.local腳本,此腳本是啟動過程中***啟動的一個腳本。

***會執行 /bin/login 登錄用戶。至此系統啟動過程完成。

博文鏈接:http://guoting.blog.51cto.com/8886857/1530109

責任編輯:牛小雨 來源: 51CTO
相關推薦

2017-03-20 15:08:04

RedisNoSQLcentos6

2010-03-24 15:36:18

2017-03-20 16:12:41

opensslcentosnginx

2012-01-05 11:08:37

CISCO路由器啟動流程

2021-04-13 15:09:16

CentOS6EOL項目

2017-03-03 09:10:41

2010-05-20 14:14:56

2011-09-30 10:56:20

Centos 6

2011-05-10 13:54:36

CentOS 6

2014-08-05 16:30:12

CentOS6LAMP

2019-06-20 10:56:28

CentOS系統啟動

2009-06-04 15:51:46

Struts流程圖

2020-07-28 21:42:23

程序流程圖

2020-07-28 21:38:24

跨職能流程圖

2009-11-05 09:35:54

WCF體系架構

2009-11-05 16:34:37

WCF序列化

2013-01-15 10:38:06

iOSAppAppCan

2009-11-24 09:39:55

SUSE Linux

2011-05-20 10:55:21

CentOS 6RHEL 6.1

2009-11-09 13:23:35

WCF協定
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本在线免费看最新的电影 | 国产精品久久久久久久久久三级 | 91在线网站 | 羞视频在线观看 | 日韩精品久久久久 | 综合国产在线 | 日韩免费看片 | 欧美日韩三级在线观看 | 精品国产伦一区二区三区观看方式 | 黄网站在线播放 | 久久精品国产亚洲 | 国产精品不卡一区 | 国产激情免费视频 | 精品欧美一区二区精品久久久 | www.日本精品 | 精产国产伦理一二三区 | 亚洲一区二区av | 国产精品1 | 精品自拍视频 | 久久久久久国模大尺度人体 | 日韩在线不卡 | 久久久亚洲成人 | 亚洲精品字幕 | 久久精品国产v日韩v亚洲 | 国产资源在线视频 | 国产精品波多野结衣 | 国产精品成人一区二区三区 | 成人在线视频免费看 | 一区二区三区高清 | 蜜臀久久99精品久久久久野外 | 久99久视频 | 国产激情视频 | 国产精品精品视频一区二区三区 | 久久精品屋 | 日韩成人在线视频 | 久久久观看 | 日本一区二区三区四区 | 欧美激情亚洲 | 天堂一区在线 | 日韩视频一区二区三区 | 中文字幕一区二区三区四区不卡 |