CentOS系統啟動流程與grub

本文主要講述CenOS系統啟動的整個流程。

對于CentOS系統來說,整個啟動過程可分為4個階段,分別是:加點自檢,加載MBR,加載內核并執行初始化信息,初始化用戶空間。下面就具體來描述每個過程都做了什么。

一.加點自檢(power on system test,POST)

任何一種操作系統的啟動,第一步必定是加點自檢,主要功能是裝載在硬件芯片CMOS之上的BIOS(Basic Input Output System)來實現,這個程序CMOS會根據CMOS上的配置信息去檢測當前計算機是否具有啟動系統的基本硬件能力,比如CPU,內存是否正常等等。

二.選擇啟動順序,加載MBR

完成BIOS初始化之后,BIOS會列出一些可以啟動的裝置順序,然后根據這個順序去找對應的內核文件。但是由于不同系統的文件系統系統可能會不同,所以就有了一個叫做啟動管理程序,來處理文件系統不同這些問題,而這個程序就叫做Booot Loader,它位于可以啟動的第一塊硬盤的MBR(Master Boot Record)中。MBR則是位于可以啟動的硬盤的第一個扇區之內,Boot Loader還要完成操作系統的識別,加載核心文件的功能,當用戶安裝多個系統以后,還會提供一個讓用戶選擇要啟動的操作系統的菜單。因此當MBR被破壞以后,Boot Loader也會收到影響,進而就會導致無法啟動系統。

三.加載內核Kernel,并執行系統初始化信息

當Boot Loader讀取操作系統內核文件后,接下來就會將內核文件解壓后裝載到內存之中,并依據內核所提供的功能去測試設備。此時,內核程序還沒加載到磁盤,也就是說此時系統還沒有磁盤的驅動能力,那又如何加載位于磁盤上的內核文件呢?

Linux采用了一種叫做虛擬文件系統(Initial RAM DISK)來解決這個問題,它的主要功能是:通過Boot Loader程序加載到內存中,然后這個文件就會被解壓展開到模擬的根文件系統中,這個根文件系統能提供一個可運行的程序,通過這個程序加載核心的模塊,完成之后,釋放虛擬的文件系統,并掛載真實的根文件系統,完成根切換,之后就能執行正常的啟動過程。

四.啟動用戶空間的第一個程序,初始化用戶空間

1.完成以上三步之后,內核會呼叫用戶空間的第一個程序:/sbin/init,這個程序會完成一系列的初始化操作,包括主機名設定,網絡配置等操作,所有的這些操作都是在init的配置文件中定義的。因此init配置文件就至關重要。

對于CentOS5:其采用的是SysV init方式,通過腳本啟動服務,有依賴關系的服務就會被串行啟動,配置文件為/etc/inittab

