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 23:59
下一篇 2016-11-29 11:06

相關推薦

  • CentOS 更改改網卡名稱

    1 查看你的CentOS7網卡名字叫什么(通常第一個網卡叫做eno16777736) ip addr 2 編輯配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 把配置文件里面所有eno16777736改為eth0 3 把網卡配置文件名字也修改一下 cd?/etc/sysconfig/networ…

    2018-01-18
  • 第三周:文本處理工具wc,cut,sort,uniq,tr,tee命令練習和用戶及組相關命令練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可; [root@app1 tmp]# who | cut -d" " -f1| uniq root dts centos 2、取出最后登錄到當前系統的用戶的相關信息; [r…

    Linux干貨 2016-09-27
  • 網絡配置——命令家族

    Linux網絡屬性配置命令: ifcfg家族:ifconfig,route,netstat ifconfig命令:接口及地址查看和管理          ·ifconfig [INTERFACE]       &nbsp…

    Linux干貨 2016-09-07
  • openvpn安裝配置過程

    前言     之前為了方便遠程辦公時訪問公司的內部系統,如:svn、OA、wiki、禪道等等;通通在防火墻上做了端口映射。然后有個內部系統被黑了,各種弱口令沒辦法。果斷關閉端口映射,看來還是得搭建個VPN服務器,vpn設備感覺大材小用。馬上就想到了開源的openvpn,下面就來介紹openvpn的安裝配置過程。 ope…

    Linux干貨 2015-05-11
  • Linux用戶及用戶組管理

    馬哥網絡教育22期第三周練習 Linux用戶及用戶組管理 Linux是個多用戶多任務的分時操作系統,所有一個要使用系統資源的用戶都必須先向系統管理員申請一個賬號,然后以這個賬號的身份進入系統。用戶的賬號一方面能幫助系統管理員對使用系統的用戶進行跟蹤,并控制他們對系統資源的訪問;另一方面也能幫助用戶組織文件,并為用戶提供安全性保護。每個用戶賬號都擁有一個惟一的…

    Linux干貨 2016-09-19
  • Linux 文件系統權限

    一、簡述權限  文件系統的權限管理機制的建立,約束了用戶對數據的操作。 1、對系統安全而言  管理員的操作權限非常大,足以破壞系統,權限機制將管理員與普通用戶之間區分開,防止系統被隨意破壞。 2、對用戶而言  Linux是一個多用戶的操作系統,不同用戶間為了防止其他人破壞數據或訪問數據,文件系統的權限管理是非常必要的。 二、文件…

    Linux干貨 2016-08-04

評論列表(1條)

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

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

欧美性久久久久