grub啟動流程和配置
grub stage 1
MBR中前 446個字節,如果把這裏面的內容損壞,那麽系統會認為當前磁盤沒有啟動引導功能,會嘗試從光盤或者網絡啟動系統
grub stage 1.5
存放識別/boot分區的文件系統的驅動,一般占用的空間是在MBR扇區後面的27個扇區
如果數據被損壞,啟動系統的時候還是會從磁盤引導,但是不會出現啟動菜單.會一直出現黑屏等待狀態
grub stage 2
只要看到內核的啟動菜單,表示已經成功的進入了grub的stage 2階段,因為啟動菜單是在2 stage生成的.
讀取grub.conf文件
系統啟動到執行啟動第一個進程
1.通過grub stage1 中的MBR 找到 grub stage 1.5
2.通過讀取存儲在stage 1.5中的/boot分區的驅動文件使grub能夠以文件的方式讀取/boot分區下面的文件
3.通過stage2中讀取/boot/grub.conf加載linux內核文件到內存,然後再加載虛擬文件系統initramfs使內核能夠以文件系統的方式識別操作系統的根分區
4.grub程序在加載完成內核後,會把程序執行權限移交給內核
5.當內核識別操作系統的根分區後,啟動系統的第一個進程,執行系統初始化腳本
grub命令
1.grub-install /dev/sda 修復grub1 1.5 2 所有階段的數據 修復的時候不依賴於任何外部配置文件
2.grub中對應的/根分區不是操作系統的根分區,它代表的是/boot分區
3.(hd0,0) 表示第一塊磁盤的第一個分區 即代表sda1
4.(hd0) 表示第一塊磁盤 即表示sda
5.grub是一個交互式命令 (1) grub > (2) root(hd0,0) > (3) setup(hd0)
6.grub這個命令依賴於/boot/grub目錄下的一些配置文件,如果這些文件被刪除或者移動,那麽使用grub命令無法正常修復
7.如果沒有使用grub修復過系統,那麽/boot/grub/目錄下的文件只有兩個文件影響系統啟動(grub.conf 和 splash.xpm.gz)
如果使用過grub修復過系統,那麽 /boot/grub 目錄下的其它配置文件同樣會影響到系統啟動.
系統啟動腳本流程(系統啟動第一個進程後/sbin/init)
/etc/rc.d/rc.sysinit: 系統初始化腳本(系統啟動後運行的第一個腳本)
1.設置主機名
2.設置歡迎信息
3.激活udev和selinux
4.掛在/etc/fstab文件中定義的文件系統
5.檢測根文件系統,並以讀寫方式重新掛載根文件系統
6.激活swap設備
7.根據/etc/sysctl.conf文件設置內核參數
8.激活lvm以及software raid設備
9.加載額外設備的驅動程序
運行設定級別腳本
根據設定的啟動級別,執行 /etc/rc.d/rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d 中的其中一個目錄下的腳本
按照文件名中包含的數字從小到大依次執行各個服務腳本
1.先執行k開頭的叫不能文件 停止相關服務
2.再執行s開頭的腳本文件 啟動相關服務
系統啟動最後執行的啟動腳本是 /etc/rc.local 這個腳本是等所有的服務腳本執行完後才會執行的
可以把一些簡單的命令寫到這個文件作為開機啟動命令
讀取/etc/inittab(讀取系統啟動級別) 》 /etc/rc.d/rc.sysinit 》 /etc/rc.d/rc[0-6].d目錄下的所有腳本 》 /etc/rc.local 腳本
1 [root@yxh6 rc.d]# ls 2 init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit 3 [root@yxh6 rc.d]# cd rc3.d 4 [root@yxh6 rc3.d]# ls 5 K01smartd K69rpcsvcgssd K95firstboot S15mdmonitor S28autofs 6 K02oddjobd K73winbind K99rngd S22messagebus S50bluetooth 7 K05wdaemon K74ntpd S01sysstat S23NetworkManager S55sshd 8 K10psacct K75ntpdate S02lvm2-monitor S24nfslock S80postfix 9 K10saslauthd K75quota_nld S05rdma S24openct S82abrtd 10 K15htcacheclean K76ypbind S08ip6tables S24rpcgssd S83abrt-ccpp 11 K15httpd K84wpa_supplicant S10network S25blk-availability S90crond 12 K30spice-vdagentd K87restorecond S11auditd S25cups S95atd 13 K36mysqld K88sssd S11portreserve S25netfs S99certmonger 14 K50dnsmasq K89netconsole S12rsyslog S26acpid S99local 15 K50kdump K89rdisc S13cpuspeed S26haldaemon 16 K60nfs K92iptables S13irqbalance S26udev-post 17 K61nfs-rdma K92pppoe-server S13rpcbind S27pcscdView Code
設置系統服務開機啟動或停止
1. chkconfig --list atd 查看atd服務開機設置狀態
2. chkconfig --level 235 atd off 設置atd服務在2,3,5啟動級別中為不啟動狀態
3. chkconfig --level 235 atd on 設置atd服務在2,3,5啟動級別中為啟動狀態
4. 不指定模式的時候,默認指定的是2,3,4,5模式
自定義服務啟動腳本
1.必須首先在/etc/init.d目錄下創建一個服務腳本,格式如下:
1 #!/bin/bash 2 #chkconfig: 35 96 03 3 #description: test my service 4 source /etc/init.d/functions 5 case $1 in 6 start) 7 action "testservice is start" 8 touch /var/lock/subsys/testservice 9 ;; 10 stop) 11 rm -fr /var/lock/subsys/testservice 12 action "testservice is stop" 13 ;; 14 status) 15 [ -f /var/lock/subsys/testservice ] && echo testservice is starting || echo testservice is stoped 16 ;; 17 *) 18 echo "usage start stop status" 19 ;; 20 esacView Code
2.給服務腳本添加執行權限 chmod +x testservice.sh
3.把服務腳本變成後臺服務 chkconfig --add testservice
4.系統啟動時候這些顯示都是執行都是 /etc/init.d目錄下的後臺腳本
5.如果某個後臺服務在啟動時出現異常,把系統重啟進入1模式, 然後執行 chkconfig service off. 最後正常重啟後 修改服務腳本
xinetd管理的服務(非獨立服務)
使用頻率不高,如果設置為開機啟動會浪費資源。如果設置為開機不啟動,當有用戶訪問的時候再去啟動就已經來不及了.
xinetd管理的服務在開機的時候不用啟動,由xinetd服務負責監聽用戶的請求.只有當用戶訪問這些服務的時候再由xinetd服務
激活相應的進程,處理完用戶的請求後被xinetd激活的服務又會自動關閉.
centos7的Systemd服務
centos7上由systemd代替了xinetd服務,啟動系統的時候只啟動systemd服務。其它的服務都無需啟動,只有被訪問的時候才會由systemd激活,這就是
centos7系統啟動比較快速的原因 這就是按需啟動服務的方式
grub啟動流程和配置