Linux系統啟動流程與內管管理(上)

在講linux系統啟動流程之前,來講講linux的組成,這樣能能幫助我們深入了解系統的啟動流程,廢話不多說直接上系統啟動流程圖

wKioL1WeA6HTBxVOAAD9Bc1k6qQ489.jpg

linux組成

linuxkernel+rootfs

kenrel的作用:進程管理、內存管理、網絡管理、驅動程序、文件系統、安全管理等

 

rootfs:程序和glibc

庫:函數結合,function,調用接口(頭文件負責傳輸)

過程調用:procedure,無返回值

函數調用:function

程序:二進制執行文件

 

內核設計流派

單內核:把所有功能集成與一個程序

如:linux

微內核:每種功能使用一個單獨的子系統實現

如:windows,Solaris

 

內核

linux內核特點

支持模塊化:.ko(內核對象)

如:文件系統,硬件驅動,網絡協議等,支持內核模塊的動態加載和卸載

組成部分

核心文件/boot/vmlinuz-VERSION-release

ramdisk:輔助的偽根系統

CentOS5:/boot/initrf-VERSION-release.img

CentOS6.7/boot/initramfs-VERSION-release.img

模塊文件:/lib/modules/VERSION-release

 

 

CentOS6的啟動流程

加載BIOS的硬件信息,獲取第一個啟動設備

讀取第一個啟動設備MBR的陰引導載程序grub的啟動信息

加載核心操作系統的黑信息,核心開始解壓縮,并嘗試驅動硬件設備

核心執行init程序并獲取運行信息

INIT執行/etc/rc.d/rc.sysinit文件

啟動核心的外掛模塊(/etc/modprobe.conf

INIT執行各個批處理文件

INIt執行/etc/rc.d/rc.local

執行/bin/login程序,等待用戶登錄

登錄之后打開開始以shell控制主機

 

系統整體的啟動流程可以分為以下幾個過程

1、  加電自檢:power  on system  testPOST

自檢主要檢測一下硬件設備是否存在并能正常運行,如:CPU,內存,硬盤是否存在并能正常運行;CPU風扇是否能夠正常運轉散熱;以及一些外圍的輸入輸出設備是否存在。有些設備存在與否都不影響系統地正常啟動,如鼠標,鍵盤等

這些自檢的功能是由一個軟件程序來實現的,這個軟件程序叫做:BIOSBasic Inout Output System)它裝載與一個硬件芯片CMOS之上,加電過程是給CMOS通電,然后啟動其上的BIOS程序,BIOS根據CMOS上的信息讀取其他硬件信息并檢測是否存在并能正常運行,之后進行硬件設備的初始化

 

2、  選擇啟動 順序,加載MBR

硬件設備初始化之后,BIOS會列出一些可以啟動的裝置順序,讀取第一個啟動設備中操作系統的核心文件,而這個核心文件是由Boot Loader(引導加載器)的管理程序來管理的,Boot Loader主要去識別、加載操作系統中的核心文件,并提交到內存中運行,進而來啟動操作系統

 

3、  加載系統內核kernel,執行系統初始化信息

Boot Loader開始讀取操作系統內核文件后,接下來就會將內核文件解壓縮后裝載到內存當中,內核文件通常存放在/boot目錄下有一個vmlinuz打頭的文件,但是此時內核程序還沒有加載到磁盤,是不能讀取系統上的內核文件的,linux中采用了一種叫虛擬文件系統,它跟內核文件放在同一個目錄下名為init打頭的文件,接下來Boot Loader程序將其加載到內存中,虛擬文件系統被解壓縮并且放入內存模擬一個根文件系統,它會提供一個程序,可以加載啟動過程中所需要的核心模塊,加載完成,會協助內核呼叫/sbin/init來執行后續的正常啟動。

4、  啟動用戶空間第一個執行程序/sbin/init

在內核、硬件及驅動信息加載完畢后,內核會呼叫用戶空間的第一個執行程序/sbin/init,init程序主要功能時準備軟件運行環境,包括系統的主機名,網絡配置,文件系統格式等其他服務的啟動管理,而這些所有的操作都是通過init的配置文件來定義。

 

init程序的類型

Sysvinit,Centos5之前

配置文件/etc/inittab

Upstartinit,CentOS6

