centos啟動流程

linux系統啟動流程

內核的設計結構
單內核:linux(線程–lwp輕量級進程)
微內核:windows(支持真正意義上的多線程)

單內核:很多功能驅動都集成在一起

微內核:內核很小,功能單一。模塊化

linux為了適應眾多用戶的不同硬件需求,linux內核在設計上采用模塊化設計??梢詣討B加載模塊。
核心模塊:ko 內核所獨有的。
共享對象:so

紅帽的系統下內核的模塊在/lib/modules/內核版本號命名的目錄
模塊之間也存在依賴關系。
例如:/lib/modules/3.10.0-327.el7.x86_64/kernel/放的是內核模塊。50多MB

內核名稱 vmlinuz-x.x.xx /boot/vmlinuz-x.x.xx 內核 1.9MB


pc-linux

POST–>BIOS(啟動順序去哪找啟動位置)–>MBR
(bootloader,446字節)–>kernel(探測基本的硬件)–>initrd–>/sbin/init

詳細啟動過程
bootloader(MBR)是個程序
linux的bootloader
LILO:linux loader 不支持硬盤超過1個g的
GRUB:GRadn Unitied bootloader
MBR太小,所以GRUB分成兩段
第一階段是為了引導第二段,在MBR 中
第1.5階段 識別不同類型的文件系統。是的多個文件。
第二階段是引導操作系統的
后兩個階段在/boot/grub目錄下,grub也有配置文件,開機啟動項,雙系統的啟動順序,開啟圖片….

bootload是將內核和initrd一起裝進內核。

init /sbin/int 二進制的可執行程序 (用戶空間的主導程序)

內核啟動之前沒有加載文件系統,而內核又存放在文件系統之上。
/ 根所在的分區,又叫rootfs
內核裝載根文件系統
內核要使用文件系統 ,就要有設備驅動和文件系統模塊

內核靠驅動識別硬件,為了適應安裝到不同平臺的需要,就需要大量的驅動。在安裝操作系統的時候生產了一個包含該平臺設備驅動的中間層臨時的文件系統(不能同時存在兩個根但是根是可以切換的)。使得內核可以識別根文件系統然后加其他模塊。 整個過程就是根切換。

這臨時文件系統其實是一個文件,安裝操作系統時生成的,只不過內核能夠將其再內存中展開為一個模擬的文件系統(紅帽5上通常被稱為ramdisk,紅帽6上成為ramfs)。
ramdisk–>initrd centos5
制作工具:mkinitrd
ramfs–>initramfs centos6、7
制作工具:dracut,mkinitrd

chroot 命令
可以實現根切換,將一個臨時的目錄切換為根,在該目錄下必須存在/bin/bash,以及bash需要的庫文件,復制過去即可保持原有的文件層級結構。就可以在命令界面下切換過去。

用戶也可以實現根切換,與內核的根切換還是不完全一樣。
內核根切換,使用的命令也不一樣,內核切換時將三個目錄帶了過來,/proc,/sys,/dev
[root@localhost ~]# ldd /bin/bash
linux-vdso.so.1 => (0x00007fffb9f05000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f81904ef000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f81902eb000)
libc.so.6 => /lib64/libc.so.6 (0x00007f818ff29000)
/lib64/ld-linux-x86-64.so.2 (0x00007f819072f000)

[root@localhost ~]# tree /test/
/test/
├── bin
└── lib64
    ├── ld-linux-x86-64.so.2
    ├── libc.so.6
    ├── libdl.so.2
    └── libtinfo.so.5

[root@localhost ~]# chroot /test
bash-4.2# 
bash-4.2# 
bash-4.2#

init

級別不同,運行的服務不同。
linux 有運行級別之稱 0-6
0:halt
1:單用戶模式,直接以管理員的身份進入,不需要密碼。
2:多用戶模式,有網絡功能,但是不啟用nfs
3:正常的多用戶模式,test mode 命令行模式
4:保留級別
5:圖形模式
6:reboot

init運行在那個級別取決于配置文件,/etc/inittab
定義了默認運行級別


centos

grub

