linux開機啟動流程

linux開機啟動流程:


wKiom1fRFGORQGWiAACCp6aQIlY198.jpg


 

一、BIOS 加電自檢 
當你按電源開關開機時,電腦會首先去啟動BIOS(基本輸入輸出系統),BIOS一般是集成在主板上的. 
BIOS 的工作 
1.檢測連接硬件,比如顯卡,內存,磁盤等等,檢測的目的是以后把這些設備信息提供給操作系統 
2.尋找啟動磁盤,每一種BIOS都會有開機啟動菜單,可以在菜單里設置以哪個設備啟動系統 
比如:光驅,硬盤,網絡等等,這個菜單可以設置多個選項,依照設置次序在設備上尋找啟動信息 
3.找到了啟動硬盤,接著BIOS就會在磁盤上找啟動扇區,找到內核啟動系統. 
1)先試著尋找第一個扇區,也就是主引導記錄MBR(Master Boot Record) 
2)如果第一個扇區上沒有沒有存在操作系統,再去尋找標記為BOOT的分區. 
不論是MBR還是BOOT分區,存儲操作系統的空間都只有446字節; 
如果沒有在上面提到的位置找到操作系統的內核,那么BIOS就無法繼續啟動工作. 
而我們的內核往往會大于446個字節,存放在磁盤的其他位置上,既然446裝不下內核,又為了能順利的找到放在其他位置上的內核, 
人們想出了一個辦法就在446字節里寫了一個小程序,當BIOS試著啟動操作系統時就會執行這個小程序,然后再由小程序來載入其他位置的內核.這個小程序就是啟動載入器(boot loader) 
二、BOOT Loader 
linux的boot loader(上文提到的小程序) 常見的有兩種:lilo grub 
因為lilo存在著一個1024柱面的限制,并且更改了磁盤上的啟動信息文件后需要重新啟動系統才能同步446字節的內容,因為lilo的缺陷,已經被grub所取代.現在的絕大多數類linux系統都采用grub做boot loader; 
grub則沒有了lilo各種限制,而且方便到能修改系統文件的啟動內容就可以立刻與446內容同步. 
那么我們就看看grub的內容 它存在于 /boot/grub中 
GRUB有幾個重要的文件,STAGE1、STAGE1.5、STAGE2 
STAGE1:它只有512字節,通常放在MBR中,它的作用很簡單,就是在系統啟動時用于裝載STAGE2并將控制權交給它。 
STAGE2:GRUB的核心,所有的功能都是由它實現。 
STAGE1.5:介于STAGE1和STAGE2之間,是它們的橋梁,因為STAGE2較大,通常都是放在一個文件系統當中的,但是STAGE1并不能識別文件系統格式, 
所以才需要STAGE1.5來引導位于某個文件系統當中的STAGE2。根據文件系統格式的不同,STAGE1.5也需要相應的文件,如:e2fs_stage1_5,fat_stage1_5,分別用于識別ext和fat的文件系統格式。它存放于1-63的柱面之間. 
引導順序如下:STAGE1->;STAGE1.5->;STAGE2, 
主要的配置文件時 grub.conf 
里面選項含義: 
title:一個操作系統引動的標頭,可以使多個 
root :指明所需文件存在于哪個磁盤哪個分區上 (hd0,0)表示第一個硬盤,第一個分區,可參考/boot/grub/device.map 
kernel:內核文件的名字,并且會有一些加載內核時的參數 or代表以只讀方式加載 
initrd:包含一些附加的驅動程序