配置文件:/etc/inittab, /etc/init/*.conf

Systemdsystemd,CentOS 7

配置文件:/usr/lib/system/system

/etc/system/system

 

ramdisk

內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問

ramdisk–>ramfs提高速度

CentOS5initrd,工具程序:mkinitrd

CentOS6initramfs,工具程序:mkinitrd,dracut

 

系統初始化

POST–>BootSequence(BIOS)–>Bootloader(MBR)–>kenel(ramdisk)–>rootfs(只讀)–>initsystemd

 

 

運行級別

為系統運行或維護等目的而設定 0-6,7個級別

 

0halt關機

1single user mode 直接以管理員的身份切入

2multi  user mode,no NFS多用戶模式,啟動網絡功能,但不會啟動NFS,維護模式

3multi user mod ,text mode,正常模式,文本界面

4reserved 預留級別,同三級別一樣

5multi user mode graphic mode,多用戶模式,正常模式,圖形界面

6reboot  重啟

默認級別:3,5

切換級別:init #

查看級別:runlevel; who  -r

 

init初始化

init讀取其初始化文件/etc/inittab

inittab完成如下任務

1、設定默認運行界別

2、運行系統初始化腳本

3、運行指定級別目錄下的腳本

4、ctrlaltdel組合件操作

5、定義UPS電源在電源故障/恢復時的操作

6、啟動虛擬終端(2345級別)

7、啟動圖形終端(5級別)

 

CentOS5inittab文件

每一行定義一種action以及與之對應的process

#

# inittab       This file describes how the INIT process should set up

#               the system in a certain run-level.

#

# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>

#               Modified for RHS Linux by Marc Ewing and Donnie Barnes

#

 

# Default runlevel. The runlevels used by RHS are:

#   0 – halt (Do NOT set initdefault to this)

#   1 – Single user mode

#   2 – Multiuser, without NFS (The same as 3, if you do not have networking)

#   3 – Full multiuser mode

#   4 – unused

#   5 – X11

#   6 – reboot (Do NOT set initdefault to this)

 

id:3:initdefault:

 

# System initialization.

si::sysinit:/etc/rc.d/rc.sysinit

 

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

 

# Trap CTRL-ALT-DELETE

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

 

# When our UPS tells us power has failed, assume we have a few minutes

# of power left.  Schedule a shutdown for 2 minutes from now.

# This does, of course, assume you have powerd installed and your

# UPS connected and working correctly. 

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

 

# If power was restored before the shutdown kicked in, cancel it.

pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

 

 

# Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

 

# Run xdm in runlevel 5

x:5:respawn:/etc/X11/prefdm –nodaemon

 

id:runlevels:action:process   設定默認運行級別

 

id:標識

runlevel:在那個級別運行慈航

action在什么情況下執行慈航

process:要運行的程序

 

si::sysinit:/etc/rc.d/rc.sysinit 系統初始化腳本

action

initdefault:設定默認運行幾倍

sysinit:系統初始化

wait:等待級別奇幻至此級別時執行

respawn:一旦程序終止,會重新啟動

 

/etc/rc.d/rc.sysinit 系統初始化

該腳本完成如下工作

1.   激活udevselinux

2.   根據/etc/sysctl.conf文件來設定內核參數

3.   設定始終

4.   裝載鍵盤映射

5.   啟用交換分區

6.   設置主機名

7.   根文件系統檢測,并以讀寫方重新掛載

8.   激活RAIDlvm設備

9.   啟用磁盤配額

10. 根據/etc/fstab檢查并掛載其他文件系統

11. 清理過期的鎖文件的pid文件

 

 

/etc/rc.d/rc

說明:rc  N –>意味著讀取/etc/rc.d/rcN.d/

K*K##*;##運行次序,數字越小,越先運行,數字越小的服務,依賴的服務先關閉,而后關閉被依賴的服務

S*S##*;##運行次序;數字越小,越先運行,;數字越小的服務,被依賴的服務先啟動,而啟動依賴的服務后

for  I    in   /etc/rc3.d/K*;do

    $I  stop

done

for I in /etc/rc3.d/S* ;do

         $i start

done

 

關閉或啟動的優先次序,數據越小越優先被選定,先關閉以K開頭的服務然后啟動以S開頭的服務

 

服務類腳本/etc/rc.d/init.d    /etc/init.d(鏈接文件內容跟/etc/rc.d/init.d內容太完全一樣)

SysV /etc/rc.d/init.d

服務名  {start | stop | restart |status |reload |configtest }

 

 

chkconfig命令

chkconfig  runlevels   ss(啟動次序)   kk(關閉次序)

chkconfig命令來為此腳本在rc#.d目錄創建鏈接時,runlevel表示默認創建為S*開頭的鏈接,除此之外的級別默認創建為K*開頭的鏈接,S后面的啟動優先級為SS所表示的數字,K后面關閉次序KK所表示的數字,“”表示設有默認為S*開頭的鏈接

 

description:用于說明此腳本的簡單功能:“\”續行

 

chkconfig  –list:查看所有獨立守護服務的啟動設定

chkconfig –list   service_name

 

chkconfig –add  service_name

 

chkconfig –del service_name

chkconfig –35  service  off

chkconfig –level service_name {on|off}

 

如果省略級別指定,默認為2345級別

/etc/rc.d/rc.local:系統最后啟動的一個服務,準確的說應該執行的一個腳本

 

守護進程的類別(像第三方的應用程序)

獨立守護進程

xinetd:超級獨立守護進程 (代理人)

瞬時守護進程:不需要關聯至運行級別,xinetd進程所管理

進入的請求首先被xinetd代理

配置文件:/etc/xinetd.conf   /etc/xinetd.d/serviername

libwrap.so文件鏈接 

chkconfig控制的符

chkconfig tftp  on

 3.jpg

service命令:手動管理服務

  service 服務   start | stop  |restart

  service  –status-all  顯示所有服務的狀態

2.jpg

 

 

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

(0)
fszxxxksfszxxxks
上一篇 2016-09-14
下一篇 2016-09-14

相關推薦

  • 基礎指令使用篇 Linux版

    回顯,回聲 echo echo hello > /dve/pts/1 打開圖形界面 init 5   關閉圖形界面 init 3 ctrl+alt+F1-6字符,F7圖形界面 chvt 改變虛擬終端 chvt +數字 startx  圖形的軟件打開 poweroff centOS 6.8與7.2都正常關閉斷電 hostname 顯示…

    系統運維 2016-08-04
  • CentOS系統啟動流程

    Linux系統(Centos 5、6)啟動流程 一、POST加電自檢 Power-On-Self-Test 按下電源鍵以后,系統調用存儲在ROM中的BIOS和存儲在RAM中的CMOS(用來保存各項參數的設定)完成系統硬件狀態的檢查,如果硬件有問題則提示用戶問題嚴重無法開機的會發出警報聲音;硬件自檢完成后進入下一步。 二、Boot Sequence與…

    Linux干貨 2016-11-24
  • 重構與模式:改善代碼三部曲中的第三部

    一、改善代碼的三部曲    《設計模式》-> 《重構》-> 《重構與模式》。也就是設計->重構->重構出新設計。    《設計模式》主要詳細說明20幾種模式,為我們帶來了常見設計問題的經典解決方案,從而改變了整個面向對象開發的面貌。為設計而著。    《重構》改善既有代碼的設…

    Linux干貨 2015-04-07
  • 推薦-Corosync + Pacemaker 搭建高可用Httpd服務

    Corosync + Pacemaker 搭建高可用Httpd服務 實驗描述 1.兩個測試節點,分別為node5.redhat.com和node6.redhat.com地址分別為172.16.100.5和172.16.100.62.集群服務為httpd,利用nfs做共享存儲,NFS地址為172.16.0.254,NFS已經共享出了一個/www/htdocs目…

    系統運維 2016-04-05
  • 谷歌三大核心技術(二)Google MapReduce中文版

    摘要 MapReduce是一個編程模型,也是一個處理和生成超大數據集的算法模型的相關實現。用戶首先創建一個Map函數處理一個基于key/value pair的數據集合,輸出中間的基于key/value pair的數據集合;然后再創建一個Reduce函數用來合并所有的具有相同中間key值的中間value值?,F實世界中有很多滿足上述處理模型的例子,本論文將詳細描…

    Linux干貨 2015-04-13
  • 小型網站MYSQL問題二:Percona Xtrabackup實現數據庫備份和恢復

    故事背景:前面大膽的選擇了innodb,接下來就要考慮數據庫的備份和恢復。俗話說“常在河邊走,哪能不濕鞋“,自從接觸數據這塊,使我一直對它保持敬畏之心。在這里使用了percona公司的xtrabckup工具來實現數據庫備份和恢復。操作步驟記錄如下: 1、安裝軟件倉庫(不要問我為什么不用源碼安裝,好吧,其實我懶。) wget https://www.…

    數據庫運維 2015-12-19
欧美性久久久久