可以在啟動界面編輯grub的配置。以指定的級別啟動。例如進入1級別,單用戶模式(又叫維護模式)。
grub修改配置文件也可以加密碼。使用grub-md5-crypt命令生成加密的密碼放到grub的配置文件中即可。
在配置文件中加入 password –md5 密碼

顯示當前運行級別
who -r
runlevel

查看內核release號
uname -r

grub損壞如何修復。

先人為破壞MBR中的bootloader 硬盤的前446字節
dd if=/dev/zero of=/dev/sda count=1 bs=400
sync

修復grub,就是從新安裝grub

1、使用grub命令
grub>root (hd0,0) 設置kernel所在的分區。(設置后有提示)
grub> setup (hd0) 安裝到kernel所在的設備上

2、安裝grub
grub-install –root-directory=/ 這里的根指的是boot的父目錄

給其他設備安裝grub,首先設備要有分區表,并且boot目錄已經掛在了分區。

grub配置文件損壞了如何修復
啟動系統后會自動進入grub命令模式
grub>find
grub>root
grub>kernel
grub>initrd
grub>boot


kernel初始化過程
1、探測
2、驅動初始化(從initrd文件中載入驅動模塊(centos6以后都是使用initramfs文件))
initramfs-2.6.32-642.el6.x86_64.img
3、以只讀方式掛載根文件系統
4、裝載第一個進程init(PID:1)

系統初始化流程(內核級別):post–>讀取bios中啟動次序–>bootloader–>kernel和ramdisk–>裝在根文件系統–>/sbin/init

/sbin/init;(/etc/inittab)
cenos5之前的: SysV int
配置文件:/etc/inittab

