1. 程式人生 > >CentOS7啟動流程

CentOS7啟動流程

依賴 擔心 href 進程 down network 性能 har 運行

  同樣我也找了一張CentOS7的啟動流程圖。

技術分享圖片

第一步、硬件啟動階段

  這一步和CentOS6差不多,詳細請看CentOS6啟動流程(含詳細流程圖)

第二步、GRUB2引導階段

  從這一步開始,CentOS6和CentOS7的啟動流程區別開始展現出來了。CentOS7的主引導程序使用的是grub2。

  簡單說一下這一步的流程:顯示加載兩個鏡像,再加載MOD模塊文件,把grub2程序加載執行,接著解析配置文件/boot/grub/grub.cfg,根據配置文件加載內核鏡像到內存,之後構建虛擬根文件系統,最後轉到內核。

  在這裏grub.cfg配置文件已經比較復雜了,但並不用擔心,到了CentOS7中一般是使用命令進行配置,而不直接去修改配置文件了。

  一般修改好配置後都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,將配置文件重新生成。這裏就涉及到/etc/default/grub文件以及/etc/grub.d/目錄。

第三步、內核引導階段

  這一步與CentOS6也差不多,加載驅動,切換到真正的根文件系統,唯一不同的是執行的初始化程序變成了/usr/lib/systemd/systemd

第四步、systemed初始化階段(又叫系統初始化階段)

  CentOS7中我們的初始化進程變為了systemd。執行默認target配置文件/etc/systemd/system/default.target(這是一個軟鏈接,與默認運行級別有關)。然後執行sysinit.target來初始化系統和basic.target來準備操作系統。接著啟動multi-user.target下的本機與服務器服務,並檢查/etc/rc.d/rc.local文件是否有用戶自定義腳本需要啟動。最後執行multi-user下的getty.target及登錄服務,檢查default.target是否有其他的服務需要啟動。

  註意:/etc/systemd/system/default.target指向了/lib/systemd/system/目錄下的graphical.target或multiuser.target。而graphical.target依賴multiuser.target,multiuser.target依賴basic.target,basic.target依賴sysinit.target,所以倒過來執行。

  System概述(了解):systemd即為system daemon,是Linux下的一種init軟件,開發目標是提供更優秀的框架以表示系統服務間的以來關系,並依此實現系統初始化時服務的並行啟動,同時達到降低Shell系統開銷的效果,最終代替現在常用的System V與BSD風格的init程序。

  與多數發行版使用的System V風格的init相比,systemd采用了以下的新技術:A.采用Socket激活式與總線激活式服務,以提高相互依賴的各服務的並行運行性能;B.用Cgroup代替PID來追蹤進程,即使是兩次fork之後生成的守護進程也不會脫離systemd的控制。

  unit對象:unit表示不同類型的systemd對象,通過配置文件進行標識和配置;文件中主要包含了系統服務、監聽socket、保存的系統快照以及其他與init相關的信息。(也就是CentOS6中的服務器啟動腳本)

(1)./etc/systemd/system/default.target

  這是一個軟鏈接,和默認運行級別相關

[[email protected] system]# ll /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 36 12月  9 15:47 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target

  我們可以到這個目錄下看看

[[email protected] system]# cd /lib/systemd/system/
[[email protected] system]# ls *.target
anaconda.target            local-fs.target           runlevel2.target
basic.target               machines.target           runlevel3.target
bluetooth.target           multi-user.target         runlevel4.target
cryptsetup-pre.target      network-online.target     runlevel5.target
cryptsetup.target          network-pre.target        runlevel6.target
ctrl-alt-del.target        network.target            shutdown.target
default.target             nfs-client.target         sigpwr.target
emergency.target           nss-lookup.target         sleep.target
final.target               nss-user-lookup.target    slices.target
getty-pre.target           paths.target              smartcard.target
getty.target               poweroff.target           sockets.target
graphical.target           printer.target            sound.target
halt.target                rdma-hw.target            suspend.target
hibernate.target           reboot.target             swap.target
hybrid-sleep.target        remote-cryptsetup.target  sysinit.target
initrd-fs.target           remote-fs-pre.target      system-update.target
initrd-root-fs.target      remote-fs.target          timers.target
initrd-switch-root.target  rescue.target             time-sync.target
initrd.target              rpcbind.target            umount.target
iprutils.target            rpc_pipefs.target         virt-guest-shutdown.target
kexec.target               runlevel0.target
local-fs-pre.target        runlevel1.target

  這裏可以看到runlevel開頭的target文件,對應著CentOS6的啟動級別,不過一樣是軟鏈接,指向了同目錄下的其他文件,也算一種向下兼容吧

[[email protected] system]# ll runlevel*.target
lrwxrwxrwx. 1 root root 15 4月   5 22:10 runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 4月   5 22:10 runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 4月   5 22:10 runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 4月   5 22:10 runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 4月   5 22:10 runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 4月   5 22:10 runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 4月   5 22:10 runlevel6.target -> reboot.target

  可以看到我的default.target與runlevel5.target指向的是同一個文件,可以看出我的默認運行級別是5。

(2)./usr/lib/systemd/system/

  這個目錄存儲每個服務的腳本,類似CentOS6的/etc/init.d/。

(2)./run/systemd/system/

  系統執行過程中產生的腳本。

(3)./etc/systemd/system/

  類似於CentOS6的/etc/rc.d/rc#.d/SXX類文件的功能,管理員建立的執行腳本,大部分是軟鏈接。

CentOS7啟動流程