1. 程式人生 > >Liunx 系統啟動和內核管理總結

Liunx 系統啟動和內核管理總結

sed grub his grub2 eric eset dev splash 手寫

Liunx 系統啟動和內核管理總結

Liunx系統啟動

一、硬件啟動流程

(1)、打開電源  
(2)、BIOS:   
1. POST 初始化硬件設備,檢查系統外圍主要設備(CPU,內存,硬盤,顯卡i-o設備,鍵盤鼠標)  
2.確定啟動設備  
    -根據BIOS設置的啟動順序,檢測驅動器(硬盤,光盤,U盤,網絡)  
    --如果硬盤是啟動項,讀取硬盤第一個扇區(MBR,512字節)到內存  
    ---控制區轉給MBR中的Boot loader  
(3)、MBR 1.執行MBR中Bootloader  
2.MBR由主引導程序,硬盤分區表DPT和有效硬盤標書(55aa,標識是MBR分區)  
3.MBR的BOOt loader含有grub的stage1階段  

POST:Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、串並行接口、鍵盤等硬件情況的檢測(主板自帶的程序功能)  
ROM:BIOS,Basic Input and Output System,保存著有關計算機系統最重要的基本輸入輸出程序,系統信息設置、開機加電自檢程序和系統啟動自舉程序等  
RAM:CMOS互補金屬氧化物半導體,保存各項參數的設定  
按次序查找引導設備,第一個有引導程序的設備為本次啟動設備  

bootloader: 引導加載器,引導程序(MBR引導)  
windows: ntloader,僅是啟動OS  
 Linux:功能豐富,提供菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,並把系統控制權移交給內核  
    LILO:LInux LOader | 早期的版本啟動程序  
    GRUB: GRand Unified Bootloader |centos6 0.97 centos7 2.02  
    GRUB 0.X: GRUB Legacy, GRUB2  

二、GRUB啟動引導階段

(1)stage1 包含在MBR的前446字節,但內容不足夠起到完整的識別(分區文件系統加載程序等)  
(2)stage1_5 在MBR分區後面,能識別啟動分區文件系統是1和2直接的橋梁  
(3)stage2 解析/boot/grub裏的grub.conf,顯示操作系統啟動菜單,加載內核文件到內存,通過/boot/initrd開頭文件建立虛擬DAM disk虛擬文件系統轉交給內核  

三、內核引導階段

探測可識別到的所有硬件設備  
加載硬件驅動程序(借助於ramdisk加載驅動)  
以只讀方式掛載根文件系統(grub.conf grub.cfg裏的root=)  
運行用戶空間的第一個應用程序:/sbin/init 用init裏面的進程文件初始化,第二次重新掛載  

四、系統初始化階段

(1)、 讀取/etc/inittab 獲取用戶級別  

(2)、讀取/etc/rc.sysinit初始化系統  
        測試與載入內存設備/proc及usb設備、/sys  
        掛載/etc/fstab定義的文件系統  
        加載核心的相關設置,按/etc/sysctl.conf文件設定的內核參數的值(/proc/sys/)   
        將啟動相關信息加載到/var/log/dmesg文件中  

(3)、加載系統服務  
        /etc/rc/rc#.d 根據運行級別啟動對應/etc/rc/rc#.d目錄下的服務,K開機關閉S開機開啟centos6 chkconfig centos7 systemctl  
        /etc/local 加載用戶自定義服務 一般可以將自己編譯的服務放在裏面  

五、啟動終端
默認執行/sbin/mingetty打開的6個文本終端
驗證登陸
1./etc/nologin(可能沒有)有則在內的普通用戶不可登陸,(usermod -s /sbin/nologin,可能能使用系統資源,/bin/false 則所有服務都不可以用)
2./etc/usertty對文件做出附近訪問限制,不存在該文件沒有限制
3./etc/securetty 登記的終端才允許使用,沒有文件任何終端都可以登陸
4./etc/passwd & /etc/shadow 存放用戶信息、密碼、使用何種shell

    登陸成功  
    輸出 /var/log/lastlog 輸出最近一次登陸的信息  
        /var/spool/mail/用戶名 郵件存放的地方  
        /etc/profile、.bash_profile、.bash_login、.profile  

安裝圖形界面默認是5級別的圖形桌面  

centos6系統啟動和有關文件