centos6以后使用另外一種版本的init---upstart;ubuntu開發的init程序,可以并行啟動多個服務。
        upstart是對sysv init改進的。
        配置文件:/etc/init/*.conf


centos7:systemd;另一種init程序??梢圆⑿袉佣鄠€服務。(比較優秀)
        配置文件:/usr/lib/systemd/system
                /etc/systemd/system

以centos5為例講解sysvinit

運行級別:為了系統的運行或維護等目的而設定的機制
    0-6:7個級別
        0: 關機
        1: 單用戶模式(single user),root用戶,無須認證;維護模式
        2: 多用戶模式(multl user),會啟動網絡功能,但不會啟動NFS;維護模式
        3: 多用戶模式(multl user),完全功能模式,文本界面
        4: 預留級別;目前無特別使用目的,但習慣以同3級別功能使用
        5: 多用戶模式(multl user),圖形界面。完全功能
        6: 重啟,reboot
默認級別3、5、    
級別切換 init #
級別查詢 who -r
        runlevel

init

/sbin/init
/etc/inittab

以cenos5為例
    /etc/inittab
    每行定義一種action以及與之相對應的process
    id:runlevel:action:process
        id:一個任務的標識符
        runlevel:在那些級別下啟動次任務,為空表示所有級別
        action:在什么條件下啟動次任務            
        process:指具體的任務,一個程序或腳本。

    action:
        wait:等待切換至次任務所在的級別時執行一次。
        respawn:此任務終止時就會自動啟動

        initdefault:設定默認運行級別;此時process省略
        sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit腳本

    10:0:wait:/etc/rc.d/rc 3

    /etc/rc.d/rc 腳本的作用。
        意味著去啟動或關閉/etc/rc.d/rc3.d目錄下的服務腳本所控制的服務

        所有以k開頭的都是要停止的服務
        所有以s開頭的都是要啟動的服務
        腳本執行的順序是先關閉k的后啟動s的
        k后面的數字只的是優先級。glob風格排序。
        服務之間也有依賴關系。所以啟動和關閉的順序不一樣。


centos6為例:

    [root@yangyouwei ~]# ls /etc/init/ ###這個目錄是/etc/inittab的文件的切片。
    ck-log-system-restart.conf  rcS.conf
    ck-log-system-start.conf    rcS-emergency.conf
    ck-log-system-stop.conf     rcS-sulogin.conf
    control-alt-delete.conf     readahead-collector.conf
    init-system-dbus.conf       readahead.conf
    kexec-disable.conf          readahead-disable-services.conf
    plymouth-shutdown.conf      serial.conf
    prefdm.conf                 splash-manager.conf
    quit-plymouth.conf          start-ttys.conf
    rc.conf                     tty.conf

    [root@yangyouwei ~]# ls /etc/init.d  ####這個文件是init的腳本
    abrt-ccpp         firstboot     messagebus      portreserve   sandbox
    abrtd             functions     mysqld          postfix       saslauthd
    abrt-oops         haldaemon     netconsole      pppoe-server  single
    acpid             halt          netfs           psacct        smartd
    atd               htcacheclean  network         quota_nld     spice-vdagentd
    auditd            httpd         NetworkManager  rdisc         sshd
    autofs            ip6tables     nfs             rdma          sssd
    blk-availability  iptables      nfslock         restorecond   svnserve
    bluetooth         irqbalance    nfs-rdma        rngd          sysstat
    certmonger        kdump         ntpd            rpcbind       udev-post
    cpuspeed          killall       ntpdate         rpcgssd       wdaemon
    crond             lvm2-lvmetad  oddjobd         rpcidmapd     winbind
    cups              lvm2-monitor  openct          rpcsvcgssd    wpa_supplicant
    dnsmasq           mdmonitor     pcscd           rsyslog       ypbind
每個程序基于事件驅動來編寫的。

/etc/rc.d/rc.sysinit完成的任務
1、激活udev和selinux
2、根據/etc/sysctl.conf文件,來設定內核參數
3、設定系統時鐘
4、裝載鍵盤映射
5、應用交換分區
6、設置主機名
7、根文件系統檢測,并以讀寫方式重新掛載
8、激活RAID和LVM設備
9、啟用磁盤配額
10、根據/etc/fstab檢查并掛載其他文件系統
11、清理過期的鎖和PID文件

/etc/rc.d目錄下存放的腳本
[root@yangyouwei ~]# ls /etc/rc.d/
init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit
rc rc1.d rc3.d rc5.d rc.local

對應系統啟動級別的腳本
    相應目錄下的以k開頭的腳本是在該級別下要停止的腳本
    以s開頭的是要在該級別下運行的腳本。

/etc/rc.d/init.d/(鏈接)—>/etc/init.d/
chkcofig –add 創建的鏈接

服務類腳本
start

Sysv風格 :/etc/rc.d/init.d下面的腳本要支持以下參數
start|stop|restart|status
reload|configtest

都有一下的行
# chkconfig: 2345 13 99  ###定義默認啟動的級別,啟動的優先次序,關閉的優先次序 
    如果定義啟動級別為  -  表示都是k。
# description: 描述該腳本的簡單功能

設置啟動和關閉優先級時,應考慮依賴關系。依賴的先啟動,后關閉。

運行級別下的腳本執行順序
    當chkconfig命令來為此腳本在rc#.d目錄創建鏈接時,runlevels表示默認創建為s*開頭的鏈接。除此自外的級別默認創建為k*開頭的鏈接。s后面的啟動優先級為ss所表示的數字‘k后面關閉優先次序為kk所表示的數字。

這兩行必須有#號

創建腳本后需要放到/etc/init.d/目錄下,運行一下
chkconfig –add SERVICENAME
SERVICENAME 服務腳本的名稱不帶.sh

chkconfig: 2345 13 99 執行chkconfig –add 時,在指定級別里添加s開頭的鏈接,其他級別的均為k

chkconfig 使用方法
SYNOPSIS
chkconfig [–list] [–type type][name] 列出(指定/所有)服務各個級別的狀態
chkconfig –add name 添加服務
chkconfig –del name 刪除服務
chkconfig –override name
chkconfig [–level levels] name 修改 相應系統運行級別下的啟動還是關閉
chkconfig [–level levels] [–type type] name

服務腳本,通過chkcofing加入服務后,就可以通過service SERVICENAME stop|start… 控制服務

如果沒有能力寫服務腳本還可以將要運行的服務命令直接寫在/etc/rc.d/rc.local中

[root@yangyouwei ~]# cat /etc/rc.d/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

系統初始化腳本:/etc/rc.d/rc.sysinit
1、設置主機名
2、設置歡迎信息
3、激活udev和selinux
4、掛在/etc/fstab文件中定義的所有文件系統
5、檢測根文件系統,如果沒有問題以讀寫方式掛在
6、設置系統始終;讀取硬件時鐘,通過腳本實現
7、根據/etc/sysctl.conf文件來設置內核參數
8、激活lvm及軟RAID設備
9、激活個swap設備
10、加載額外設備的驅動程序
11、清理操作

總結用空間的啟動流程

/sbin/init(/etc/inittab)

init的配置文件inittab的任務
設置默認運行級別–>運行系統初始化腳本,完成系統初始化–>關閉對應級別下要停止的服務,啟動對應級別下要開啟的服務–>設置登陸終端

centos6啟動流程

centos6以后使用另外一種版本的init—upstart;ubuntu開發的init程序,可以并行啟動多個服務。
upstart是對sysv init改進的。

init程序:
        為了兼容init,其執行主程序依然叫init /sbin/init
        配置文件:/etc/init/*.conf
                /etc/inittab(僅用于定義系統默認啟動級別)

centos7啟動流程

init程序

    systemd
        配置文件
            /usr/lib/systemd/system/*
            /etc/systemd/system/*

    默認的服務都不啟動,當訪問那個服務,那個服務才啟動。
    兼容centos6的服務 /etc/init.d/下的服務
    systemd 的服務腳本放在  /usr/lib/systemd/system

設置系統默認啟動級別
     systemctl set-default TARGET.target

完全兼容sysv腳本機制;因此,service還是可以使用。不過建議使用systemctl來控制服務;

systemctl {start|stop|restat|status} name[.service]

原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/44968

(0)
yywyyw
上一篇 2016-09-09
下一篇 2016-09-09

相關推薦

  • N25第三周作業(用戶組,和文本管理)

    列出當前系統 上所有已經登錄用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可. 列出最后登錄到當前系統的用戶相關信息. 命令who查看所有用戶 , tail查看后幾行 取出當前系統上被用戶當作其默認shell的最多那個shell. 命令cut 分割 , -d 指定分隔符,-f指定字段 uniq 顯示或忽略重復行信息   -c:顯示并統計重復…

    Linux干貨 2016-12-19
  • OpenSSL

    一、什么是OpenSSL 在電腦網絡上,OpenSSL是一個開放源代碼的軟件庫包,應用程序可以使用這個包來進行安全通訊,避免竊聽,同時確認另一端連接者的身份。這個包廣泛被應用在互聯網的網頁服務器上。其主要庫是以C語言所寫成,實現了基本的加密功能,實現了SSL與TLS協議。 OpenSSL由三部分組成:     libencryp…

    Linux干貨 2016-04-25
  • 從Linux小白到大?!c狼共舞的日子2

    馬哥教育網絡班21期+第2周課程練習 1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 cp:copy,復制文件 cp SRC DEST   SRC為文件     如果目錄不存在:新建DEST,并將SRC中內容填充至DEST中     如果目…

    Linux干貨 2016-07-17
  • 權限管理

    權限 權限就是用戶或者組對文件或者目錄所擁有的能力,所能執行的操作。 權限的分配: 通過ls -l file這個命令可以查看文件或者目錄的詳細信息:     [root@localhost home]# ls -l /root/   &nb…

    Linux干貨 2016-08-05
  • 第九周作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash LOGIN_USER=0 NOLOGIN_USER=0 for SHELLUSER in $(cat /etc/passwd | cut -d : -f 7);do…

    Linux干貨 2017-07-03
  • httpd服務歸納:httpd基本配置(https原理以及配置 )

    一 https介紹以及實現機制   1. https協議:      在傳統的http協議中,文檔是明文傳送的,網頁涉及敏感信息是,將變得很不安全。為了保證敏感信息的安全,httpd結合加密庫openssl或openssh 產生了https 協議。這就好比兩個黑社會團伙交易,都怕出事被抓,…

    Linux干貨 2015-05-23
欧美性久久久久