系統啓動、內核管理

CentOS6啓動流程

1.加載BIOS的硬件信息,獲取第一個啓動設備
2.讀取第一個啓動設備MBR的引導加載程序(grub)的啓動信息
3.加載核心操作系統的核心信息,核心開始解壓縮,並嘗試驅動所有的硬件設備
4.核心執行init程序,並獲取默認的運行信息
5.init程序執行/etc/rc.d/rc.sysinit文件
6.啓動核心的外掛模塊
7.init執行運行的各個批處理文件(scripts)
8.init執行/etc/rc.d/rc.local
9.執行/bin/login程序,等待用戶登錄
10.登錄之後開始以Shell控制主機


POST:Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、串並行接口、鍵盤等硬件情況的檢測
ROM:BIOS,Basic Input and Output System,保存着有關計算機系統最重要的基本輸入輸出程序,系統信息設置、開機加電自檢程序和系統啓動自舉程序等
RAM:CMOS互補金屬氧化物半導體,保存各項參數的設定
按次序查找引導設備,第一個有引導程序的設備爲本次啓動設備
bootloader: 引導加載器,引導程序
Linux:功能豐富,提供菜單,允許用戶選擇要啓動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,並把系統控制權移交給內核
LILO:Linux Loader
GRUB: GRand Unified Bootloader
GRUB 0.X: GRUB Legacy, GRUB2

MBR:第一個扇區
前446字節 bootloader
中間64字節 分區表
最後2字節 55AA
GRUB
primary boot loader : 1st stage,1.5 stage
secondary boot loader :2nd stage,分區文件
kernel
自身初始化:
探測可識別到的所有硬件設備
加載硬件驅動程序(藉助於ramdisk加載驅動)
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序:/sbin/init

內核
Linux內核特點:
支持模塊化:.ko(內核對象)
如:文件系統,硬件驅動,網絡協議等
支持內核模塊的動態裝載和卸載
內核組成部分:
核心文件:/boot/vmlinuz-VERSION-release
ramdisk:輔助的僞根系統
CentOS 5 /boot/initrd-VERSION-release.img
CentOS 6,7 /boot/initramfs-VERSION-release.img
模塊文件:/lib/modules/VERSION-release

ramdisk:
內核中的特性之一:使用緩衝和緩存來加速對磁盤上的文件訪問,並加載相應的硬件驅動
ramdisk --> ramfs 提高速度
CentOS 5 initrd.img
工具程序:mkinitrd
CentOS 6,7 initramfs.img
工具程序:mkinitrd, dracut
ramdisk管理
 ramdisk文件的製作:
