開機流程
centos 5和6版本
開機流程
kernel==>rootfs(根文件系統)
首先內核啟動,然后加載根文件系統,然后啟動init(第一個文件系統)它負責所有的程序的啟動、管理、調用、刪除等(這一切是運行在用戶空間的)。
“`
kernel:進程管理
內存管理
網絡管理
驅動程序
文件系統
安全功能
rootfs:
glibc
“`
庫:從本質來說是函數的合集
庫文件是二進制程序,但是沒有執行入口,只能被別的程序調用
庫分為
(1)有返回值的 (2)沒有返回值
頭文件:表明了庫、函數的調用參數、個數、類型等等
LINUX內核的組成部分
核心文件
(1) /boot/vmlinuz-VERSION-release
內核模塊在()內核模塊文件名與內核版本必須同步
(2) /lib/moudles/VERSION-release
下面放著內核相關的元數據
(3)ramdisk(根切換的文件下方有詳細解釋)
5版本) /boot/initrd-VERSION-release.img
6版本) /boot/initramfs-VERSION-release.img
在開機時內核需要去尋找文件系統,文件系統在磁盤中,磁盤需要內核裝在模塊,模塊又在根,進而形成了一個死循環
所以需要有一個虛擬根文件系統掛載上磁盤模塊,掛上硬盤需要的文件系統。(根切換)
啟動流程:
1)加電自檢(POST):當你按下電源,主機自動檢查各種硬件是否存在并完好
ROM
CMOS:加電是能夠進行
BIOS:基本輸入輸出系統
當我們開機以后主機激活cpu,cpu會傳遞第一條指令(喚醒指令),然后會傳給某 ROM 空間中的特定地址,然后cpu會執行地址中的給定的自檢的指令完成自檢
2)boot Sequence(引導加載次序也就是BIOS):按次序查找各引導設備,找到第一個有操作系統(能夠讀取mbr引導)的方式就是本次啟動程序所用的設備
3)bootloader:引導加載器
GRUB:
(GRand Unified Bootloader)
LINUX的引導加載器(它也可以加載WIN)
以硬盤為例 是放在MBR中
bootloader:446字節
磁盤分區表 :64字節
55a : 2字節(記錄bootloader是否有效的)
提供一個菜單,允許用戶選擇要啟動的系統或不同版本的內核版本,把用戶選定的內核裝在到內存中特定空間中,解壓展開,之后將整個系統的控制權移交給內核
GRUB:
BootLoader:1階段,位于mbr中。主要目的是找到硬盤之上的第二階段
1.5階段,幫助grub識別硬盤上的文件系統
disk : 2階段 硬盤階段
4)kernel:
自身初始化:
探測可識別道德所有硬件設備;
加載硬件驅動程序
以只讀方式掛載根文件系統
進行用戶空間的第一個應用程序 /sbin.init
init程序類型
sysV風格:init
upstart風格:ubantu研發用于6版本
配置文件:/etc/inittab和/etc/init/*.conf
systemd:用于7版本紅帽研發
配置文件:/usr/lib/systemd/system和/etc/systemd/system 中
5)rootfs
6)swichroot
7)sbin/init
8)/etc/inittab,/etc/init/*.conf
9)設定默認運行級別
10)系統初始化腳本
11)關閉或開啟對應級別下的服務
內核的特性之一,利用緩沖和緩存用來加速對磁盤上的文件的訪問
總結:POST加電自檢—>bootSequence(BIOS)—>bootloader—->加載內核和(ramdisk文件)—->以只讀方式裝在根文件系統—->加載init
init
init級別:0:關機
1:單用戶模式(root用戶,無需登錄維護模式)
2:多用戶模式(會啟動網絡功能但不會啟動NFS)
3:多用戶模式(正常模式:默認文本界面,不會啟動圖形)
4:預留級別(也當3級別用)
5:多用戶模式(圖形界面)
6:重啟
默認級別 :3、5
查看級別 runlevel
who -r
切換級別 init
配置文件/etc/inittab
每一行對應著一個action以及與之對應的process
id:runlevel:action:process
action:
wait:運行到此級別才運行一次
resoawn:此process終止就重啟
initdefault:設定默認運行級別,process省略
sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit
運行制定級別下的指定服務
/etc/rc.d/rc0.d/
1.d/
2.d/
3.d/
4.d/
5.d/
6.d/
目錄下的文件是腳本鏈接文件有
K* stop (按順序0-99)
S* start
(按順序0-99)
這其中的鏈接文件的原文件都在/etc/rc.d/init.d/下
備注:K數字越小越依賴于別的服務
S數字越小越被別的服務依賴
管理工具:
chkconfig
–list :顯示每一個服務對應的級別是開機還是關閉(不加服務名稱表示顯示所有)
–level # 服務名 on/off
修改#級別下的某服務 開啟/關閉
(此類腳本中chlconfig行定義了K和S的級別 K越小S越大 反之也一樣)
添加 :把服務腳本放置于/etc/rc.d/init.d(文件下)
–add name
/etc/rc.d/init.d/NAME
#!/bin/bash
#
#chkconfig: LLLL nn nnn (
LLLL表示S的級別 ,nn表示S的數字 nnn表示K的數字)
先寫腳本文件,在添加
chkconfig –del Name
修改制定鏈接的類型
chkconfig –level LLLL (省略時2345)程序 ON|OFF
rc#.d/文件夾下有一個S99local
正常級別下,這是最后運行的一個腳本,他指向rc.d/rc.local中如果不便或者不需要寫成腳本的需要開啟的程序可以房子此文件夾下
開機之前想運行的命令直接寫到rc.d/rc.local
系統初始化要做的事情
1)設置主機名
2)設置歡迎信息
3)激活udev和selinux
4) 掛載/etc/fatab文件中定義的文件系統
5)檢測根文件系統,并以讀寫方式重新掛載根文件系統
6)設置系統時鐘
7)激活swap設備
8)根據/etc/sysctl.conf文件設置內核參數
9)激活lvm和software raid等設備
10)加載額外設備驅動操作
11)清理操作
總結
/sbin/init—->(/etc/inittab)—->設置默認運行級別—->運行初始化腳本,完成系統初始化—->關閉對應下需要關閉的服務,啟動需要啟動的服務—->設置登錄終端
6版本
init程序為upstart,
配置文件:
/etc/inittab
/etc/init/*.conf
GRUB詳解
1階段 :mbr
1.5階段:mbr中的山區中讓1階段中的bootloader能識別二階段上的文件系
統(提供文件系統驅動)
2階段 :存在于磁盤分區上
配置文件 /boot/grub/grub.conf <— /etc/grub.conf
2階段及內核通常會放置在一個基本分區中
功用:
(1)提供菜單、并提供交互式接口
e:編輯模式用于編輯菜單
c:命令模式,交互式接口
(2)加載用戶選擇的內核或者操作系統
允許傳遞參數給內核
可隱藏此菜單
(3)為菜單提供了保護機制
為編輯菜單進行認證
為啟用內核或操作系統進行認證
如何識別設備
(hd#,#):第幾塊磁盤的 第幾個分區
grub命令行接口:
help:獲取幫助列表
help KEYWord:某關鍵字的幫助信息
find (hd#,#)/FILENAME(支持TAB補全):查找文件
root (hd#,#) 把hd#,#設為根
kernel PATH/TO/FILE: 指明本次啟動時用的內核文件
例如:init=PATH/TO/INIT 或 selinux=0
initrd /PATH/TO/INITRAMFS_FILE:設定為選定的內核為輔助文件的ramdisk
boot:引導啟動選定的內核
手動在grub命令行接口啟動系統
1)root(hd0,0)
2)kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
3)initrd /initramfs-VERSION-RELEASE.img
4)boot
開機的菜單欄定義在/etc/grub.conf下
重要的有
1)default=#(菜單項)
2)timeout=#(等待用戶選擇的時長)
3)spalshimage=(hd#,#)/PAST/TO/SOMEFILE (指明菜單等待選項時長)
4)hiddenmenu:隱藏菜單
5)title TITLE
root (hd#,#)
kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
initrd /initramfs-VERSION-RELEASE.img
備注:可以再title上方行增加
password [–md5] STRING:菜單編輯認證
也可以在5)title下方增加表示啟動內核時認證
grub-md5-crypt 命令生成MD5 密碼
進入單用戶模式:
1)選定要編輯的title
輸入e
2)選定kernel那行
輸入1或S或s
3)光標定在kernel所在行
敲b鍵
安裝grub:
grub-install /dev/sda
刪除/boot文件
修復方法
1)進入救援模式
2)切根
3)安裝內核
4)grup-install /dev/sda
5)寫配置文件 grub.conf
lsmod命令:
查看當前內核加載了那些模塊模塊大小,被使用了多少次
顯示的文件內容來自于/proc/moudles文件
查看單獨模塊的詳細信息
modinfo
(modinfo可以不寫絕對路徑)
ldd CMD (完整文件路徑)
查看CMD依賴的庫文件
modprobe: 安裝或卸載內核模塊
-r MODNAME 移除模塊 modNAME 安裝模塊
-n 靜默模式
配置文件:/etc/modprobe.conf
/etc/modprobe.d/*.conf
#### /proc 目錄
內核把自己內部狀態信息以及統計信息,以及可配置參數通過proc偽文件系統輸出到終端
參數
只讀:輸出信息
可寫:可接受用戶指定的新值來實現對內核某功能或特性的配置文件 一般在 /proc/sys 下
用 echo “VAR” > PATH/FILE
或sysctl -w > PATH/FILE=”VAR”
修改
sysctl -a 讓配置文件生效
/sys/目錄
sysfs
是內核用來輸出硬件設備屬性信息的文件夾,有些參數是可以修改的,用于調整硬件的工作特性。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/98385