三、內核啟動 
內核啟動后會向bios查詢電腦的所有硬件信息,然后自己接手下來管理這些設備,以便提供給linux使用 
內核會試著驅動這些設備,這些設備的驅動一部分包含在內核中,叫做靜態驅動,一部分以模塊的方式(動態)存放文件系統中,由 
于此時還未掛載任何文件系統,因此還不能使用文件系統中的模塊,這里只能驅動在內核中存在的硬件驅動程序的對應設備.想驅動內核中未包含的硬件驅動就需要加載文件系統. 
內核會嘗試掛載根文件系統,根文件系統至少包含 /etc /bin /sbin /lib /dev 這5大目錄 
他們5個缺一不可.都會導致系統無法啟動 
根文件系統掛載是以只讀方式掛載的,因為這時linux還在啟動階段,并不穩定,避免破壞系統資料 
四、啟動INIT服務 
順利的掛載了根文件系統后,就會啟動init服務 
內核會按 /sbin/init /etc/init /bin/init 順序尋找init程序, 
如果找不到則內核報錯 這里存在一個參數 init=/bin/sh 如果啟動時指定了則最后執行/bin/sh 
而不會產生內核報錯.也被稱為快速啟動,因為它忽略了很多啟動初始化工作. 
啟動init的目的就是為了初始化系統環境,啟動了init就證明了內核已經順利啟動,接下來就由init服務來建立linux使用環境 
init做了什么?它會讀取 /etc/inittab 文件,根據這個文件的信息來進行初始化工作. 
會執行三個腳本 /etc/rc.d/rc.sysinit /etc/rc.d/rc /etc/rc.d/rc.local 
rc.sysinit 主要的功能用來建立系統的基本環境 
啟動udev selinux子系統 
udev負責產生 /dev中的文件,selinux負責增強系統的安全性 
設定核心參數 sysctl -p 加載 /etc/sysctl.conf 
設定系統時間 將硬件時間設定為系統時間 
加載鍵盤和交換分區 swapon -a -e 
設置主機名,掛載文件系統,并將根重新掛載為可讀寫的. 
加載動態驅動模塊 
USB設備與RAID & LVM 
卸載 /initrd/ 目錄

rc 腳本設置啟動級別 linux中有許多不同的啟動級別,不同的啟動級別會制定不同的服務
根據指定rc的參數會對應執行 /etc/rc.d/rc[0-6].d/ 中的連接腳本文件 以S開頭的則啟動
rc.local 前兩個腳本都是系統至關重要的腳本,如果我們想在啟動過程中放置一些其他程序
應該使用rc.local腳本中 因為S99local存在于rc[2-5].d中
三個RC腳本執行完畢后,就會建立虛擬主控制臺 執行 /bin/login 就提供了用戶登陸界面了
如果是圖形 L5級別的話,會啟動X window登錄界面
所有的啟動就都已經完畢
用戶環境初始化
輸入用戶名和密碼系統驗證,然后會執行
    /etc/profile
    /etc/profile.d/*.sh $HOME/.bash_profile
    /etc/bashrc
    $HOME/.bashrc

啟動級別 
0 關機 
1 單用戶 
2 多用戶模式但帶網絡但不能遠程登錄 
3 不受限多用戶模式 TUI 
4 保留 
5 圖形模式 
6 重新啟動 
查看啟動級別 
# runlevel        或者 who -r
N 3 
N是上次的級別,3是當前級別 也就是說機器開機就是3級別 
切換級別 
init 5




設置開機自動寫的服務

1 將自己所寫的腳本放到/etc/init.d, 并將腳本加上執行權限chmod +x 腳本名

[root@centos6 rc.d]# ll -hi /etc/init.d

1179741 lrwxrwxrwx. 1 root root 11 Aug 17 13:35 /etc/init.d -> rc.d/init.d

[root@centos6 etc]# ll -di /etc/rc.d/init.d/

1179742 drwxr-xr-x. 2 root root 4096 Aug 25 06:21 /etc/rc.d/init.d/


2 在腳本中寫入

#!/bin/bash

#chkconfig:35 88 22                         #35表示在級別3和級別5下開啟此程序

                                                          #88表示開機時運行的優先級

                                                          #22表示關機時運行的優先級

#description:testsrv script

3 執行chkconfig –add 腳本名稱,此時在/etc/rc.d/目錄下的rc3.d和rc5.d中創建腳本的連接,K代表關機關閉順序,S代表開機啟動順序


chkconfig命令:


查看服務在所有級別的啟動或關閉設定情形:

chkconfig[–list] [name]

添加:

SysV的服務腳本放置于/etc/rc.d/init.d(/etc/init.d)

chkconfig–add name

#!/bin/bash

#LLLL 表示初始在哪個級別下啟動,-表示都不啟動

# chkconfig: LLLL nnnn

刪除:

chkconfig–del name

修改指定的鏈接類型

chkconfig[–level levels] name <on|off|reset>

–level LLLL: 指定要設置的級別;省略時表示2345

作業

1、每周2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如“messages-yyyymmdd”

    

0 0 * * 2,4,7 cp -r /var/log/messages /logs/"messages-`date +%Y%m%d`"

2、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中

0 */2 * * * egrep "^M|^S" /proc/meminfo >> /tmp/meminfo.txt