(1) mkinitrd命令
爲當前正在使用的內核重新制作ramdisk文件
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut命令
爲當前正在使用的內核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)
系統初始化:
POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只讀) --> init(systemd)
init程序的類型:
SysV: init, CentOS 5之前
配置文件:/etc/inittab
Upstart: init,CentOS 6
配置文件:/etc/inittab, /etc/init/*.conf
Systemd:systemd, CentOS 7
配置文件:/usr/lib/systemd/system
/etc/systemd/system
/sbin/init CentOS6之前
運行級別:爲系統運行或維護等目的而設定;0-6:7個級別
0:關機
1:單用戶模式(root自動登錄), single, 維護模式
2:多用戶模式,啓動網絡功能,但不會啓動NFS;維護模式
3:多用戶模式,正常模式;文本界面
4:預留級別;可同3級別
5:多用戶模式,正常模式;圖形界面
6:重啓
默認級別:3, 5
切換級別:init #
查看級別:runlevel ; who -r
init初始化
init讀取其初始化文件:/etc/inittab
初始運行級別(RUN LEVEL)
系統初始化腳本
對應運行級別的腳本目錄
捕獲某個關鍵字順序
定義UPS電源終端/恢復腳本
在虛擬控制檯生成getty
在運行級別5初始化X
CentOS 5 的inittab文件
配置文件:/etc/inittab
每一行格式:
id:runlevel:action:process
id:是惟一標識該項的字符序列
runlevels: 定義了操作所使用的運行級別
action: 指定了要執行的特定操作
wait: 切換至此級別運行一次
respawn:此process終止,就重新啓動之
initdefault:設定默認運行級別;process省略
sysinit:設定系統初始化方式
process:定義了要執行的進程
示例:CentOS 5 的inittab文件
id:5:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down”
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled”
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
x:5:respawn:/etc/X11/prefdm -nodaemon
CentOS 6 /etc/inittab和相關文件
/etc/inittab
設置系統默認的運行級別
id:3:initdefault:
 示例:
破解CentOS 6 的root口令
/etc/init/control-alt-delete.conf
/etc/init/tty.conf
/etc/init/start-ttys.conf
/etc/init/rc.conf
/etc/init/prefdm.conf
/etc/rc.d/rc.sysinit: 系統初始化腳本
(1) 設置主機名
(2) 設置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統
(5) 檢測根文件系統,並以讀寫方式重新掛載根文件系統
(6) 設置系統時鐘
(7) 激活swap設備
(8) 根據/etc/sysctl.conf文件設置內核參數
(9) 激活lvm及software raid設備
(10) 加載額外設備的驅動程序
(11) 清理操作

說明:rcN --> 意味着讀取/etc/rc.d/rcN.d/
K*: K##*:##運行次序;數字越小,越先運行;數字越小的服務,通常爲依賴到別的服務
S*: S##*:##運行次序;數字越小,越先運行;數字越小的服務,通常爲被依賴到的服務
for srv in /etc/rc.d/rcN.d/K*; do
$srv stop
done
for srv in /etc/rc.d/rcN.d/S*; do
$srv start
done
chkconfig命令
ntsysv命令
chkconfig命令
查看服務在所有級別的啓動或關閉設定情形:
chkconfig [--list] [name]
添加:
SysV的服務腳本放置於/etc/rc.d/init.d (/etc/init.d)
chkconfig --add name
#!/bin/bash
#LLLL 表示初始在哪個級別下啓動,-表示都不啓動
# chkconfig: LLLL nn nn
刪除:
chkconfig --del name
修改指定的鏈接類型
chkconfig [--level levels] name <on|off|reset>
--level LLLL: 指定要設置的級別;省略時表示2345
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
注意:正常級別下,最後啓動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本
不便或不需寫爲服務腳本放置於/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置於/etc/rc.d/rc.local文件中
/etc/rc.d/rc.local在指定運行級別腳本後運行
可以根據情況,進行自定義修改
1:2345:respawn:/usr/sbin/mingetty tty1
2:2345:respawn:/usr/sbin/mingetty tty2
...
6:2345:respawn:/usr/sbin/mingetty tty6
mingetty會自動調用login程序
x:5:respawn:/etc/X11/prefdm -nodaemon
總結:/sbin/init --> (/etc/inittab) --> 設置默認運行級別 --> 運行系統初始腳本、完成系統初始化 --> (關閉對應下需要關閉的服務)啓動需要啓動服務 --> 設置登錄終端
CentOS 6 init程序爲: upstart, 其配置文件:
/etc/inittab, /etc/init/*.conf,配置文件的語法 遵循 upstart配置文件語法格式,和CentOS5不同
grub legacy
CentOS 6啓動流程:
POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 設定默認運行級別 --> 系統初始化腳本rc.sysinit --> 關閉或啓動對應級別的服務 --> 啓動終端
grub: GRand Unified Bootloader
grub 0.97: grub legacy
grub 2.x: grub2
grub legacy:
stage1: mbr
stage1_5: mbr之後的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統
stage2:磁盤分區(/boot/grub/)
grub安裝
安裝grub:
(1) grub-install
安裝grub stage1和stage1_5到/dev/DISK磁盤上,並複製GRUB相關文件到 DIR/boot目錄下
grub-install --root-directory=DIR /dev/DISK
(2) grub
grub> root (hd#,#)
grub> setup (hd#)
配置文件:/boot/grub/grub.conf <-- /etc/grub.conf
stage2及內核等通常放置於一個基本磁盤分區
功用:
(1) 提供啓動菜單、並提供交互式接口
a:內核參數
e: 編輯模式,用於編輯菜單
c: 命令模式,交互式接口
(2) 加載用戶選擇的內核或操作系統
允許傳遞參數給內核
可隱藏啓動菜單
(3) 爲菜單提供了保護機制
爲編輯啓動菜單進行認證
爲啓用內核或操作系統進行認證
grub的命令行接口
help: 獲取幫助列表
help KEYWORD: 詳細幫助信息
find (hd#,#)/PATH/TO/SOMEFILE:
root (hd#,#)
kernel /PATH/TO/KERNEL_FILE: 設定本次啓動時用到的內核文件;額外還可添加許多內核支持使用的cmdline參數
例如:max_loop=100 selinux=0 init=/path/to/init
initrd /PATH/TO/INITRAMFS_FILE: 設定爲選定的內核提供額外文件的ramdisk
boot: 引導啓動選定的內核
cat /proc/cmdline 內核參數
內核參數文檔:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt
識別硬盤設備
(hd#,#)
hd#: 磁盤編號,用數字表示;從0開始編號
#: 分區編號,用數字表示; 從0開始編號
(hd0,0) 第一塊硬盤,第一個分區
手動在grub命令行接口啓動系統
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
配置文件:/boot/grub/grub.conf
default=#: 設定默認啓動的菜單項;落單項(title)編號從0開始
timeout=#:指定菜單項等待選項選擇的時長
splashimage=(hd#,#)/PATH/XPM_FILE:菜單背景圖片文件路徑
password [--md5] STRING: 啓動菜單編輯認證
hiddenmenu:隱藏菜單
title TITLE:定義菜單項“標題”, 可出現多次
root (hd#,#):查找stage2及kernel文件所在設備分區;爲grub的根
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啓動的內核
initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件
password [--md5|--encrypted ] STRING: 啓動選定的內核或操作系統時進行認證
生成grub口令
grub-md5-crypt
grub-crypt
破解root口令:
啓動系統時,設置其運行級別1
進入單用戶模式:
(1) 編輯grub菜單(選定要編輯的title,而後使用a 或 e 命令)
(2) 在選定的kernel後附加
1, s, S,single 都可以
(3) 在kernel所在行,鍵入“b”命令
自制linux系統
分區並創建文件系統
fdisk /dev/sdb
分兩個必要的分區
/dev/sdb1對應/boot /dev/sdb2對應根 /
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2
掛載boot
mkdir /mnt/boot 子目錄必須爲boot
mount /dev/sdb1 /mnt/boot
安裝grub
grub-install --root-directory=/mnt /dev/sdb
恢復內核和initramfs文件
cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/
cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot
建立grub.conf
vim /mnt/boot/grub/grub.conf
title wanglinux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs-2.6.32-642.el6.x86_64.img
chroot /mnt/sysroot
創建一級目錄
mkdir /mnt/sysroot
mount /dev/sdb2 /mnt/sysroot
mkdir –pv /mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}
複製bash和相關庫文件
複製相關命令及相關庫文件
如:ifconfig,insmod,ping,mount,ls,cat,df,lsblk,blkid等
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章