Linux內核特點:  
支持模塊化:.ko(內核對象)如:文件系統,硬件驅動,網絡協議等  
支持內核模塊的動態裝載和卸載  
內核組成部分:  
核心文件:/boot/vmlinuz-VERSION-release{核心驅動文件}  
            vmlinux-2.6.32-754.e16.x86_64  
ramdisk:輔助的偽根系統  
CentOS 5 /boot/initrd-VERSION-release.img |虛擬磁盤  
CentOS 6,7 /boot/initramfs-VERSION-release.img(一些必要的輔助文件模塊驅動放在這裏-打包文件-虛擬文件系統)  
initramfs-2.6.32-754.el6.x86_64.img   
模塊文件:/lib/modules/VERSION-release(模塊化的驅動文件)   
/lib/modules/2.6.32-754.el6.x86_64/kernel/fs  
配置文件 /etc/ld.so.conf.d/kernel-2.6.32-754.el6.x86_64.conf  
locate ext3.ko 搜索模塊  

1、先識別系統核心文件放在/boot (不進入/就完成不了後續的行為)2、識別放驅動的文件(/lib/modules) 3、識別加載文件系統的驅動 4、在加載有文件系統的/  5、加載init進程  
此時ramdisk的initramfs-2.6.32-754.el6.x86_64.img文件就存放了加載文件系統的驅動  
文件是裝系統臨時生成的   

(我這是想看看這個文件有點啥:)
mv initramfs-2.6.32-754.el6.x86_64.img in.img.gz
gunzip initramfs-2.6.32-754.el6.x86_64.img.gz
file initramfs-2.6.32-754.el6.x86_64.img
cpio -id < initramfs-2.6.32-754.el6.x86_64.img(小型的/環境)
centos initrd(硬盤) centos6 initramfs(文件系統) 提高速度

CentOS 6,7 initramfs.img
工具程序:mkinitrd, dracut
ramdisk文件的制作
(1) mkinitrd命令:為當前正在使用的內核重新制作ramdisk文件(腳本調用dracut)
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut命令:為當前正在使用的內核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)

實驗:破壞此文件 掛光盤救援模式 光盤的isolinux目錄下有vmlinuz(不會放圖,不想放圖,順便也刪除了)
mkinitrd /boot/initranfs-uname -r.img uname -r生成boot下的ramfs文件(可能需要加上force)
mount /dev/sr0 /mnt
cp /mnt/isolinux/vmlinuz /boot/vmlinuz-uname -r
rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.e16.x86_64.rpm --root=/mnt/sysimage/(boot的父目錄) --force

內核初始化通過init進程 /etc/inittab 截取了比較重要的部分
17 # Default runlevel. The runlevels used are:
18 # 0 - halt (Do NOT set initdefault to this) 關機
19 # 1 - Single user mode
單用戶模式(root自動登錄), single, 維護模式 進入單用戶模式可以破解root口令
20 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
多用戶模式,啟動網絡功能,但不會啟動NFS;維護模式
21 # 3 - Full multiuser mode 文本界面
22 # 4 - unused 預留級別;可同3級別
23 # 5 - X11 圖形界面
24 # 6 - reboot (Do NOT set initdefault to this)
26 id:5:initdefault:
id:runlevel:action:process
id:是惟一標識該項的字符序列
runlevels: 定義了操作所使用的運行級別
action: 指定了要執行的特定操作
wait: 切換至此級別運行一次
respawn:此process終止,就重新啟動之
initdefault:設定默認運行級別;process省略
sysinit:設定系統初始化方式
process:定義了要執行的進程
實驗id:6:...設置成6無限重啟,在重啟的等待界面輸入任意鍵進入一個啟動界面選項
根據提示按鍵(在啟動前更改內核參數)輸入 a 可以輸入0-6啟動為什麽模式
進入單用戶更改用戶口令passwd

/etc/rc.d/rc.sysinit: 系統初始化腳本規定了N多的參數,多看看,
si::sysinit:/etc/rc.d/rc.sysinit---centos5裏面有這個的初始化腳本的設置

之前的0-6在/etc/rc.d/rc#.d 有一一對應的文件,選擇什麽則進入什麽
每個文件裏面都分只有兩個開頭的文件 K和S,K表式運行此模式時關閉此服務,S相反開啟
K: K##:##運行次序;數字越小,越先運行;數字越小的服務,通常為依賴到別的服務
S: S##:##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務
ntsysv命令更改當前運行模式的服務下一次開機的開啟和關閉(圖形操作)
ntsysv --level=5更改5模式的服務的開機狀態

