1、簡述linux操作系統啓動流程
POST自檢--Boot Sequence(BIOS) --Boot loader(MBR)--Kernel -- rootfs -- switchroot --/sbin/init(/etc/inittab,/etc/init/*.conf)--設定默認運行級別--系統初始化腳本--關閉或啓動對應級別下的服務--啓動終端(命令行終端或圖形界面終端)
1.POST自檢
電腦主機打開電源的時候隨後會聽到滴的一聲響系統啓動開始了開機自檢POST,自檢開始這個過程中主要是檢測計算機硬件設備比如CPU內存主板顯卡等設備是否有故障存在。如果有硬件故障的話將按兩種情況理對於嚴重故障(致命性故障)則停機,此時由於各種初始化操作還沒完成不能給出任何提示或信號,對於非嚴重故障則給出提示或聲音報警信號等待用戶處理,如果沒有故障POST完成自己的接力任務將尾部工作交接給BIOS處理。
2.Boot Sequence(BIOS)
Boot Sequence主要實現的功能是選擇要啓動的硬件設備,選擇了之後就可以讀取這個設備上位於MBR裏頭的bootloader了。這一步的實現是這樣的:根據BIOS中對啓動順序的設定,BIOS自己會依次掃描各個引導設備,然後第一個被掃描到具有引導程序(bootloader)的設備就被作爲要啓動的引導設備。
3.加載Boot loader(MBR)
步驟2的BIOS通過讀取並執行啓動設備的MBR中的bootloader,而bootloader要實現的功能就是提供一個菜單給用戶,讓用戶去選擇要啓動的系統或不同的內核版本,然後把用戶選擇的內核版本加載至RAM中的特定空間,接着在RAM中解壓、展開,而後把系統控制權移交給內核。
在這個過程中CentOS 6之後的系統主要靠Grub的引導,而Grub最要分爲兩個版本:grub 0.xx:grub legacy和grub 1.xx:grub2;
Grub分爲兩個階段
stage1:存放在MNR中,主要是Boot loader
stage1.5:存放於MBR之後的扇區,加載stage2所在分區的文件系統驅動,讓stage1中的bootloader能識別stage2所在分區的文件系統;
stage2:存放在磁盤中,主要是/boot/grub/目錄下
4.Kernel初始化:
自身初始化
探測可識別到的所有硬件設備
加載硬件驅動程序(有可能會藉助於ramdisk加載驅動)
以只讀方式掛載根文件系統
運行用戶空間的第一個程序:/sbin/init
init的類型:
CentOS 5: SysV init
配置文件:/etc/inittab
CentOS 6: Upstart
配置文件:/etc/inittab
/etc/init/*.conf
CentOS 7: Systemd
配置文件: /usr/lib/systemd/system/
/etc/systemd/system/
ramdisk:
Linux內核的特性之一:使用緩衝和緩存來加速對磁盤上的文件訪問
ramdisk --> ramfs
CentOS 5:initr
工具程序:mkinitrd
CentOS 6、7:initramfs
工具程序:dracut,mkinitrd
系統初始化流程(內核級別):POST -->Boot Sequence(BIOS) --> Boot loader(MBR) --> Kernel(ramdisk) --> rootfs(readonly) --> /sbin/init (運行級別)
5.啓動/sbin/init進程:
CentOS 5: SysV init
運行級別:爲了系統的運行或維護等目的而設定的機制
0-6:7個級別
0:關機,shutdown
1:單用戶模式(single user),root用戶,無須認證:維護模式
2:多用戶模式(multi user),會啓動網絡功能,但不會啓動NFS:維護模式
3:多用戶模式(multi user),完全功能模式,文件界面
4:預留級別:目前無特別使用目的,但習慣以同3級別功能使用
5:多用戶模式(multi user),完全功能模式,圖形界面
6:重啓,reboot
默認級別:3,5
級別切換: init #
級別查看:who -r runlevel
配置文件:/etc/inittab
2、簡述grub啓動引導程序配置及命令行接口詳解
配置文件:/boot/grub/grub.conf
配置項:
default=#:設定默認啓動的菜單欄,落單項(title)編號從0開始
timeout=#:指定菜單項等待選項選擇的時長
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑
hiddenmenu:隱藏菜單
password [--md5] STRING:菜單編輯認證
title TITLE:定義菜單項“標題”,可出現多次
root (hd#,#) :grub查找stage2及kernel文件所在設備分區:爲grub的“根”
kernel /PATH/TO/VMLINUZ-VERSION-RELEASE [PARAMETERS] :啓動的內核
initrd /PATH/TO/INITRAMFS-VERSION-RELEASE.img:內核匹配的ramfs文件
password [--md5] STRING:啓動選定的內核或操作系統時進行認證
命令行接口詳解:
grub的命令行接口
help:獲取幫助列表
help KEYWORD:詳細幫助信息
find (hd#,#)/PATH/TO/SOMEFILE
root (hd#,#)
kernel /PATH/TP/KERNEL_FILE:設定本次啓動時用到的內核文件,額外可以添加許多內核支持使用的cmdline參數
例如:init=/path/to/init,selinux=o
initrd /PATH/TP/INITRAMFS_FILE:設定爲選定的內核提供額外文件的ramdisk
boot:引導啓動選定的內核
3、實現kickstart文件製作與光盤鏡像製作
kickstart文件的格式
命令段:
指定各種安裝前配置選項,如鍵盤類型等
必備命令
可選命令
程序包端:
指明要安裝程序包,以及包組,也包括不安裝的程序包
%package
@group_name
package
-package
%end
腳本段:
%pre:安裝前腳本
運行環境:運行安裝介質上的微型Linux系統環境
%post:安裝後腳本
運行環境:安裝完成的系統
命令段中的必備命令:
authconfig:認證方式配置
authconfig --enableshadow --passalgo=sha512
BootLoader:定義BootLoader的安裝位置以及相關配置
bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhgb quiet"
keyboard:設置鍵盤類型
keyboard us
lang:語言類型
lang zh_CN.UTF-8
part:分區佈局(默認爲#註釋)
part /boot --fstype=ext4 --size=2000
part swap --size=2048
part / --fstype=ext4 --grow --size=200
rootpw:管理員密碼
rootpw --iscrypted $6$oEcMb4he0tpIbfRy$EZ0YlMAOnQ9tpAv5jzVpAQTrFSGqLgabWgO/YNwyPzeQnTvmYExgr1yb8ELV3.0TS/6FyF1mdGJxTaZOj0wT60
timezone:時區
timezone --utc Asia/Shanghai
補充:分區相關的其他命令
clearpart:清除分區
clearpart --none --drives=sda:清除磁盤分區
volgroup:創建卷組
volgroup myvg --pesize=4096 pv.008002
logvol:創建邏輯卷
logvol /home --fstype=ext4 --name=lv_home --vgname=myvg --size=5120
生成加密密碼的方式:
~]#openssl passwd -1 -salt `openssl rand -hex4`
可選命令:
install or upgrade:安裝或升級
text:安裝界面類型,text爲tui,默認爲GUI
network:配置網絡接口
network --onboot yes --device eth0 --bootproto dhcp --noipv6
firewall:防火牆
firewall --service=ssh
selinux:SELinux
selinux --enforcing
halt、poweroff或reboot:安裝完成之後的行爲
repo:指明安裝時使用的repository
repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
url:指明安裝時使用的repository,但格式爲URL格式
url --url=https://mirrors.aliyun.com/centos/7/os/x86_64/
參考官方文檔:《installation guide》
光盤鏡像製作命令:
創建光盤鏡像:
~]#mkisofs -R -j -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 x86_64 boot" -C isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso /myboot