centos啟動流程
簡單流程簡介:
POST –> Boot Sequence(BIOS) –> Boot Loader (MBR) –> Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init –>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別 –> 系統初始化腳本 –> 關閉或啟動對應級別下的服務 –> 啟動終端
流程詳解:分為五大階段
第一階段:硬件引導啟動
通過ROM中的BIOS的自檢程序一次查找到第一個有引導程序的設備就是本次要用到的設備
第二階段:GRUB啟動引導階段
對其設備中的MBR中的bootloder(引導加載程序)加載GRUB的Stage 1,由于stage 1 階段是要加載stage2階段來識別gurb.conf文件,來對用戶提供一個選擇內核的菜單,但是現在stage 1 還并不能識別stage 2 的文件系統,因此要通過stage 1.5先加載文件系統驅動,讓stage 1能識別stage 2 的文件系統,此時stage 1 才能訪問到stage 2 。
GRUB.conf文件為用戶體統一個菜單,讓用戶選擇要啟動的內核后裝載到RAM的特定空間中,對內核文件進行解壓,展開,之后就由Kernel來進行操作
第三階段:內核引導階段
內核文件在內存中解壓展開完成之后,內核先對自身進行初始化:
1、探測可識別到的所有硬件設備
2、加載硬件驅動程序
此時可能內核中并不能識別到根文件系統的驅動,就要由ramdisk來當橋梁,通過加載ramdisk來加載根之后,真正的根也就被加載上了。
ramdisk:在操作系統安裝的時候生成的,他會掃描當前系統中磁盤分區的系統,在記錄在此虛擬根文件中,由于ramdisk文件在/boot下,因此可直接加載ramdisk,從而加載了根的文件系統
3、識別到根文件系統之后以只讀的方式掛載根文件系統
4、根掛載之后內核就可以運行第一個應用程序(/sbin/init),再由它來接手開機的流程.
第四階段:init程序
1、init程序接手后運行第一個腳本,/etc/inittab, 此文件定義當前系統級別。
# Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) //關機, # 1 - Single user mode//單用戶模式,維護用,只能root用戶,無需認證 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking)//會啟動網絡功能 # 3 - Full multiuser mode//字符界面模式, # 4 - unused//保留,可以同模式3一樣理解 # 5 - X11 //圖形界面 # 6 - reboot (Do NOT set initdefault to this)//重啟 id:3:initdefault: id:任務標識 3:任務運行級別 initdefault:系統默認運行級別
2、再一次運行/etc/init/*.conf所有腳本文件,
其中,/etc/init/rcS.conf文件用來運行系統初始化腳本文件/etc/rc.d/rc.sysinit
[root@Centos init]# vim /etc/init/rcS.conf # rcS - runlevel compatibility # This task runs the old sysv-rc startup scripts. // /etc/init/rcS.conf文件內任務描述就能知道
/etc/rc.d/rc.sysinit腳本文件中定義了一下系統功能: (1)設定主機名 (2)設定歡迎信息 (3)激活udev和selinux (4)掛載/etc/fstab文件中定義的所有掛載項 (5)檢測根文件系統,并以讀寫方式重新掛載根文件系統 (6)設定系統時鐘 (7)根據/etc/sysctl.conf文件來設置內核參數 (8)激活lvm及軟raid設備 (9)激活swap設備 (10)加載額外設備的驅動程序 (11)清理操作
再由/etc/init/rc.conf文件決定當前系統運行級別,在根據運行級別來運行相對應級別的腳本來管理需要關閉或啟動的服務
/etc/init/rc.conf文件中定義當前系統運行級別來運行對應級別服務腳本文件
[root@Centos rules.d]# cat /etc/init/rc.conf # rc - System V runlevel compatibility # This task runs the old sysv-rc runlevel scripts. It # is usually started by the telinit compatibility wrapper # Do not edit this file directly. If you want to change the behaviour, # please create a file rc.override and put your changes there. start on runlevel [0123456] stop on runlevel [!$RUNLEVEL] task export RUNLEVEL console output exec /etc/rc.d/rc $RUNLEVEL //此代碼運行相對應運行級別的服務腳本文件
此代碼運行的服務腳本于/etc/rc.d/rcN.d文件:
[root@Centos init]# cd /etc/rc.d/ init.d/ rc0.d/ rc2.d/ rc4.d/ rc6.d/ rc.sysinit rc rc1.d/ rc3.d/ rc5.d/ rc.local
第五階段:用戶登錄
Crond計劃任務
1、每周2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如“messages-yyyymmdd”
[root@Centos6 bin]# vim message.sh
#!/bin/bash
[ -e /logs ] && cp -a /etc /logs/messages-`date +%Y%M%d` || mkdir /logs && cp -a /etc /logs/messages-`date +%Y%M%d`
[root@Centos6 bin]# chmod -x message.sh
[root@Centos6 bin]# crontab -e
1 0 * * 2,4,7 /root/bin/message.sh
2、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中
[root@Centos6 bin]# crontab -e 0 */2 * * * egrep -o "^(S|M).*" /proc/meminfo >> /tmp/meminfo.txt
二、添加模擬服務腳本文件
1、定義服務腳本文件,
#!/bin/bash # #chkconfig: 35 30 50 //此注釋必須寫在服務腳本文件中 #description:testsrv script//描述信息(centos5必須有,centos6可寫) # file=`basename $0` files=/var/lock/subsys/$file start() { if [ -f $files ];then echo "$file is running" else touch $files echo "$file is running successful" fi } stop() { if [ -f $files ];then rm -f $files echo "$file stoped successful" else echo "$file don't starting" fi } restart() { if [ -f $files ];then rm -f $files sleep 1 echo "stop $file successful" touch $files sleep 1 echo "restart $file successful" else touch $files echo "start $files successful" fi } status() { if [ -f $files ];then echo "$file is running" else echo "$file is stopped!" fi } case $1 in start) start ;; stop) stop ;; restart) restart ;; status) status ;; exit) break ;; *) echo -e "\033[5;31mInput error!\033[0m" echo "Please Usage `basename $0` {start|stop|restart|status}" ;; esac
2、移動測試服務到chkconfig管理程序腳本目錄中
[root@Centos bin]# mv testsrv /etc/rc.d/init.d/ [root@Centos bin]# ls /etc/rc.d/init.d/ auditd halt killall netconsole postfix rsyslog sshd xinetd blk-availability ip6tables lvm2-lvmetad netfs rdisc sandbox svnserve crond iptables lvm2-monitor network rdma saslauthd testsrv functions kdump mdmonitor nfs-rdma restorecond single udev-post
3、使用chkconfig -add 命令將測試服務添加到開機啟動隊列中
[root@Centos init.d]# chkconfig --add testsrv [root@Centos init.d]# chkconfig testsrv on [root@Centos init.d]# chkconfig --list testsrv 0:off1:off2:off3:on4:off5:on6:off //觀察到只有我們在腳本文件中添加到的啟動模式才設定為on
4、可使用chkconifg–add、–del、–list,service SERVICE [start|stop|restart|status]進行對此服務管
原創文章,作者:Lii,如若轉載,請注明出處:http://www.www58058.com/45749