CentOS6啟動流程呢個以及刪除boot分區相關實驗
centos6啟動流程
-
主動讀取BIOS,通過CMOS加載硬件信息 ,並進行POST,指定第一個可啟動的設備
ROM:BIOS,Basic Input and Output System,保存著計算機系統最重要的基本輸入輸出程序,系統信息設置,開機加電自檢程序
RAM:保存各項參數的設定 -
讀取第一個可啟動設備MBR的引導加載程序(grub)的啟動信息
- MBR: 446 boot loader 64:分區表 2 :55aa
- BIOS通過硬件的INT13中斷功能來讀取MBR的
-
Windows:ntloader 僅是啟動OS
Linux: 提供菜單; 轉交系統控制權; 直接指向內核文件- LILO:LInuxLOader
-
GRUB: GRandUnified Bootloader
- primary boot loader:1st stage,1.5stage
-
secondary boot loader:2 stage,分區文件
bootloader的1stage是在MBR內進行的,1.5stage是再0面0磁道0扇區的後續扇區,2stage是在/boot分區上邊
1stage是 尋找/boot分區的文件系統驅動
1.5stage內就是/boot分區文件系統驅動,識別/boot分區
2stage是/boot分區相關操作
/boot/grub下的stage類文件(除了stage2)都是備份
-
ramdisk:使用緩存或緩沖來加速對磁盤上文件的訪問
- centos5:initrd 工具程序:mkinitrd
centos6:initramfs 工具程序:mkinitrd,dracut自己創建initramfs文件
mkinitrd [-v] [-with=模塊名稱] initrd文件名 內核版本-v 顯示mkinitrd的過程 --with=[模塊名稱]:模塊名稱指的是模塊的名字,不需填寫文件名 如果在救援模式下,需要切根,因為救援模式下好多庫文件不存在
- centos5:initrd 工具程序:mkinitrd
-
解壓縮內核到內存中,
加載可識別的所有硬件設備(以自己的功能重新檢查一次硬件,不一定適用BIOS的檢測結果)
加載硬件驅動
以只讀方式掛載根系統
運行用戶空間的第一個程序:/sbin/init -
內核內容
- MBR: 446 boot loader 64:分區表 2 :55aa
-
內核執行init程序,獲取默認運行信息
- init程序類型:
- SysV: init, CentOS 5之前
配置文件:/etc/inittab - Upstart: init,CentOS6
配置文件:/etc/inittab, /etc/init/*.conf - Systemd:systemd, CentOS 7
配置文件:/usr/lib/systemd/system;/etc/systemd/system
- SysV: init, CentOS 5之前
- 運行級別,為系統運行或者維護等目的而設定;0-6,7個級別
0 系統直接關機
1 單用戶模式下,用在系統出問題時的維護
2 類似下面的runlevel 3,但無NFS服務
3 純文本模式;多用戶模式
4 系統保留功能;與上面的runlevel 3基本沒有差異
5 圖形界面
6 重新啟動
切換等級:init #
查看等級: runlevel who -r -
/etc/inittab文件相關知識
- 每一行定義一種action以及與之對應的process
-
id : runlevel : action : process
id:代表init的主要工作選項,只是簡單代表說明
runlevel:在那些等級下運行
action: initdefault:代表默認的runlevel設置值
sysinit:代表系統初始化的操作選項
ctrlaltdel:代表ctrl+alt+del三個按鍵是否可以重新啟動
wait:代表後面設置的命令項目必須要執行完畢才能繼續下面的其他操作
respawn:代表後邊字段的命令可以無限制的重新啟動
process:可以進行的命令ca::ctrlaltdel:/sbin/shutdown -t3 -r now id:3:initdefault: si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc0 l1:1:wait:/etc/rc.d/rc1 1:2345:respawn:/sbin/mingetty tty x:5:resawn:/etc/prefdm -nodaemon x window 則是這行決定的
-
/etc/init/*.conf
- init程序類型:
-
init程序執行/etc/rc.d/rc.sysinit文件
取得網絡環境與主機類型:/etc/sysconfig/network
設置顯示與啟動過程中的歡迎界面(textbanner)
檢查根文件系統,並以讀寫方式重新掛載根文件系統
掛載/etc/fstab文件中定義的文件系統
設置系統時間:讀入/etc/sysconfig/clock設置值 修改時區的話,把/user/share/zoneinfo/Asia Shanghai復制到/etc/local下
激活udev和selinux
激活swap設備
初始化軟件磁盤陣列、初始化lvm文件系統、、磁盤配額
加載內核相關設置:/etc/sysctl.conf
用戶自定義模塊加載:/etc/sysconfig/modules.conf設置
清除啟動過程中產生的臨時文件
將啟動相關信息加載到/var/log/dmesg中 -
啟動核心的外掛模塊/etc/modeprobe.conf文件
-
init執行各個批處理文件
-
各個運行級別腳本所在目錄:
/etc/rc.d/rc 0.d
/etc/rc.d/rc 1.d
/etc/rc.d/rc 2.d
/etc/rc.d/rc 3.d
/etc/rc.d/rc 4.d
/etc/rc.d/rc 5.d
/etc/rc.d/rc 6.d -
腳本文件運行規則:
進入到某個運行級別的腳本目錄/etc/rc.d/rcN.dk: k##: ##運行次序;數字越小,越先運行;數字越小的服務,通常為依賴到別的服務
s: S##:##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務
s開頭的文件,運行
k開頭的文件,關閉 - chkconfig命令詳解
-
查看服務所在級別的啟動或關閉情形
chkconfig [--list] name
添加服務給chkconfig管理 -
SysV的的服務腳本放置於/etc/init.d
chkconfig --add name -
服務腳本格式信息
\# chkconfig: 345 95 5 #345表示在3,4,5模式下為開啟,95為S95,5為K5 \# description: #描述,在CentOS5必須加上,在CentOS6以及之後的版本可不加
-
刪除
chkconfig --del name -
修改制定的鏈接類型
chkconfig [--level levels] name <off|on|reset>
--level LLLL:省略是表示2345
-
- 圖形化界面ntsysv命令
-
-
init執行/etc/rc.d/rc.local
正常情況下,最後啟動一個服務S99local沒有鏈接至/etc/init.d下的腳本,而是指向了/etc/rc.d/rc.local腳本
不便或不需寫為服務腳本放置於/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置於/etc/rc.d/rc.local文件中 -
執行/bin/login程序,等待用戶登錄
1:2345:respawn:/usr/sbin/mingettytty1 2:2345:respawn:/usr/sbin/mingettytty2 ... 6:2345:respawn:/usr/sbin/mingettytty6 mingetty會自動調用login程序 x:5:respawn:/etc/X11/prefdm -nodaemon
-
登錄後以shell控制主機
BIOS加載硬件信息--》post加電自檢--》加載MBR裏grub信息--》stage1.5--》stage2--》initramfs--》 rootfs-->init-->/etc/inittab-->設置默認運行級別-->初始化/etc/rc.d/rc.sysinit-->/etc/rc.d/rc#.d-->/etc/rc.local
-
補充:
xinetd管理的服務
- Linux中,可以將一些不常用的服務先關閉,當有人訪問服務的時候激活這些服務,而沒有人訪問的時候就關閉,這個服務就是 xinetd 服務,也叫做超級守護進程,它是一個獨立服務,必須啟動。而依賴 xinetd 服務的服務,叫做非獨立服務。註意:非獨立服務和運行模式沒有關系。而非獨立服務下,也就是xinetd服務所管理的服務,如果顯示為off狀態,那麽xinetd服務無法將其喚醒。而當其顯示為on狀態,這個服務將能被xinetd服務喚醒:
chkconfig --list #查看xinetd服務 chkconfig 服務名稱 on #啟動這個服務(這一步相當於修改了它的配置文件,還需要激活才能生效 ) service xinetd start #激活xinetd服務
- /etc/xinetd.d/是xinetd的配置文件,它下面存放了依賴於xinetd服務的配置文件,而chkconfig --list所查看到的xinetd中的所有服務都是從這個目錄中的配置文件讀出的:
拿telnet服務來所: vim /etc/xinetd.d/telnet disable = no #表示不禁用,等於yes表示禁用
- 註意,在CentOS5,6中是區分獨立服務和非獨立服務的,而在CentOS7中全部都是非獨立服務
- service命令:手動管理服務
service 服務 start|stop|restart service --status-all
- 瞬態(Transient)服務被xinetd進程所管理
進入的請求首先被xinetd代理
配置文件:/etc/xinetd.conf、/etc/xinetd.d/
與libwrap.so文件鏈接
用chkconfig控制服務chkconfig tftp on
- Linux中,可以將一些不常用的服務先關閉,當有人訪問服務的時候激活這些服務,而沒有人訪問的時候就關閉,這個服務就是 xinetd 服務,也叫做超級守護進程,它是一個獨立服務,必須啟動。而依賴 xinetd 服務的服務,叫做非獨立服務。註意:非獨立服務和運行模式沒有關系。而非獨立服務下,也就是xinetd服務所管理的服務,如果顯示為off狀態,那麽xinetd服務無法將其喚醒。而當其顯示為on狀態,這個服務將能被xinetd服務喚醒:
實驗
- 刪除掛載在邏輯卷的根下的/etc/fstab配置文件以及/boot/目錄下的文件
- 新手上路,使用mv替代rm,cp備份
mv /etc/fstab /root/fstab #fstab文件移動到root家目錄下的fstab中 mkdir /root/boot && mv /boot/* /root/boot #將boot下的所有文件移動到家目錄下的boot中(boot需要創建) sync*3 #同步數據到磁盤 reboot #重啟 進入救援模式 df #查看掛載,發現並沒有被掛載! [](http://i.imgur.com/RMtLBfO.png) ls /dev/mapper && #mapper是所有LVM存放的地方,我們可以查看有沒有邏輯卷存在 lvdisplay #使用lvdisplay命令查看LVM狀態,發現都是不可用狀態,並且很用容易看出根目錄在哪個邏輯卷中 vgchage -ay #激活vg,也就是激活邏輯卷 lvdisplay #再次確認LVM狀態 ls /dev/mapper #查看LVM設備 mount /dev/mapper/VolGroup-lv_root /mnt/sysimage #根據查看到的信息將根掛載到/mnt/sysimage(sysimage可以是其他掛載點)下 cd /mnt/sysimage #切換到操作系統根目錄下 ls #查看是否是操作系統根目錄 vi etc/fstab #在當前目錄下的etc下創建fstab文件,註意是當前目錄而不是/ :r! ls /dev/mapper #在末行模式下使用r!讀取出LVM的名字 /dev/sda1 /boot ext4 defaults 0 0 /dev/mapper/VolGroup-lv_root / ext4 defaults 0 0 /dev/mapper/VolGroup-lv_swap swap swap defaults 0 0 #註意,所有的LVM信息都需要寫入 wq #保存退出 sync*3 #同步磁盤,sync輸入三次 exit #退出bash,進入菜單reboot重啟,必須退出重啟 進入救援模式 chroot /mnt/sysimage/ #切根 mount /dev/cdrom /mnt #掛載光盤到/mnt rpm -ivh /mnt/Packages/kernel-2.6.32-642.e16.x886_64.rpm --force #安裝kernel包 ls /boot #查看boot下文件是否恢復 grub-install /dev/sda #修復grub 退出並重啟 在grub後輸入 kernel /vmlinuz-2(tab補全) root=/dev/mapper/VoGroup-lv_root selinux=0 initrd /init(tab補全) boot #啟動 #註意,修復grub.conf文件時臨時有效,如果想永久修復需要重新編輯/boot/grub/grub.conf default=0 timeout=5 title CentOS68 kernel (hd0,0)/vmlinuz-.... ro root=/dev/vg0/root initrd /initramfs-...img
CentOS6啟動流程呢個以及刪除boot分區相關實驗