目錄
1 linux啓動過程linux啓動流程:
2 GRUB使用
3 內核初始化
一、BIOS初始化和自檢
POST(加電--加載ROM芯片中的BIOS啓動代碼--BIOS執行自檢程序(初始化硬件並檢測硬件是否工作正常)
BIOS:存在於ROM中,保存基本的輸入輸出程序,系統該信息設置,自檢程序,系統啓動自舉程序
CMOS:存在於RAM中,保存實時時鐘和 硬件配置信息和參數的設定按DEL可進入BIOS設置,CMOS保存這些設置
二、裝載引導程序MBR(BIOS會讀取CMOS的信息獲得硬件配置和啓動順序)
BIOS會根據啓動順序 讀取某硬件(HD CD-ROM USB等)的MBR啓動引導程序(512b)並把控制權交給boot loader也就是交給了GRUB
MBR分3部分(如硬盤HD 的0磁盤0分區1扇區 512b)
主引導程序 boot loader 446b(GRUB程序安裝在bootloader)
分區表partition tables 64b
校驗位magic muber 55AA 2b
boot loader分類:GRUB是bootloader一種
LILO ARM用
GRUB PC和服務器用
三、GRUB啓動引導階段
找到BMR的boot loader也就找到了GRUB
GRUB引導過程:
加載stage1,stage1通常位於MBR中,用於裝載stage2
加載stage1.5,用於識別文件系統
加載stage2,grub的核心程序
注意:stage1.5和stage2文件位於/boot/grub目錄下
使用/boot/grub/grub.conf配置文件來加載linux內核
四、內核引導(加載內核)
1 自動識別文件系統
2 加載linux內核vmlinuz到內存
內核取得控制權,放到/boot (vmlinuz是一個gzip壓縮文件,加載時需要使用gzip解壓)
3 加載initrd*.img鏡像到內存(通常是加載USB,LVM,RAID,SCSI等設備模塊和磁盤接口的驅動程序)
臨時構建只讀的/文件系統,在這個文件系統各種執行臨時的init進程
臨時init進程作用:
把硬件驅動運行起來,磁盤、聲卡、網卡等關鍵驅動的加載
4 有了驅動,內核再去掛載真正的跟文件系統,內核吧控制權交給 /sbin/init進程
五、系統初始化和引導login
1 系統初始化:
運行/sbin/init程序進行初始化(使用配置文件/etc/inittab和/etc/init目錄下的文件),/etc/inittab設置系統的默認級別
*運行/etc/rc.sysinit
@獲取網絡環境
@初始化硬件
@設置主機名
@設備映射器及相關初始化
@初始化LVM
@文件系統檢測
@啓用磁盤配額和更新配額
@掛載設備(根據/etc/fstab配置文件進行掛載)
@清除開機過程中所產生垃圾文件
@啓用交換分區
@將信息寫入/var/log/dmesg文件
*運行/etc/rc.local
*按照設定的級別啓動相關的服務,使用/etc/rc.d/rc*.d目錄下的程序啓動服務;*表示0-6的7個級別。
/etc/rc.d/rc*.d目錄下的文件由啓動狀態(S 表示啓動,K 表示不啓動)、啓動順序、和啓動服務程序三部分組成。
2 引導用戶登錄login
*運行/sbin/mingetty登錄程序
用戶登錄(輸入用戶名和密碼)-->使用/etc/passwd和/etc/shadow檢測正確性-->運行/etc/profile、~/.bash_profile、
~/.bashrc、/etc/bashrc
進入用戶桌面,運行相應的桌面程序(gdm gnome桌面,kde kde桌面,xdm 啓動X Windows)
練習:(1)在系統開機時自動設置別名rm='rm -fr',並檢驗是否生效
vim ~/.bashrc
(2)如果忘記密碼怎麼辦?要求進入單用戶模式將root用戶密碼刪除
(3)將系統的默認級別設置爲3
vim /etc/inittab
(4)將/boot所在的分區掛載從/etc/fstab文件裏面刪除,然後重啓機器進行恢復。
GRUB的使用:
/boot/grub/grub.conf配置文件
-------------------------------
default=0 #設定默認啓動的title的編號,從0開始
timeout=5 #等待時間 秒
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz #背景圖片
hiddenmenu #隱藏菜單
#passwordlitao_59 #grub的密碼
#password--md5 密文 #grub的密碼
titleCentOS (2.6.32-279.el6.x86_64) #內核標題 或操作系統的名稱。可改。
root (hd0,0) #內核文件所在的設備 (hd磁盤,分區)
kernel /vmlinuz-2.6.32-279.el6.x86_64 roroot=UUID=46eb83e8-17fc-4de6-9d39-50a47216881a rd_NO_LUKS KEYBOARDTYPE=pcKEYTABLE=us rd_NO_MD crashkernel=auto.UTF-8 rd_NO_LVM rd_NO_DM rhgbquiet #內核路徑和參數
initrd /initramfs-2.6.32-279.el6.x86_64.img #initrd路徑(小根)
-------------------------------
------------------------------------------------------------------
啓動流程2 GRUB界面init
------------------------------------------------------------------
如何生成MD5密文:
grub-md5-crypt
查看運行級別命令:
1:runlevel
2:who -r
查看內核版本號:
uname -r
1安裝修復GRUB:
#grub
grub> root (hd0,0) 指定ROOT(磁盤,分區)
grub> setup (hd0) 安裝grub(磁盤)
2安裝修復GRUB:
#grub-install --root-directory=/ boot的父目錄 /dev/sda1
3grub損壞時啓動內核:
grub> find (hd0,0) 查找內核所在分區
grub> root (hd0,0)
grub> kernel /路徑
grub> initrd /路徑
grub> boot 啓動
Kernel初始化過程:
1 設備探測
2 驅動初始化(可能從initrd(initramfs)文件裝在驅動模塊)
3 以只讀方式掛載根
4 裝在第一個進程init (PID:1)
/sbin/init:(/etc/inittab)
5.5 init 傳統 串行
6.3 upstart:ububtu開發 並行啓動
7.0 systemd: 並行啓動
標識符:運行級別:什麼情況下執行此行:要運行的程序
什麼情況下:
initdefault 默認
sysinit 初始化
wait 等待級別切換到此級別是執行
respawn 程序終止時重新執行
/etc/rc.d/rc.sysinit
初始化流程 配置文件
/etc/rc.d/rc3
啓動系統服務配置文件
------------------------------------------------------------------
啓動流程腳本SysV服務腳本
------------------------------------------------------------------
SysV: /etc/rc.d/init.d
start | stop | restart | status
chkconfig: 運行級別 ss kk
當chkconfig來爲此腳本在rc#.d目錄穿件鏈接時,運行級別表示默認
創建爲S*開頭的鏈接,除此之外的級別默認創建爲K*開頭的鏈接。
chkconfig命令:
查看獨立進程: chkconfig --list 進程名
加入進程 chkconfig --add 進程名
刪除進程 chkconfig --del 進程名
設定服務開機啓動或關閉:
chkconfig {--level 指定級別} 服務名稱 (ON|OFF)
默認2345
/etc/rc.d/tc.local
系統最後一個服務,可用於用戶自定義開機啓動的程序
/etc/inittab的任務
1設定默認級別
2運行系統初始化腳本
3運行指定運行級別對應的目錄下的腳本
4設置重啓組合鍵
5定義UPS電源
6啓動虛擬終端(2345)
7啓動圖形界面)(5)
守護進程:
獨立進程(httpd vsftp) 需要關聯到運行級別
超級守護進程 xinetd (NFS) 不需要關聯到運行級別
啓動NFS:先啓動xinetd 然後啓動NFS
關閉NFS:先關閉NFS 然後關閉xinetd
開機啓動NFS : chkconfig 進程名 (ON |OFF)