1. 程式人生 > >linux rhel 7系統啟動過程

linux rhel 7系統啟動過程

rhel 7的系統啟動過程有別與之前的版本,不僅體現在systemd取代了upstart,而且linux一切皆檔案也可以說轉變成了一切皆單元,怪不得李那斯如此暴怒,那究竟systemd和upstart有何不同呢 一 ,systemd 1.systemd將執行級別分成了不同的啟動單元組 systemctl list-units -t target 檢視所有的啟動單元 在這裡插入圖片描述 2.ls -l /usr/lib/sysytemd/system/runlevel?.target 在這裡插入圖片描述 可以看到rulevel已經被連線至相應的啟動單元組,二每個啟動單元組又各自有什麼意義呢? systemctl list-dependencies graphical.target 在這裡插入圖片描述

可以看到在graphical.target所會啟動的單元組 3.systemctl get-default 在這裡插入圖片描述 然後ll /etc/systemd/system/default.target 在這裡插入圖片描述 有一個連線指向了multi-user.target 4.systemctl enable postfix.service 將postfix設為開機啟動disable關閉開機啟動,然後我們去看看/etc/systemd/system/multi-user.target.wants/因為目前我們所處的執行單元組是multi-user.target 在這裡插入圖片描述 會有一個檔案postfix.service有個連線指向了usr目錄下的postfix.service單元,當disable之後可以看看此檔案還在不在,如果手動刪除這個檔案呢,會不會也不能自動啟動呢,當然也是能達到目的的,不過不推薦這樣做,如果手動將default.target檔案連線到一個啟動單元組上也是可以更改預設啟動單元組的 像這樣就可以 ln -s default.target /usr/lib/systemd/system/graphical.target 5.systemctl mask postfix.service 這樣postfix服務將無論如何也將啟動不了因為 在這裡插入圖片描述
postfix.service檔案被指向了/dev/null 現在是不是對systemd管理服務的方式又那麼點清楚了,而且systemd可以根據需要啟動服務,比如只有當文件壓到列印佇列時,systemd才會去啟動列印的服務,所以systemd的啟動速度是很快的. 6.以上是systemd啟動服務,systemd在管理服務時比如結束掉一個程序時為了能結束掉此服務啟動的其他程序,使用cgroup來劃分組將服務和服務會啟動的其他程序加到同一個cgroup中一起管理:systemd-cgls 命令檢視所有cgroups 在這裡插入圖片描述 加上-k選項還可以顯示核心相關的內容 二,在瞭解了sytemd之後,可以開始系統啟動的過程了 1.加電自檢,首先執行ROM中的BIOS/UEFI,(UEFI是新的自檢程式在各方面都可以做的比BIOS好),接著BIOS做一些列檢查,如果聽到嘀嘀嘀的聲音可能是有問題了,當BIOS探測到顯示卡設別後將會在螢幕上列印這些問題 2.BIOS根據設定去相應的硬碟MBR分割槽尋找bootloader程式,這裡rhel 7用的是grub2,grub2分為兩部分第一部分在MBR上,作用是找到並執行第二部分 3.grub2執行後根據設定載入核心檔案和initramfs檔案(一個輔助核心去進一步操作的虛擬檔案系統) 4.grub2將控制權交給核心,核心啟動第一個程式,那就是systemd,接下來就是我們在上面敘述的過程了 三,grub2 1.grub2的功能先當強悍,他的配置檔案是/boot/grub2/grub.cgf,很複雜不推薦去修改,我們可以通過grub2-mkconfig -o /boot/grub2/grub.cfg來生成,命令會根據/etc/default/grub和/etc/grub.d/下的指令碼來生成配置 cat /etc/default/grub 在這裡插入圖片描述
(1)GRUB_DEFAULT=saved 設定預設啟動的核心,saved的值從0開始,0指第一個,1指第二個核心,依此類推:grub2-set-default命令可設定該引數 (2)然後是倒數第二行rd,lvm.lv=rhel/root ;rd.lvm.lv=rhel/swap 分別指明根和交換分割槽;rhel quiet 指預設啟動graphical.target且靜默模式不輸出任何內容,可以改寫成system.unit=multi-user.target或其他;在啟動介面按e進入編輯介面在linux 16的末尾段可以看到這些內容,也可以在那裡改動,按CTRL + x 啟動 其他引數保持預設即可 4.grub2的命令列引數,在此介面按C進入 在這裡插入圖片描述 在這裡插入圖片描述 手動啟動系統的程式碼,有興趣的可以試試 1.insmod lvm 載入lvm卷 2.search.file /grub2/grub.cfg 找到/boot所在分割槽,給第5步用 3.search.file /etc/fstab 找到根給第4步用 4.set root=(lvm/rhel-root) 設定grub2的根路徑 5.linux (hd0,msdos1)/vmlinuz-
********.x86_64 root=/dev/mapper/rhel-root 指明核心檔案TAB可補全,root系統的根設定,注意和第4步不同,rhel-root是lvm卷名,同意在/dev/mapper/下放 6.initrd (hd0,msods1)/initramfs-*********.img 指明initramfs檔案,可TAB補全 7.boot 啟動系統