您好,登錄后才能下訂單哦!
linux系統(tǒng)啟動(dòng)首先從BIOS開(kāi)始檢測(cè)硬件信息=》開(kāi)始啟動(dòng)引導(dǎo)程序。讀取MBR(磁盤(pán)上第0磁道第一個(gè)扇區(qū))也就是Master Boot Record 即主引導(dǎo)記錄。MBR記錄了預(yù)啟動(dòng)信息和分區(qū)表信息。然后將grub(作用:設(shè)定內(nèi)核映象在磁盤(pán)分區(qū)的位置)信息復(fù)制到內(nèi)存中。為啟動(dòng)內(nèi)核做準(zhǔn)備。===》加載內(nèi)核。內(nèi)核初始化產(chǎn)生一個(gè)PID為1的init進(jìn)程。
***這里需要注意的安裝win+linux雙系統(tǒng)。先安裝w 然后linux。因?yàn)?win的引導(dǎo)程序會(huì)覆蓋其它系統(tǒng)的引導(dǎo)程序。造成linux 的grub缺失,無(wú)法啟動(dòng)***
由于內(nèi)核運(yùn)行起來(lái)是毫無(wú)用途的,需要一個(gè)系統(tǒng)能夠定義,管理和控制init進(jìn)程的行為,并負(fù)責(zé)組織和運(yùn)行完成初始化的工作,從而讓系統(tǒng)進(jìn)入一個(gè)用戶(hù)設(shè)定的運(yùn)行模式中,這個(gè)系統(tǒng)就是init系統(tǒng)。
init(為英語(yǔ):initialization的簡(jiǎn)寫(xiě))是 unix和 類(lèi)Unix 系統(tǒng)中用來(lái)產(chǎn)生其它所有進(jìn)程的程序。它以守護(hù)進(jìn)程的方式存在,其進(jìn)程號(hào)為1。Linux系統(tǒng)在開(kāi)機(jī)時(shí)加載Linux內(nèi)核后,便由Linux內(nèi)核加載init程序,由init程序完成余下的開(kāi)機(jī)過(guò)程。
init 的運(yùn)行方式歷經(jīng): sysvinit , upstart , systemd
早期的linux系統(tǒng)的init運(yùn)行方式兼容UNIX system V(Unix系統(tǒng)的一個(gè)版本)下init運(yùn)行方式。
System V 下init的運(yùn)行方式:
System V init 檢查 '/etc/inittab' 文件中是否含有 'initdefault' 項(xiàng)。 這告訴 init 系統(tǒng)是否有一個(gè)默認(rèn)的運(yùn)行。System V init 描述了 8中狀態(tài) 。0-6 和S 或s .linux 設(shè)置了6各級(jí)別:#cat /etc/inittab
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
unix system v 默認(rèn)是 3級(jí)別啟動(dòng)。 linux服務(wù)器大多版本默認(rèn)是3級(jí)別。而桌面版本一般為5.(圖形化界面)。如何查看 : $ runlevel 或 $ who -r.
Sysvinit 的優(yōu)點(diǎn)是概念簡(jiǎn)單。Service 開(kāi)發(fā)人員只需要編寫(xiě)啟動(dòng)和停止腳本,概念非常清楚;將 service 添加/刪除到某個(gè) runlevel 時(shí),只需要執(zhí)行一些創(chuàng)建/刪除軟連接文件的基本操作;這些都不需要學(xué)習(xí)額外的知識(shí)或特殊的定義語(yǔ)法(UpStart 和 Systemd 都需要用戶(hù)學(xué)習(xí)新的定義系統(tǒng)初始化行為的語(yǔ)言)。
其次,sysvinit 的另一個(gè)重要優(yōu)點(diǎn)是確定的執(zhí)行順序:腳本嚴(yán)格按照啟動(dòng)數(shù)字的大小順序執(zhí)行,一個(gè)執(zhí)行完畢再執(zhí)行下一個(gè),這非常有益于錯(cuò)誤排查。UpStart 和 systemd 支持并發(fā)啟動(dòng),導(dǎo)致沒(méi)有人可以確定地了解具體的啟動(dòng)順序,排錯(cuò)不易。
2006年的時(shí)候Ubuntu 打算把系統(tǒng)用在筆記本上。最大的困境是:sysvinit 對(duì)移動(dòng)設(shè)備(USB 設(shè)備的設(shè)備)的熱插拔支持不夠。于是開(kāi)發(fā)了upstart 基于事件機(jī)制.比如 U 盤(pán)插入 USB 接口后,udev 得到內(nèi)核通知,發(fā)現(xiàn)該設(shè)備,這就是一個(gè)新的事件。UpStart 在感知到該事件之后觸發(fā)相應(yīng)的等待任務(wù),比如處理/etc/fstab 中存在的掛載點(diǎn)。采用這種事件驅(qū)動(dòng)的模式,upstart 完美地解決了即插即用設(shè)備帶來(lái)的新問(wèn)題。UpStart采用了異步方式 可以:更快地啟動(dòng)系統(tǒng);當(dāng)新硬件被發(fā)現(xiàn)時(shí)動(dòng)態(tài)啟動(dòng)服務(wù);硬件被拔除時(shí)動(dòng)態(tài)停止服務(wù)。這些特點(diǎn)使得 UpStart 可以很好地應(yīng)用在桌面或者便攜式系統(tǒng)中,處理這些系統(tǒng)中的動(dòng)態(tài)硬件插拔特性。但是UPstart沒(méi)有完全擺脫 runlevel機(jī)制。只是在兼容的基礎(chǔ)上相應(yīng)的優(yōu)化了runlevel機(jī)制。
為了減少系統(tǒng)啟動(dòng)時(shí)間,systemd 的目標(biāo)是:盡可能啟動(dòng)更少的進(jìn)程,盡可能將更多進(jìn)程并行啟動(dòng),減少了啟動(dòng)進(jìn)程間的依賴(lài)。沒(méi)有必要的進(jìn)程可以在需要使用的時(shí)候才啟動(dòng)。此外systemd開(kāi)創(chuàng)了新的管理體系。以前運(yùn)行級(jí)別(runlevel)的概念被新的運(yùn)行目標(biāo)(target)所取代。target的命名體系類(lèi)似于“multi-user.target"和原來(lái)的運(yùn)行級(jí)別3(runlevel 3)相對(duì)應(yīng)。在centos7中由于使用了新systemd管理機(jī)制。不再使用runlevel的概念,所以/etc/inittab不在被系統(tǒng)使用。
centos7下systemd 管理體系理默認(rèn)的target通過(guò)軟鏈接來(lái)實(shí)現(xiàn)的。
(由于版面的問(wèn)題 把 inode值 屬主屬組和日期 刪除)
[root@jf7 ~]# ll /etc/systemd/system/default.target
lrwxrwxrwx. /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
如果想修改運(yùn)行目標(biāo)。只需要把這個(gè)軟鏈接刪除。軟鏈接到新的運(yùn)行目標(biāo)。
# rm -rf /etc/systemd/system/default.target
# ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
我們來(lái)查看下centos7下 /etc/inittab文件
$ cat /etc/inittab
# inittab is no longer used when using systemd.
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
# systemd uses 'targets' instead of runlevels. By default, there are two main target
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To view current default target, run:
# systemctl get-default
# To set a default target, run:
# systemctl set-default TARGET.target
很明確定義了新的target的位置:/usr/lib/systemd/system/ctrl-alt-del.target
同樣查看下: (由于版面的問(wèn)題 把 inode值 屬主屬組和日期 刪除)
# ll /usr/lib/systemd/system/runlevel*
lrwxrwxrwx /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx /usr/lib/systemd/system/runlevel6.target -> reboot.target
此外,systemd 管理體系還引入了 命令行工具systemctl。 systemctl 可以看作是service和chkconfig
得組合體。不過(guò)不用擔(dān)心。就的service命令在centos7下依舊可以使用,不過(guò),它會(huì)重定向所有命令到新的systemctl 工具。
幾個(gè)例子:
(sysvint)
#service network start |stop |status
#chkconfig httpd on
( systemclt)
# systemctl start|stop|status network.service
#systemctl enable httpd.service
目前: Ubuntu 15.04及后續(xù)版本在默認(rèn)的init上都安裝了 systemd.
介紹完主流init系統(tǒng)后,開(kāi)始繼續(xù)啟動(dòng)系統(tǒng)。(centos7之前 PID 為1的進(jìn)程是由 /sbin/init產(chǎn)生。而 centos7的PID為1的進(jìn)程由 /usr/lib/systemd/systemd 產(chǎn)生。)
BIOS - mbr -grub -加載內(nèi)核到內(nèi)存 - /etc/inittab- /etc/rc.d/rc.sysinit -啟動(dòng)內(nèi)核模塊/etc/modules.conf-啟動(dòng)指定級(jí)別下的腳本rcx.d-執(zhí)行/etc/rc.d/rc.local -/bin/login
雖然前面說(shuō)了新的init系統(tǒng)的諸多好處:不過(guò)現(xiàn)在畢竟centos7的企業(yè)用戶(hù)群體總體上不多。我們還是需要熟練掌握centos7一下的版本的啟動(dòng)。方便以后的管理。而且centos7 在命令層面上完全向下兼容。
梳理了,開(kāi)機(jī)啟動(dòng)流程??梢詠?lái)些小的應(yīng)用。
比如:在/etc/rc.d/rc.local 里面掛載移動(dòng)設(shè)備,添加個(gè)性化服務(wù)啟動(dòng)。如果,改階段那個(gè)服務(wù)啟動(dòng)不了,導(dǎo)致。啟動(dòng)阻塞。是否可以先進(jìn)入單用戶(hù)模式,在/etc/rc.d/rc.local 文件下注釋掉服務(wù)。待開(kāi)機(jī)后在測(cè)試,修復(fù)呢?
最主要的是。熟悉了開(kāi)機(jī)啟動(dòng)后。可以根據(jù)開(kāi)機(jī)的錯(cuò)誤信息。排查是那個(gè)階段出現(xiàn)的錯(cuò)誤。比如系統(tǒng)一起重啟。查看 /etc/inittab 是否設(shè)置了runlevel6模式。開(kāi)機(jī)腳本錯(cuò)誤是不是應(yīng)該單用戶(hù)進(jìn)入系統(tǒng)排查。/etc/rc.d/rcx.d下面的腳本,必要是可以把S開(kāi)頭的腳本先改名為K 。待系統(tǒng)啟動(dòng)后在恢復(fù)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。