既然這裏有服務肯定要學的,這麽好的格式,這麽重要的東西,我就不寫了

chkconfig --add testsrv /var/lock/subssy 觀察目錄,服務在這裏創建對應服務文件
chkconfig命令查看服務在所有級別的啟動或關閉設定情形
chkconfig [--list] [name] chkconfig --list
添加:SysV的服務腳本放置於/etc/rc.d/init.d (/etc/init.d)
chkconfig --add name 對應的創建name的rc.d裏面的服務文件
#!/bin/bash
#LLLL 表示初始在哪個級別下啟動,-表示都不啟動
*# chkconfig: LLLL nn nn
chkconfig --del name 刪除
修改指定的鏈接類型
chkconfig [--level levels] name <on|off|reset>
--level LLLL: 指定要設置的級別;省略時表示2345
chkconfig --level 345 atd on/off 定義下次開啟還是關閉
chkconfig atd on 默認更改2-5
yum install atd;sercvice atd start;chkconfig atd on;配置服務開啟
實驗,某個服務出錯
ctrl + alt + delete 重啟,任意鍵進入 進入單用戶模式 將出錯的服務關閉
chkconfig testsrv on (/etc/inittab這個文件centos5是比較完整的,最好了解下這個好)

寫到這裏想起來 6的/etc/inittab裏面註釋的說明很重要,說了很多信息

xinetd管理的服務(服務那麽多,這個就很實在了)
service 命令:手動管理服務
service 服務 start|stop|restart
service --status-all 列出所有服務的狀態
瞬態(Transient)服務(非獨立服務)被xinetd進程所管理(超級守護進程)
進入的請求首先被xinetd代理
配置文件:/etc/xinetd.conf、/etc/xinetd.d/<service>(裏面是代理的服務)
與libwrap.so文件鏈接
用chkconfig控制的服務:
示例:chkconfig tftp on
telnet非獨立服務被xinetd監控 安裝yum install telnet
lsof -i :23 centos7 systemctl 代替了xinetd
xinetd默認裝好的程序裏面的是off狀態,手動開啟
修改/etc/xinted.d/telnet 裏的disable=no 可以被激活狀態
service xinetd start ss -ntlp
telnet 192.168.60.149 ss -nt
chkconfig telnet of

註意:正常級別下,最後啟動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本
不便或不需寫為服務腳本放置於/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置於/etc/rc.d/rc.local文件中
東西過多,好好學吧

grub: GRand Unified Bootloader
grub 0.97: grub legacy(老的版本)
grub 2.x: grub2
grub legacy:
stage1: mbr (/boot/grup/stage1這裏有備份)
stage1_5: mbr之後的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統
stage2:磁盤分區(/boot/grub/)
grub安裝支持交互式命令方式
(1) grub-install
安裝grub stage1和stage1_5到/dev/DISK磁盤上,並復制GRUB相關文件到 DIR/boot目錄下
grub-install --root-directory=DIR /dev/DISK 修復MBR512

grup-install /dev/sda (grup.conf裏的圖片無法修復)
這裏/boot/grub/grub.conf文件很重要 其他文件上面的命令都可以恢復,這個問價要手寫
這是裏面內容,6結束
1 # grub.conf generated by anaconda
3 # Note that you do not have to rerun grub after making changes to this file
4 # NOTICE: You have a /boot partition. This means that
5 # all kernel and initrd paths are relative to /boot/, eg.
6 # root (hd0,0)
7 # kernel /vmlinuz-version ro root=/dev/sda2
8 # initrd /initrd-[generic-]version.img
9 #boot=/dev/sda
10 default=0
11 timeout=5
12 splashimage=(hd0,0)/grub/splash.xpm.gz
13 hiddenmenu
14 title CentOS 6 (2.6.32-754.el6.x86_64)
15 root (hd0,0)
16 kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=f279775c-e233-4f26-b7ab-118dfe992d 2c rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=a uto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
17 initrd /initramfs-2.6.32-754.el6.x86_64.img
裏面可以加 passwd 選項對單用戶模式起到保護作用
grub加密生成grub口令
grub-md5-crypt 裏面有salt(鹽)輸入相同口令出來的結果不一樣
grub-crypt


記--201904101400

Liunx 系統啟動和內核管理總結