標籤:centos 啟動
Linux主要組成部分:kernel+rootfs+庫+程式
kernel(核心):進程管理、記憶體管理、網路管理、驅動程式、檔案系統、安全功能等
rootfs(根檔案系統):glibc(庫檔案)等
庫:函數集合,function,調用介面
procedure:程序呼叫,無傳回值
function:函數調用,有傳回值
核心設計流派:
單核心設計:所有功能整合於同一個程式中。例如:Linux
微核心設計:每種功能使用給一個單獨子系統實現。例如:windows,solaris
Linux核心特點:
支援模組化: .ko
支援模組的動態裝載和卸載
Linux核心組成部分:
核心檔案:/boot/vmlinux-VERSION-release
ramdisk:輔助裝載硬碟驅動
centos5:類比成硬碟/boot/initrd-VERSION-resease.img
centos6:類比成檔案系統/boot/initramfs-VERSION-resease.img
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/7A/26/wKiom1ajecXjX4z0AAA1-nlNfGY259.png" title="1.png" alt="wKiom1ajecXjX4z0AAA1-nlNfGY259.png" />
模組檔案:/lib/modules/VERSION-release/
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/7A/25/wKioL1aje5yD57QJAAA7h_Sq4qg670.png" title="2.png" alt="wKioL1aje5yD57QJAAA7h_Sq4qg670.png" />
CentOS 5 系統啟動流程
POST --> Bootsequence(BIOS) --> bootloader(MBR)--> kernel(ramdisk) --> rootfs(唯讀) --> /sbin/init --> (/etc/inittab) --> 設定預設運行層級 (id:3:initdefault:) --> 運行系統初始化指令碼、完成系統初始化(si::sysinit:/etc/rc.d/rc.sysinit) --> 關閉和啟動對應層級寫需要關閉的服務(l#:#:wait:/etc/rc.d/rc #) --> 設定登入終端(tty1:2345:respawn:/usr/sbin/mingetty tty1)
(1) POST:加電自檢
(2) BIOS:Basic Input and Output System
Boot Sequence:按次序尋找各引導裝置,第一個有引導程式的裝置即為本次啟動用到的裝置;
(3) bootloder:引導載入器
Linux包含兩個bootloder,分別為LILO(LInux LOader)和 GRUB(Grand Uniform Bootloader)
功能:提供一個菜單,允許使用者選擇要啟動系統或不同的核心版本,把使用者選定的核心裝載到記憶體中的特定空間中,解壓、展開,並把系統控制權移交給核心
(4) kernel:(載入根時必須為唯讀方式,在系統初始化指令碼/etc/rc.d/rc.sysinit中重掛)
自身初始化:
探測可識別到的所有硬體裝置
載入硬體驅動程式(有可能會藉助於ramdisk載入驅動)
以唯讀方式掛載根檔案系統(rootfs唯讀)
運行使用者空間的第一個應用程式:/sbin/init
init程式的類型:
SysV:init (CentOS5中使用,設定檔:/etc/inittab)
Upstart:init (CentOS6中使用併兼容centos5,設定檔:/etc/inittab,/etc/init/*.conf)
systemd:systemd (centos7設定檔:/usr/lib/systemd/system,/etc/systemd/system)
ramdisk類型:
ramdisk:initrd (centos5系統安裝後由mkinitrd產生
ramfs:initramfs (centos6系統安裝後後由dracut產生)
(5) /sbin/init
運行層級:為了系統的運行或維護等應用目的而設定
0-6:
# 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)
0:關機
1:單一使用者模式(root,無需登入),single,維護層級
2:多使用者模式:會啟動網路功能,但不會啟動NFS,維護模式
3:多使用者模式:正常模式,預設為文本介面
4:預留層級:可同3層級
5:多使用者模式:正常模式:圖形介面
6:重啟
切換層級:init #
查看層級:runlevel,who -r
設定檔:/etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
...
l6:6:wait:/etc/rc.d/rc 6
每一行定義一種action以及與之對應的process
id:runlevel:action:process
action:
wait:切換至此層級運行一次
respawn:此process終止,就重新啟動之
initdefault:設定預設運行層級:process省略
sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit
...
note:rc 0-->意味著讀取/etc/rc.d/rc0.d/[K*|S*]
K*:K##*
S*:S##* 連結檔案,源檔案位於/etc/rc.d/init.d/
##:數字越小越優先,取決於服務的依賴關係
按次序終止K開頭服務,啟動S開頭服務
for srv in /etc/rc.d/rc0.d/K*;do
$srv stop
done
for srv in /etc/rc.d/rc0.d/S*;do
$srv start
done
chkconfig:管理服務
--list :查看所有服務在所有層級的on/off狀態
--add name:添加SysV類型放置於/etc/rc.d/init.d(/etc/init.d)的服務指令碼
--del name :刪除
--level ### name on/off/reset:修改指定層級的連結類型
--level:省略為2345
7個層級的S或K取決有服務指令碼中的chkconfig行
#!/bin/bash
#
#chkconfig:LLL NN nn
LLL:哪個層級為S(0-6)
NN:S中的次序
nn:K中的次序
NOTE:正常層級下,最後啟動的一個服務S99local不是連結至/etc/rc.d/init.d的一個服務指令碼,而是指向於/etc/rc.d/rv/local指令碼;因此,不便或不需寫為服務指令碼放置於/etc/rc.d/init.d目錄,且有想開機自動啟動並執行命令,可直接放置於/etc/rc.d/rc.local檔案中
tty1:2345:respawn:/usr/sbin/mingetty tty1
tty2:2345:respawn:/usr/sbin/mingetty tty2
tty3:2345:respawn:/usr/sbin/mingetty tty3
tty4:2345:respawn:/usr/sbin/mingetty tty4
tty5:2345:respawn:/usr/sbin/mingetty tty5
tty6:2345:respawn:/usr/sbin/mingetty tty6
mingetty會自動調用login程式
tips:
/etc/rc.d/rc.sysinit:系統初始化指令碼
(1) 設定主機名稱
(2) 設定歡迎資訊
(3) 啟用udev和selinux
(4) 掛載/etc/fstab檔案中定義的檔案系統
(5) 檢測根檔案系統,並以讀寫方式重新掛載根檔案系統(核心掛載為唯讀模式,此處需重新掛載)
(6) 設定系統時鐘
(7) 啟用swap裝置
(8) 根據/etc/sysctl.conf檔案設定核心參數
(9) 啟用lvm及software raid裝置
(10) 載入額外裝置的驅動程式
(11) 清理操作
CentOS 6的系統啟動過程與5大致相同,但其init程式為upstart,其設定檔為/etc/inittab,/etc/init/*.conf,並非單個的/etc/inittab檔案。
[[email protected] init]# ll
total 68
-rw-r--r--. 1 root root 412 Apr 9 2015 control-alt-delete.conf
-rw-r--r--. 1 root root 130 Mar 12 2014 init-system-dbus.conf
-rw-r--r--. 1 root root 463 Apr 9 2015 kexec-disable.conf
-rw-r--r--. 1 root root 560 Apr 9 2015 plymouth-shutdown.conf
-rw-r--r--. 1 root root 357 Apr 9 2015 prefdm.conf
-rw-r--r--. 1 root root 505 Apr 9 2015 quit-plymouth.conf
-rw-r--r--. 1 root root 417 Apr 9 2015 rc.conf
-rw-r--r--. 1 root root 1046 Apr 9 2015 rcS.conf
-rw-r--r--. 1 root root 430 Apr 9 2015 rcS-emergency.conf
-rw-r--r--. 1 root root 725 Apr 9 2015 rcS-sulogin.conf
-rw-r--r--. 1 root root 2915 Nov 23 2013 readahead-collector.conf
-rw-r--r--. 1 root root 1559 Nov 23 2013 readahead.conf
-rw-r--r--. 1 root root 726 Nov 23 2013 readahead-disable-services.conf
-rw-r--r--. 1 root root 1302 Apr 9 2015 serial.conf
-rw-r--r--. 1 root root 791 Apr 9 2015 splash-manager.conf
-rw-r--r--. 1 root root 473 Apr 9 2015 start-ttys.conf
-rw-r--r--. 1 root root 335 Apr 9 2015 tty.conf
[[email protected] init]#
本文出自 “機智少年普朗克” 部落格,謝絕轉載!
CentOS 5與6的啟動流程