淺談centos啟動那點事兒

來源:互聯網
上載者:User

標籤:sysvint   upstart   systemd   rc.sysinit   rc.local   linux系統啟動   

        linux系統啟動首先從BIOS開始檢測硬體資訊=》開始啟動引導程式。讀取MBR(磁碟上第0磁軌第一個扇區)也就是Master Boot Record 即主引導記錄。MBR記錄了開機前資訊和分區表資訊。然後將grub(作用:設定核心映象在磁碟分割的位置)資訊複製到記憶體中。為啟動核心做準備。===》載入核心。核心初始化產生一個PID為1的init進程。

       由於核心運行起來是毫無用途的,需要一個系統能夠定義,管理和控制init進程的行為,並負責組織和運行完成初始化的工作,從而讓系統進入一個使用者設定的運行模式中,這個系統就是init系統。

        init(為英語:initialization的簡寫)是 unix和 類Unix 系統中用來產生其它所有進程的程式。它以守護進程的方式存在,其進程號為1。Linux系統在開機時載入Linux核心後,便由Linux核心載入init程式,由init程式完成餘下的開機過程。

        init 的運行方式曆經: sysvinit  , upstart ,  systemd

        早期的linux系統的init運行方式相容UNIX  system V(Unix系統的一個版本)下init運行方式。

        System V 下init的運行方式:

        System V init 檢查 ‘/etc/inittab‘ 檔案中是否含有 ‘initdefault‘ 項。 這告訴 init 系統是否有一個預設的運行。System V init  描述了 8中狀態  。0-6 和S 或s .linux 設定了6各層級:#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  預設是 3層級啟動。 linux伺服器大多版本預設是3層級。而案頭版本一般為5.(圖形化介面)。如何查看 :   $ runlevel  或  $ who -r.

            Sysvinit 的優點是概念簡單。Service 開發人員只需要編寫啟動和停止指令碼,概念非常清楚;將 service 添加/刪除到某個 runlevel 時,只需要執行一些建立/刪除軟串連檔案的基本操作;這些都不需要學習額外的知識或特殊的定義文法(UpStart 和 Systemd 都需要使用者學習新的定義系統初始化行為的語言)。

            其次,sysvinit 的另一個重要優點是確定的執行順序:指令碼嚴格按照啟動數位大小順序執行,一個執行完畢再執行下一個,這非常有益於錯誤排查。UpStart 和 systemd 支援並發啟動,導致沒有人可以確定地瞭解具體的啟動順序,排錯不易。

         2006年的時候Ubuntu 打算把系統用在筆記本上。最大的困境是:sysvinit 對行動裝置(USB 裝置的裝置)的熱插拔支援不夠。於是開發了upstart 基於事件機制.比如 USB 磁碟機插入 USB 介面後,udev 得到核心通知,發現該裝置,這就是一個新的事件。UpStart 在感知到該事件之後觸發相應的等待任務,比如處理/etc/fstab 中存在的掛載點。採用這種事件驅動的模式,upstart 完美地解決了隨插即用裝置帶來的新問題。UpStart採用了非同步方式 可以:更快地啟動系統;當新硬體被發現時動態啟動服務;硬體被拔除時動態停止服務。這些特點使得 UpStart 可以很好地應用在案頭或者攜帶型系統中,處理這些系統中的動態硬體插拔特性。但是UPstart沒有完全擺脫 runlevel機制。只是在相容的基礎上相應的最佳化了runlevel機制。

      為了減少系統啟動時間,systemd 的目標是:儘可能啟動更少的進程,儘可能將更多進程並行啟動,減少了啟動進程間的依賴。沒有必要的進程可以在需要使用的時候才啟動。此外systemd開創了新的管理體系。以前運行層級(runlevel)的概念被新的運行目標(target)所取代。target的命名體系類似於“multi-user.target"和原來的運行層級3(runlevel 3)相對應。在centos7中由於使用了新systemd管理機制。不再使用runlevel的概念,所以/etc/inittab不在被系統使用。

        centos7下systemd 管理體系理預設的target通過軟連結來實現的。

        (由於版面的問題  把  inode值  屬主屬組和日期  刪除)

[[email protected] ~]# ll /etc/systemd/system/default.target
lrwxrwxrwx.    /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target

如果想修改運行目標。只需要把這個軟連結刪除。軟連結到新的運行目標。

# rm -rf /etc/systemd/system/default.target

# ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

我們來查看下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

同樣查看下: (由於版面的問題  把  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

得組合體。不過不用擔心。就的service命令在centos7下依舊可以使用,不過,它會重新導向所有命令到新的systemctl 工具。

幾個例子:

        (sysvint)

        #service  network  start |stop |status

        #chkconfig httpd on

        ( systemclt)

        # systemctl start|stop|status network.service

        #systemctl  enable httpd.service

目前: Ubuntu 15.04及後續版本在預設的init上都安裝了 systemd.

        介紹完主流init系統後,開始繼續啟動系統。

        BIOS - mbr  -grub  -核心 - /etc/inittab- /etc/rc.d/rc.sysinit -啟動核心模組/etc/modules.conf-啟動指定層級下的指令碼rcx.d-執行/etc/rc.d/rc.local -/bin/login

        雖然前面說了新的init系統的諸多好處:不過現在畢竟centos7的企業使用者群體總體上不多。我們還是需要熟練掌握centos7一下的版本的啟動。方便以後的管理。而且centos7 在命令層面上完全向下相容。

        梳理了,開機啟動流程。可以來些小的應用。    

        比如:在/etc/rc.d/rc.local  裡面掛載行動裝置,添加個人化服務啟動。如果,改階段那個服務啟動不了,導致。啟動阻塞。是否可以先進入單一使用者模式,在/etc/rc.d/rc.local 檔案下注釋掉服務。待開機後在測試,修複呢?

        最主要的是。熟悉了開機啟動後。可以根據開機的錯誤資訊。排查是那個階段出現的錯誤。比如系統一起重啟。查看  /etc/inittab 是否設定了runlevel6模式。開機指令碼錯誤是不是應該單使用者進入系統排查。/etc/rc.d/rcx.d下面的指令碼,必要是可以把S開頭的指令碼先改名為K 。待系統啟動後在恢複。



        

本文出自 “趙雁生的linux之旅” 部落格,請務必保留此出處http://12042068.blog.51cto.com/12032068/1893062

淺談centos啟動那點事兒

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.