原創文章,作者:zebra930,如若轉載,請注明出處:http://www.www58058.com/44651

(1)
zebra930zebra930
上一篇 2016-09-19 13:49
下一篇 2016-09-19 13:49

相關推薦

  • linux 哲學思想

    一切皆文件:普通文件,目錄、字符設備、塊設備、套接字在linux中都是以文件被對待;雖然類型不通,但是對其提供得卻都是統一套操作界面。 由眾多的單一程序,一個程序只實現一個功能,多個程序組合完成負責任務。單一的程序可以保持高效的執行效率,對于復雜的功能linux通過許多簡單程序組合等方式實現,在保證簡單程序的高效性同時,復雜的程序也必然是高效性的。 文本文件…

    Linux干貨 2017-08-19
  • grub詳解

    #GRUB詳解 grub基礎概念 前面的開機過程我們知道:按照BIOS定義的硬件設備啟動順序,第一啟動設備中的MBR去讀取boot loader。boot loader功能很強大,要重新自檢硬件設備,開始有一個菜單供用戶選擇系統或者內核版本,還要加載內核將內核解壓到RAM中并執行,最后將控制權移交給內核。屈屈446個字節怎么讓它完成那么多功能。所以Linux…

    Linux干貨 2016-11-25
  • 馬哥linux 0726作業

    1,課堂練習 顯示當前日期,格式:2016-08-08 顯示前天是星期幾 設置當前日期為2008-08-08 08:00 使用字符端登陸時,顯示當前登錄終端號,主機名和當前時間 1,首先我們知道當前登錄信息的配置文件在/etc/issue中 2,然后我們查詢幫助看看issue的具體描述查到了相關的mingetty的命令當中關于當中的一些選項就是我們需要的三個…

    Linux干貨 2016-08-04
  • Linux網絡屬性配置(三)修改配置文件&& CentOS 7 網絡配置

    Linux網絡屬性配置(三)&& CentOS 7網絡配置 Linux網絡屬性配置(三)修改配置文件&& CentOS 7 網絡配置 Linux網絡屬性配置(三)修改配置文件 IP、MASK、GW、DNS相關配置文件: /etc/sysconfig/network-scripts/ifcfg-IFACE 路由相關配置文件: /…

    Linux干貨 2016-07-07
  • PXE網絡引導自動化安裝系統詳解

    一、PXE:預引導加載環境  1.PXE          Preboot ExecuteEnvironment:支持工作站通過網絡從遠端服務器下載映像,并由此支持通過網絡啟動操作系統,在啟動過程中,終端要求服務器分配IP地址,再用TFTP(trivial f…

    2016-04-30
  • MySQL存儲過程中IN、OUT、INOUT參數使用

    MySQL存儲過程中IN、OUT、INOUT參數使用 MySQL存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN、OUT、INOUT形式如:CREATE PROCEDURE([IN|OUT|INOUT] 參數名 數據類型,…) IN 輸入參數:表示該參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被返回,為默認值。| 意思…

    Linux干貨 2017-05-08
欧美性久久久久