對于CentOS6:采用Upstart方式進行,進程間的通信通過D-Bus進行,可以基本實現類似并行啟動,配置文件為/etc/inittab,/etc/init/*.conf

對于CentOS7:采用了全新的Systemd方式,其特點是只有在服務第一次被啟動才會真正啟動,其配置文件為/usr/lib/systemd/*

2.init配置文件

在init配置文件中,尤為重要的一項是設置系統的默認運行級別,而在Linux之上,運行級別0-6七種級別,分別是:

0:關閉所有服務,然后關機
1:維護模式,也叫單用戶模式,允許root用戶可以不用密碼直接登錄系統
2:維護模式,也叫多用戶模式,需要認證,會啟動網絡
3:正常級別,完全多用戶模式,提供文本界面
4:預留級別,暫未使用
5:正常級別:完全多用戶級別,提供圖形節界面
6:關閉所有服務,重新啟動

??催\行級別的方法:

runlevel 或者 who -r

切換運行級別的方法:

init run_level

在CentOS6中,/etc/inittab文件內容是:

# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# 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)
id:3:initdefault:

定義的格式為:

id:runlevel:action:process,例如上述文件中的最后一行:id:3:initdefault:

因此init的整個處理流程為:

1.通過讀取/etc/inittab文件來設定運行級別
2.使用/etc/rc.d/rc.sysinit來初始化系統
3.執行3級別下所設定的操作,并忽略其他級別設定的配置

從上面可以看到,初始化系統是根據/etc/rc.d/rc.sysinit進行的,這個腳本的主要的任務是:

1.根據/etc/sysconfig/network文件來設定主機名
2.打印文本歡迎信息
3.激活SELinux和udev
4.掛載/etc/fatab中定義的文件系統
5.激活swap設備
6.檢測根文件系統
7.設置系統時鐘
8.根據/etc/sysctl.conf文件來設定內核參數
9.激活LVM和RAID
10.加載驅動程序
11.清理操作

當內核設定運行級別以后,就要去完成對應級別下的操作,而這些級別對應下的任務是/etc/rc.$runlevle.d

/下的操作,不同級別下這些腳本被成為服務腳本,這些腳本決定如何開啟或關閉服務,而具體的方式則是系統通過傳遞S參數來啟動服務,傳遞K來關閉服務;這些服務腳本的定義規范為:

(1)至少接受四個參數:

start:啟動服務
restart:重啟服務
stop:停止服務
status:查看服務運行狀態

(2)腳本的開頭

#chkconfig :start_level start_prio stop_prio

#description:description information

這些腳本可以通過/etc/init.d/script_name {start|stop|status|restart}調用,也可以通過service script_name {start|stop|status|restart}調用 

五.grub

1.在系統啟動過程中,Boot Loader至關重要,然而Boot Loader處于MBR當中,MBR的大小是512bytes,只有其中的446bytes是用來存放Boot Loader的,為了解決存放Boot Loader的位置空間的大小問題,Linux將Boot Loader的程序分成三個階段來運行,在Linux上,grub是使用最廣泛的啟動加載器:

stage1:

執行Boot Loader主程序,這必須安裝在MBR中,而且沒有安放Boot Loader相關的配置文件

stage1_5:

在MBR隨后的分區存放,主要用于與stage2所在的文件系統進行交互

stage2:

通過Boot Loader加載所有配置文件及其相關的參數信息,而這些信息全都存放于/boot目錄之下,這些配置文件主要包括:

boot.png

device.map:定義grub的安裝位置
e2fs_stage1_5:ext2文件系統定義
fat_stage1_5:fat文件系統定義
ffs_stage1_5:文件系統定義
grub.conf:grub的配置文件
iso9660_stage1_5:光驅的定義
jfs_stage1_5:jfs文件系統發的定義
menu.lst:鏈接文件
minix_stage1_5:文件系統的定義
reiserfs_stage1_5:reiser文件系統的定義
splash.xpm.gz:背景圖片
stage1:stage1相關的信息
stage2:stage2相關的信息
ufs2_stage1_5:ufs文件系統的定義
vstafs_stage1_5:vfs文件系統的定義
xfs_stage1_5:xfs文件系統的定義

2.Linux一切皆文件,對grub的配置也不例外,其配置文件為/etc/grub.conf

(1)設置grub的方法一,直接修改其配置文件

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda3

#          initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0   #設定默認要啟動的內核

timeout=5   #設定可供用戶選擇的超時時長

splashimage=(hd0,0)/grub/splash.xpm.gz  #定義背景圖片

hiddenmenu  #隱藏選擇菜單

title CentOS (2.6.32-431.el6.x86_64) #設定操作系統的名稱

  root (hd0,0) #設定要啟動的內核所在的位置

  kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=908a3c89-4592-4dc4-8dc2-b5261f7c0e83 rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet 

  initrd /initramfs-2.6.32-431.el6.x86_64.img #設定輔助內核引導的ramdisk文件的位置

(2)通過命令行接口

進入grub命令行,可以在啟動時根據提示的信息進入,在對應的title輸入c就能進入,

啟動.png

常用的grub命令有:

help:獲取幫助信息
find:查找文件
root:設定要啟動的內核所在的位置
kernel:設置內核文件路徑
initrd:設定ramdisk的位置

六.為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;

  (1) 為硬盤新建兩個主分區;并為其安裝grub;

  (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;

  (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;

  (4) 為grub提供配置文件;

  (5) 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機;

具體過程為:

(1)創建分區,結果為

1.png

(2)格式化分區:

2.png

(3)創建目錄

3.png

(4)掛載

3-1.png

3-2.png

(5使用grub-install安裝grub

4.png

(6)提供內核文件和ramdisk文件

6.png

6-2.png

(7)為rootfs提供bash,ls,cat程序

7-1.png

7-2.png

復制庫文件:

7-3.png

(8)為grub提供配置文件

8.png

至此,制作完成


七.制作一個kickstart文件以及一個引導鏡像。描述其過程。

可以手動編輯或者通過system-config-kickstart來創建ks.cfg文件
#命令段
firewall --disabled  #禁用防火墻
install              #執行新的安裝操作
cdrom                #使用光盤安裝
lang en_US.UTF-8       #默認安裝語言
keyboard us            #選擇鍵盤
rootpw  --iscrypted $6$LqIQ9sxk$JLd1tXFz/QavUP7lY4.HeR/HoVGHpgy2V8KzbxCZHxQw7tSH7y4rAqzFYB9yK6r76dxybToPduLH0UEn7Kcm81     #管理員加密密碼
authconfig --enableshadow --passalgo=sha512
selinux --enforcing         #激活selinux
logging --level=info       #信息等級
timezone --utc Asia/Shanghai     #定義系統時區
bootloader --location=mbr --driveorder=sdb --append="crashkernel=auto rhgb quiet"
clearpart --all         #刪除所有現在分區
part /boot --fstype=ext4 --size=200   #掛載分區
part / --fstype=ext4 --size=40960
part swap --size=4096
#腳本段
%pre     #執行安裝前腳本
echo "start install"
%end
%post     #執行安裝后腳本
echo "install end"
#程序包段
%packages
@chinese-support    #使用中文
@development       #安裝開發工具
@graphical-desktop-clients   #安裝圖形化工具
@remote-desktop-clients   #安裝遠程桌面客戶端
%end

(1)制作引導光盤

將系統光盤中除了Packages和repodata外的所有文件復制到同一個目錄下,并創建引導光盤

mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "CentOS 6 boot test" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /root/centos6/

(2)制作自動安裝系統光盤

在/root/centos6/isolinux/isolinux.cfg文件中 append initrd=initrd.img 條目后,添加ks文件讀取路徑 ks=cdrom:/ks.cfg,然后把centos6目錄創建為光盤鏡像boot.iso

mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "CentOS6 boot test" -b isolinux/isolinux.bin  -c isolinux/boot.cat -o /root/boot.iso /root/centos6/

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

(0)
zhangbaozhangbao
上一篇 2016-11-28
下一篇 2016-11-29

相關推薦

  • 系統服務之LVS 集群

    Linux集群(Cluster) 一.概論 1.定義     Cluster:計算機集合;     linux集群,多臺Linux主機為解決某個特定問題組合起來形成的單個系統;     由于現代化業務上線的需求, 單服務器已經不能…

    Linux干貨 2016-10-28
  • N25第一周作業

    1、描述計算機的組成及其功能。 硬件部分: 軟件(系統)組成部分 功能模塊劃分: 進程管理:系統資源的分配單位(線程是CPU分配單位) 存儲管理:內存分配,存儲保護,虛擬存儲 設備管理:管理外設接口 文件管理:保存程序和數據等軟件信息 程序接口:提供指令或函數的調用方式,使程序能夠調用系統的資源 用戶界面:為用戶提供操作環境    &nb…

    Linux干貨 2016-12-12
  • 硬盤分區的三種方式

    以前在初步接觸linux的時候,只知道一種分區方式,現在學會了三種分區方式,所以下面就給大家簡單的演示一下 ,以供參考。 第一種:fdisk /dev/sd?    具體步驟請看下圖:首先有一個空的硬盤/dev/sdb, 第一步:輸入命令fdisk /dev/sdb,會彈出一個幫助信息Command(m for help),意思就是m鍵是…

    2017-08-20
  • 軟件包管理利器之一&RPM

      概述:我們知道使用源代碼進行軟件編譯可以具有定制化的設置,但對于Linux distribution的發行商來說,則有軟件管理不易的問題,畢竟不是每個人對于操作系統都非常的熟悉,不是每個人都會進行源代碼編譯的,因此如果能夠將軟件現在相同的硬件與操作系統上編譯好才發行的話,如果再加上簡易的安裝/刪除/管理等機制,則對于軟件管理會簡單的多…

    Linux干貨 2016-08-24
  • Android必備的Java知識點

     Android應用程序開發是以Java語言為基礎的,所以需要有扎實的Java基礎知識。首先熟悉java基本語法,然后熟悉設計模式等。         a) Java基礎語法:看下面的《Java知識點列表》       b)設計模式:由于在Android系統的框架層當中,使用了大…

    Linux干貨 2015-04-08
  • YUM工具的工作原理、用法及源 碼包的編譯安裝

    YUM工具的工作原理,用法及源碼包的編譯安裝 _ueditor_page_break_tag_ 一、 CentOS: yum, dnf       1.YUM: (Yellow dogUpdate Modifier),rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包,up2date的替代工具   …

    Linux干貨 2016-09-01

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-11-30 21:18

    內容寫翔實扎實,但是整個介紹下來內容量還是比較大的,做為博客來講,考慮到讀者的感受,建議使用Markdonw來進行格式編寫,非常簡單實用。

欧美性久久久久