(一)Linux組成結(jié)構(gòu)
- Linux: kernel+rootfs
kernel: 進(jìn)程管理、內(nèi)存管理、網(wǎng)絡(luò)管理、驅(qū)動(dòng)程序、文件系統(tǒng)、安全功能 - rootfs: 程序和glibc
- 庫:函數(shù)集合, function, 調(diào)用接口(頭文件負(fù)責(zé)描述)
- 過程調(diào)用:procedure ,無返回值
- 函數(shù)調(diào)用:function
- 程序:二進(jìn)制執(zhí)行文件
(1)內(nèi)核介紹
(1)Linux 內(nèi)核特點(diǎn):
- 支持模塊化:.ko (內(nèi)核對(duì)象)
- 如:文件系統(tǒng),硬件驅(qū)動(dòng),網(wǎng)絡(luò)協(xié)議等
- 支持內(nèi)核模塊的動(dòng)態(tài)裝載和卸載
(2)組成部分
- 核心文件:
- /boot/vmlinuz- VERSION -release
- ramdisk :輔助的偽根系統(tǒng)
- CentOS 5: /boot/initrd- VERSION-release.img
- CentOS 6,7: /boot/initramfs- VERSION -release.img
- 模塊文件:/lib/modules/ VERSION-release
(二)CentOS6啟動(dòng)流程
(1) POST自檢:
系統(tǒng)接通電源時(shí)自動(dòng)檢測(cè)CPU,內(nèi)存,主板,顯卡,聲卡,網(wǎng)卡等I/O設(shè)備,如果設(shè)備正常則進(jìn)行下一啟動(dòng)步驟。
(2) MBR引導(dǎo)
MBR(Master Boot Record) MBR記錄一般是在磁盤 0 磁道 1 扇區(qū),共512個(gè)字節(jié)。前446個(gè)字節(jié)是BootLoder,后 4*16 的 64 個(gè)字節(jié)是存放分區(qū)信息的,最后 2 個(gè)字節(jié)是校驗(yàn)信息,一般是 55AA。
(3) MBR引導(dǎo)GRUB(GRand Unified Bootloader)
Bootloader的工作機(jī)制:bootloader可以訪問文件系統(tǒng),而內(nèi)核則作為文件而存在。bootloader訪問內(nèi)核文件時(shí),是將內(nèi)核文件Vmlinz所在的整個(gè)分區(qū)當(dāng)作根去訪問的。我們常用的內(nèi)核加載器是GRUB(Grand UnifiedBootloader),因此由grub來加載內(nèi)核。
# grub文件內(nèi)部的所有內(nèi)容
[root@vinny grub]# ll
total 280
-rw-r--r--. 1 root root 63 Jun 19 00:39 device.map
-rw-r--r--. 1 root root 13428 Jun 19 00:39 e2fs_stage1_5
-rw-r--r--. 1 root root 12636 Jun 19 00:39 fat_stage1_5
-rw-r--r--. 1 root root 11780 Jun 19 00:39 ffs_stage1_5
-rw-------. 1 root root 771 Jun 19 00:39 grub.conf
-rw-r--r--. 1 root root 11772 Jun 19 00:39 iso9660_stage1_5
-rw-r--r--. 1 root root 13284 Jun 19 00:39 jfs_stage1_5
lrwxrwxrwx. 1 root root 11 Jun 19 00:39 menu.lst -> ./grub.conf
-rw-r--r--. 1 root root 11972 Jun 19 00:39 minix_stage1_5
-rw-r--r--. 1 root root 14428 Jun 19 00:39 reiserfs_stage1_5
-rw-r--r--. 1 root root 1341 Nov 15 2010 splash.xpm.gz
-rw-r--r--. 1 root root 512 Jun 19 00:39 stage1
-rw-r--r--. 1 root root 126148 Jun 19 00:39 stage2
-rw-r--r--. 1 root root 12040 Jun 19 00:39 ufs2_stage1_5
-rw-r--r--. 1 root root 11380 Jun 19 00:39 vstafs_stage1_5
-rw-r--r--. 1 root root 13980 Jun 19 00:39 xfs_stage1_5
根據(jù)上邊的所有展示內(nèi)容,發(fā)現(xiàn)很多后綴相同的文件device.map,menulst,stage1,stage2,
以及一系列的stage1_5
組成。一下是我對(duì)這些文件的解讀,說錯(cuò)了請(qǐng)大牛糾正。
device.map 可能是啟動(dòng)系統(tǒng)的時(shí)候,一些需要加載的驅(qū)動(dòng)模塊,和分區(qū)信息的地圖。我們現(xiàn)在出門都需要地圖,更何況刻板認(rèn)真的計(jì)算機(jī)。
menu.lst 是grub.conf的鏈接文件,當(dāng)我們啟動(dòng)系統(tǒng)的時(shí)候,會(huì)有一個(gè)選擇功能選擇菜單,等下免我會(huì)詳細(xì)介紹。
stage:grub引導(dǎo)程序過于龐大,所以在啟動(dòng)過程中分為三個(gè)階段進(jìn)行:
第一階段
存放在MBR中
,第二階段
存放于內(nèi)核文件系統(tǒng)中。第二階段沒有文件系統(tǒng),怎么訪問呢。這個(gè)時(shí)候出現(xiàn)了stage1_5
階段,反正就是想辦法讓第二階段啟動(dòng),所以這個(gè)地方出現(xiàn)了很多stage1_5
為后綴的文件。-
grub.conf 文件參數(shù)意義
# grub.conf generated by anaconda default=0 # 默認(rèn)啟動(dòng)的內(nèi)核title, 0 表示是第一個(gè) timeout=5 # 默認(rèn)等待時(shí)間 splashimage=(hd0,0)/grub/splash.xpm.gz # 指定菜單的背景圖片的路徑。為xpm格式,采用gzip壓縮,只能為14bits色 hiddenmenu # 隱藏菜單 title CentOS 6 (2.6.32-696.el6.x86_64) # 標(biāo)題名,用戶可自定義 root (hd0,0) # 指定 grub 的根位置 # 指定 kernel 文件的位置,還要指出 root(系統(tǒng)啟動(dòng)后) 的位置,掛載方式 ro,這項(xiàng)很關(guān)鍵。 # 加載后會(huì)啟動(dòng) init 進(jìn)程。 kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=0861b596-c806-4895-97b3-2ef308bdc6a3 nomodeset rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rhgb quiet # 在內(nèi)核啟動(dòng)過程中裝載根文件系統(tǒng)時(shí)有用 initrd /initramfs-2.6.32-696.el6.x86_64.img
(4)引導(dǎo)加載器程序GRUB
(1)grub legacy
GRUB是bootloader階段的一個(gè)程序,這是Centos中最常用的引導(dǎo)程序,CentOS 6安裝的是grub legacy。
按e:進(jìn)入編輯模式,用于編輯菜單
然后按c: 進(jìn)入命令模式,交互式接口
這個(gè)界面就和上邊聯(lián)系起來了 ,假如你不會(huì)寫的話,可以敲
help
就可以查看幫助。grub>
后邊需要跟上本文中grub.conf 文件參數(shù)意義
里邊的內(nèi)容。
(5) 進(jìn)入kernel
在GRUB中選擇對(duì)應(yīng)的kernel進(jìn)入,然后kernel會(huì)對(duì)自身進(jìn)行初始化,始化系統(tǒng)中各設(shè)備并做相關(guān)的配置工作,其中包括CPU、I/O、存儲(chǔ)設(shè)備等。運(yùn)行用戶空間的第一個(gè)應(yīng)用程序,在CentOS 6上是init,在CentOS 7上是Systemd。
(1)讀取/etc/inittab來讀取默認(rèn)級(jí)別
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
#0:關(guān)機(jī)
# 1 - Single user mode
#1:?jiǎn)斡脩裟J?root, 無須登錄), single, 維護(hù)模式
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#2: 多用戶模式,會(huì)啟動(dòng)網(wǎng)絡(luò)功能,但不會(huì)啟動(dòng)NFS;維護(hù)模式;
# 3 - Full multiuser mode
#3:多用戶模式,正常模式;文本界面;
# 4 - unused
#4:預(yù)留級(jí)別;可同3級(jí)別;
# 5 - X11
#5:多用戶模式,正常模式;圖形界面;
# 6 - reboot (Do NOT set initdefault to this)
#6:重啟
id:5:initdefault:
注意:上邊的最后一行是制定每次啟動(dòng)時(shí)后的默認(rèn)啟動(dòng)級(jí)別,修改它就是修改你的默認(rèn)啟動(dòng)級(jí)別。
如果要查看當(dāng)前系統(tǒng)運(yùn)行的init級(jí)別可使用runlevel
或者who -r
(2)執(zhí)行初始化系統(tǒng)腳本 /etc/rc.d/rc.sysinit 來初始化腳本
這個(gè)腳本里邊有很多內(nèi)容,這里就不一一列舉了,只是把它做的事情給列出來。
# 獲取網(wǎng)絡(luò)環(huán)境與主機(jī)類型。首先會(huì)讀取網(wǎng)絡(luò)環(huán)境設(shè)置文件"/etc/sysconfig/network",獲取主機(jī)名稱與默認(rèn)網(wǎng)關(guān)等網(wǎng)絡(luò)環(huán)境。
# 打印文本歡迎信息。
# 掛載/etc/fstab文件中定義的其它文件系統(tǒng)。
# 激活swap
# 檢測(cè)根文件系統(tǒng),并以讀寫方式重新掛載
# 決定是否啟動(dòng)SELinux和udev。
# 接口設(shè)備的檢測(cè)
# 用戶自定義模塊的加載。用戶可以再"/etc/sysconfig/modules/*.modules"加入自定義的模塊,此時(shí)會(huì)加載到系統(tǒng)中。
# 加載核心的相關(guān)設(shè)置。按"/etc/sysctl.conf"這個(gè)文件的設(shè)置值配置功能。
# 設(shè)置系統(tǒng)時(shí)間(clock)。
# 設(shè)置終端的控制臺(tái)的級(jí)別。
# 設(shè)置raid及LVM等硬盤功能。
# 以方式查看檢驗(yàn)磁盤文件系統(tǒng)。
# 進(jìn)行磁盤配額quota的轉(zhuǎn)換。
# 重新以讀取模式載入系統(tǒng)磁盤。
# 啟動(dòng)quota功能。
# 啟動(dòng)系統(tǒng)隨機(jī)數(shù)設(shè)備(產(chǎn)生隨機(jī)數(shù)功能)。
# 清楚啟動(dòng)過程中的臨時(shí)文件。
# 將啟動(dòng)信息加載到"/var/log/dmesg"文件中。
(3)然后執(zhí)行 /etc/rc.d/rc 腳本
當(dāng)你選擇默認(rèn)模式為3的時(shí)候,默認(rèn)會(huì)讀取/etc/rc.d/rc3.d
下的所有腳本,來控制系統(tǒng)啟動(dòng)的時(shí)候啟動(dòng)或者關(guān)閉哪些服務(wù)。這里面的腳本大致分為以S 開頭的和以 K 開頭的腳本。 S 代表開機(jī)時(shí)啟動(dòng)的,K 表示開機(jī)時(shí)不啟動(dòng)。
排序的說明:服務(wù)的啟動(dòng)可能會(huì)產(chǎn)生依賴的情況。所以無法避免的會(huì)出現(xiàn)排序的情況。比如說:S20
和S198
來說會(huì)先執(zhí)行S199
后執(zhí)行S22
,是先S2
和S1
比較,之后在比較S20
和S19
以此類推。數(shù)字越小越先運(yùn)行;數(shù)字越小的服務(wù),通常為依賴到別的服務(wù);
-
chkconfig
命令:查看每個(gè)服務(wù)對(duì)應(yīng)級(jí)別的開關(guān),以及設(shè)置相關(guān)服務(wù)對(duì)應(yīng)級(jí)別上的開關(guān); - 增加服務(wù):
chkconfig --add srv_name
可以將自己寫的一些腳本,讓此命令統(tǒng)一管理。 - 刪除服務(wù):
chkconfig --del srv_name
將服務(wù)刪除,意思就是服務(wù)不由chkconfig這種機(jī)制來管理 -
chkconfig srv_name {on|off}
設(shè)置服務(wù)開機(jī)是否自啟動(dòng),默認(rèn)管理的級(jí)別是2345
. 指定默認(rèn)級(jí)別,可以與其他選項(xiàng)一起使用
注意:正常級(jí)別下,最后啟動(dòng)的一個(gè)務(wù):S99local
指向了/etc/rc.d/rc.local
腳本,且有又想開機(jī)時(shí)自動(dòng)運(yùn)行的命令,可直接放置于/etc/rc.d/rc.local
文件中;
【注意】:正常級(jí)別下,最后啟動(dòng)一個(gè)服S99local
沒有鏈接至/etc/rc.d/init.d
一個(gè)服務(wù)腳本,而是指向了/etc/rc.d/rc.local腳本
;因此,不便或不需寫為服務(wù)腳本放置于/etc/rc.d/init.d/
目錄,且又想開機(jī)時(shí)自動(dòng)運(yùn)行的命令,可直接放置于/etc/rc.d/rc.local
文件中。
(6) 手工配置系統(tǒng)啟動(dòng)配置
(1)系統(tǒng)服務(wù)腳本的特點(diǎn)
- 基本都可以提供start|stop|restart|status這幾個(gè)狀態(tài)值的接收
- 服務(wù)腳本存放位置,所有的系統(tǒng)服務(wù)腳本都放在
/etc/rc.d/init.d
文件夾中
系統(tǒng)服務(wù)腳本
(2)服務(wù)腳本的編寫格式
其中,有三行格式是必須要寫上的
#!/bin/bash,#/chkconfig,#description
# chkconfig: runlevels SS KK
【SS:表示開始運(yùn)行的次序,KK:表示關(guān)閉程序的次序,-表示都不啟動(dòng)】 因此可以手動(dòng)編寫系統(tǒng)服務(wù):
- (1)把服務(wù)腳本放置/etc/init.d目錄下
- (2)使用chkconfig –add 添加到系統(tǒng)服務(wù)
- (3)重啟系統(tǒng)讓服務(wù)生效