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 16:22
下一篇 2016-09-09 16:26

相關推薦

  • 關于 建立私有CA和申請證書

                               建立私有CA和申請證書            …

    系統運維 2016-09-23
  • 網絡接口配置-bonding

    網絡接口配置-bonding ?Bonding 就是將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。當然,直接給兩塊網卡設置同一IP地址是不可能的。通過bonding,虛擬一塊網卡對外提供連接,物理網卡的被修改為相同的MAC地址。 Bonding的工作模式 ?Mode 0 (balance-rr) 輪轉(Round-robin)策略:從頭…

    Linux干貨 2016-09-05
  • glob及IO重定向

    globbing: 文件名通配     匹配模式:元字符           *:匹配任意長度的任意字符    pa* ,*pa* ,*pa,  *p*a*    pa, paa, passwd    ?:  …

    Linux干貨 2016-12-21
  • 權限管理

    權限管理包括普通權限、特殊權限、默認權限、ACL權限。 這些權限都是針對u(owner)、g(group)、o(other)三類定義的。 設置權限時文件和目錄不同(此處把文件和目錄分開,一般說文件就包含目錄(linux思想:一切皆文件))如下圖所示, 分別用兩個用戶分別創建了一個目錄一個文件,可以看到同是目錄的liutest和test的權限不同,它倆同為目錄…

    Linux干貨 2017-07-30
  • 搭建yum倉庫

    搭建yum倉庫 背景: 在學習完如何搭建yum倉庫后,覺得搭建yum倉庫很有意義,將自己學習中的感悟和理解記錄下來,以備日后復習。 介紹: yum:全稱是Yellow dog Updater, Modified。它是一個在Fedora和RedHat以及CentOS中的Shell前端軟件包管理器?;赗PM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可…

    2017-08-05
  • 馬哥教育網絡班21期+第四周課程練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限; [root@localhost /]# cp -r /etc/skel /home/tuser1 [root@localhost /]# chmod&nb…

    Linux干貨 2016-07-22
欧美性久久久久