LINUX 啟動流程
### 系統啟動流程
系統組成:內核+根分區文件系統
磁盤分區及相關文件
啟動分區? /boot
內核設計流派
單內核設計: 把所有功能集成于同一個程序
微內核設計:每種功能使用一個單獨的子系統實現
Windows,Solaris
linux 內核特點
支持模塊化:
支持模塊運行時動態裝載或者卸載
內核組成
核心文件: /boot/vminuz-VERSEION-Release
模塊文件: /lib/modules/
ramdisk: 臨時內存根文件
CentOS 系統的啟動流程
POST: '加電自檢'
ROM: CMOS
BIOS: Basic Input and output system
Boot Sequence:
按次序查找各引導設備、第一個有引導程序的設備、為本次啟動要用的設備
bootloader: 引導加載器、程序
Winodws: ntloader
Linux:
LILO: Linux Loader --- 無法加載大硬盤? (目前手機使用最多)
GRUB: Grand Uniform Bootloader
GRUB 0.X ---CentOS5/6? Grub Legay
GRUB 1.X ---CentOS7? (是一個完全重寫的程序 )? GRUB2
功能:提供一個菜單、允許用戶選擇要啟動的系統或不同的內核版本、把用戶選定的內核 裝載到RAM中的特定空間中、解壓,展開。而把整個系統的控制權移交給內核
MBR: Master Boot Record
512 bytes:
446 bytes: bootloader
64bytes: fat
2bytes: 55AA(表示有效、如果是非55AA則表示MBR無效)
GRUB:
bootloader : 1st stage
Pattion: filesystem driver 1.5 stage
disk partition: /boot/grub 2nd stage
加載Kernel
自身初始化:
探測可以識別到的所有硬件設備:
加載硬件驅動程序(會借且于randisk加載驅動)
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序
:/sbin/init
CentOS5 使用 Sysv init
配置文件:/etc/inittab
CentOS6 使用 Upstar
配置文件: /etc/inittab
重要配置在 /etc/init/*.conf
CentOS7 使用 Systemd
配置文件: /usr/lib/systemd/
/etc/systemd/system/
ramdisk
Linux 內核的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問
CentOS 5 : initrd
工具:mkinitrd
CentOS6/7 :initramfs
工具:dracut(mkinitrd)
系統初始化流程(內核級別),POST---> BootSequence(BIOS)---->bootloader(MBR) ---->Kernel(ramdisk)---> rootfs(readonly)----->/sbin/init()
/sbin/init
CentOS5 : Sysv init
運行級別:為了系統的運行或者維護等目的而設定的機制
0-6 : 7個級別
0: 關機
1: 單用戶模式(single user) root 賬號,不需要認證、維護模式
2: 多用戶模式,會啟動網絡功能、但不會啟動nfs,維護模式
3: 多用戶模式,完整功能模式、(不會啟動用圖形)
4: 預留級別、目前無特殊使用目的、功能和3級別一樣
5: 多用戶模式,完全功能模式、圖形界面
6: 重啟模式
~]# runlevel (查看目前運行的級別)
配置文件: /etc/inittab
每行定義一種action以及與之對應的process
id:runlevels:action:process
id:一個任務的標識符
runlevel: 運行級別或以寫多個、空表示所有級別
action: 在什么條件下啟動此任務
process: 具體的任務是
action
wait: 等待切換至此余男所在的級別時執行一次
respawn: 一旦任務終止、就自動重啟
initdefault: 設定默認運行級別、此時process省略
sysinit: 系統初始化方式、此處一身孕為指定/etc/rc.d/rc.sysinit腳本
示例:
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
L:0:wait:/etc/rc.d/rc 3
意味著去啟動或者關閉/etc/rc.d/rc3.d/目錄下服務腳本所控制服務
K*: 要停止的服務 K##*,優先級、數字越小、越是優先關閉,依賴的服務先關閉、而后關閉被依賴的
S*: 要啟動的服務 S##*,優先級、數字越小、與關閉的順序相反
系統初始化腳本:/etc/rc.d/rc.sysinit
1: 設置主機名
2:設置歡迎信息
3:激活udev和selinux
4: 掛載/etc/fstab文件中定義的所有文件系統
5:檢測根文件系統、并以讀寫文件重新掛載根文件系統
6:設置系統時鐘
7:根據/etc/sysctl.conf文件來設置內核參數
8: 激活lvm及軟raid設備
9: 激活swap設置
10: 加載額外設備的驅動程序
11:清理操作
用戶空間啟動流程:(/sbin/init(/etc/inittab))
設置默認運行級別 ---> 運行系統初始化腳本 、完成系統初始化 ---> 關閉對應級別下需要停止的服務,啟動對應級別下需要開開啟的服務 ---> 設置登陸終端 ---> 啟動圖形終端
### Grub
如果識別設備
(hd#,#)
hd# : 磁盤編號
#: 分區編號
grub的命令行接口
help: 獲取幫助
find: 查找文件
root (hd#,#): 定義根設備
kernel /PATH/TO/Kernel_file: 設定本次啟動時用到的內核文件
initrd /PATH/TO/INITRAMFS_FILE: 設定為選定的內核 提供的額外的文件的randisk
boot: 引導啟動選擇的內核
配置文件 /boot/grub/grub.conf
配置項:
default=#: 設定默認啟動的菜單藏在
timeout=#: 指定菜單等待的選擇時長
splashimge=(hd#,#)/PATH/TO/XPM_PIC_FILE: 指明菜單背景圖片文件路徑
hiddenmenu:隱藏菜單
passwdord [--md5] STRING:菜單編輯認證
title TITLE: 定義菜單項”標題“
root (hd#,#): grub查找stage2 及kernel文件所在設備分區;為grub的根
kernel /PATH/TO/VMLINUX_FIEL? [Patterns] : 啟動的內核
initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件
password [--md5] STRING:啟動選定的內核或操作系統時進行誰
~]#grub-md5-crypt 密碼生成(md5)
進入單用戶模式
1: 編輯grub菜單(e命令)
2: 在選定的kernel后、附加
1,s,S,single
3: 在kernel所在行、鍵入'b'命令
如何安裝grub
~]# grub-install --root-direcotry=ROOT? /dev/DISK
方案二
~]# grub
grub> root(hd#,#)
grub> setup(hd#)
### 流程
POST --> bootloader ---> kernel ---> rootfs ---> switchroot ---> /sbin/init
內核信息查看
uname
-r : release號
-n : hostname
lsmod
顯示的內核來自于/proc/model
modinfo
show info about a linux kernel module
-F field: 只顯示指定字段信息
-n :只顯示文本
modprobe
模塊裝載
modprobe -r module_name? ---remove
modprobe module_name
depmod
模塊生成依賴
insmod
install module
insmod [filename] []
rmmod
remove module
ramdisk 文件管理
mkinitrd
dracut
~]#mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
--with=
內核信息輸出的文件系統
/proc: 內核狀態和統計信息的輸出接口、同時還提供一個配置接口/proc/sys
參數:
只讀:信息輸出 /proc/#/*
可寫:配置 /proc/sys/
命令:
sysctl 命令 ---> 專用于查看或者設定/proc/sys目錄中的值
sysctl [options] [variable [=value]]
查看
~]# sysctl -a
~]# sysctl variable
修改
~]# sysctl -w variable=value
echo 命令
查看
~]# cat /proc/sys/PATH/TO/SOMEFILE
修改
~]# echo "value" /proc/sys/PATH/TO
配置文件
/etc/sysctl.conf? /etc/sysctl.d/*.conf
永久有效
立即生效? sysctl -p key:value
核心參數:
net.ipv4.ip_forward: 核心轉發
vm.drop_cache :手動回收 buffer
kernel.hostname: 主機名
net.ipv4.icmp_echo_ignore_all: 忽略所有ping
/sys/
sysfs: 輸出內核各硬件設備的相關屬性信息
也有內核對硬件特性可設置的信息
udev: 通過讀取/sys目錄下的硬件設備信息按需為各硬件設備 創建文件、:udev是用戶 空間程序
kernel Linux
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。