您好,登錄后才能下訂單哦!
系統啟動和內核管理
CentOS 5和6的啟動流程
服務管理
Grub管理
自制Linux
啟動排錯
編譯安裝內核
Linux組成
Linux: kernel+rootfs
kernel:
進程管理、
內存管理、
網絡管理、
驅動程序、
文件系統、
安全功能
rootfs:程序和glibc
庫:函數集合, function, 調用接口(頭文件負責描述)
過程調用:procedure,無返回值
函數調用:function 程序:二進制執行文件
內核設計流派:
單內核(monolithic kernel):Linux 把所有功能集成于同一個程序
微內核(micro kernel):Windows, Solaris 每種功能使用一個單獨子系統實現
Linux內核特點: 支持模塊化:.ko(內核對象)
如:文件系統,硬件驅動,網絡協議等 支持內核模塊的動態裝載和卸載
組成部分:
核心文件:/boot/vmlinuz-VERSION-release ramdisk:
輔助的偽根系統
CentOS 5: /boot/initrd-VERSION-release.img
CentOS6,7: /boot/initramfs-VERSION-release.img
模塊文件:/lib/modules/VERSION-release
centos6啟動流程
1.加載BIOS的硬件信息,獲取第一個啟動設備。
2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息
3.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅 動所有的硬件設備。
4.核型執行init程序并獲取運行信息。
5.Init執行/etc/rc.d/rc.sysinit文件。
6.啟動核心的外掛模塊(/etc/modprobe.conf)。
7.Init執行運行的各個批處理文件(scripts).
8.Init執行/etc/rc.d/rc.local.
9.執行/bin/login程序,等待用戶登錄。
10.登錄之后開始以Shell控制主機。
啟動流程
POST:Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部 分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、串并行接 口、鍵盤、CD-ROM光驅等硬件情況的檢測。 ROM:BIOS,Basic Input and Output System,保存著有關計 算機系統最重要的基本輸入輸出程序,系統信息設置、開機加電自檢程序和 系統啟動自舉程序等。 RAM:CMOS互補金屬氧化物半導體,保存各項參數的設定 按次序查找引導設備,第一個有引導程序的設備為本次啟動設備
bootloader: 引導加載器,引導程序
windows: ntloader,僅是啟動OS
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
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
ramdisk:
內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件 訪問
ramdisk --> ramfs 提高速度
CentOS 5: initrd, 工具程序:mkinitrd
CentOS 6: initramfs, 工具程序:mkinitrd, dracut
系統初始化: POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只讀) -> init(systemd)
/sbin/init CentOS 5
運行級別:為系統運行或維護等目的而設定;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
CentOS5的inittab文件
配置文件:/etc/inittab
每一行定義一種action以及與之對應的process
id:runlevel:action:process action:
wait: 切換至此級別運行一次;
respawn:此process終止,就重新啟動之
initdefault:設定默認運行級別;process省略
sysinit:設定系統初始化方式,此處一般為指定
/etc/rc.d/rc.sysinit
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1...
l6:6:wait:/etc/rc.d/rc 6
CentOS6 /etc/inittab和相關文件
/etc/inittab
設置系統默認的運行級別
id:3:initdefault:
/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) 清理操作
說明:rc N --> 意味著讀取/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命令
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
ntsysv命令
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
破解root口令
總結:/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.x: grub legacy
grub 1.x: grub2
grub legacy:
stage1: mbr
stage1_5: mbr之后的扇區,讓stage1中的bootloader 能識別stage2所在的分區上的文件系統
stage2:磁盤分區(/boot/grub/)
配置文件:/boot/grub/grub.conf <-- /etc/grub.conf stage2及內核等通常放置于一個基本磁盤分區
功用:
(1) 提供啟動菜單、并提供交互式接口
a:內核參數
e: 編輯模式,用于編輯菜單
c: 命令模式,交互式接口
(2) 加載用戶選擇的內核或操作系統
允許傳遞參數給內核
可隱藏啟動菜單
(3) 為菜單提供了保護機制
為編輯啟動菜單進行認證
為啟用內核或操作系統進行認證
識別硬盤設備:
(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=#:指定菜單項等待選項選擇的時長
splashp_w_picpath=(hd#,#)/PATH/TO/XPM_FILE:菜單背景圖片文件路徑
hiddenmenu:隱藏菜單 password [--md5] STRING: 啟動菜單編輯認證
title TITLE:定義菜單項“標題”, 可出現多次
root (hd#,#):grub查找stage2及kernel文件所在設備分區;為grub“根”
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的內核
initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件
password [--md5] STRING: 啟動選定的內核或操作系統時進行認證
grub加密
grub-md5-crypt命令
破解root口令:
啟動系統時,設置其運行級別1
進入單用戶模式:
(1) 編輯grub菜單(選定要編輯的title,而后使用e命令);
(2) 在選定的kernel后附加 1, s, S或single都可以;
(3) 在kernel所在行,鍵入“b”命令
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#)
自制linux系統
分區并創建文件系統
fdisk /dev/sdb
分兩個必要的分區
/dev/sdb1對應/boot /dev/sdb2對應根
/ mkfs.ext4 /dev/sdb1
掛載boot
mkdir /mnt/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.conf
kernel /vmlinuz-2.6.32-642.el6.x86_64
root=/dev/sda2 selinux=0 init=/bin/bash
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和相關庫文件
救援環境
在根文件系統無法使用時需要,如/bin/mount刪除
對系統沒有特殊要求
從光盤引導(boot.iso或者安裝光盤#1)
從USB盤(由boot.iso制作)引導
文件系統重組
Anaconda將會詢問是否應該掛載文件系統
/mnt/sysp_w_picpath/*
/mnt/stage2
$PATH包括硬盤的目錄
文件系統節點
提供系統特定的設備文件
mknod了解major/minor #’s
系統配置文件丟失修復
系統在引導期間,很重要的一個過程就是init進程讀取其配 置文件/etc/inittab,啟動系統基本服務程序及默認運行 級別的服務程序完成系統引導,如果/etc/inittab誤刪除 或修改錯誤,Linux將無法正常啟動。此時,只有通過救援 模式才可以解決此類問題。
有備份文件的回復方法
沒有備份文件的恢復辦法
有備份文件的恢復辦法: 進入救援模式,執行chroot命令后,如果有此文件 的備份(強烈建議系統中的重要數據目錄,如/etc 、/boot等要進行備份),直接將備份文件拷貝回 去,退出重啟即可。如果是配置文件修改錯誤,如 比較典型的/boot/grub/grub.conf及/etc/passwd 的文件修改錯誤,也可以直接修正恢復。假設有備 份文件/etc/inittab.bak,則在救援模式下執行:
sh-3.1# chroot /mnt/sysp_w_picpath
sh-3.1# cp /etc/inittab.bak /etc/inittab
沒有備份文件的恢復辦法 如果一些配置文件丟失或軟件誤刪除,且無備份,可以通過重新 安裝軟件包來恢復,首先查找到/etc/inittab屬于哪一個RPM包
# chroot /mnt/sysp_w_picpath
# rpm -qf /etc/inittab initscripts-9.03.49-1.el6.centos.x86_64
退出chroot模式:
# exit
掛載存放RPM包的安裝光盤(在救援模式下,光盤通常掛載在 /mnt/source目錄下):
# mount /dev/sr0 /mnt/source CentOS6系統的RPM包存放在光盤Package目錄下,另外,因 為要修復的硬盤系統的根目錄在/mnt/sysp_w_picpath下,需要使用-root選項指定其位置。覆蓋安裝/etc/inittab文件所在的RPM 包:
# rpm -ivh --replacepkgs | force /mnt/source/Packages/ initscripts-9.03.49-1.el6.centos.x86_64.rpm 其中的rpm命令選項“--replacepkgs”表示覆蓋安裝,執行完成 后,即已經恢復了此文件。
如果想只提取RPM包中的/etc/inittab文件進行恢復,可以在進 入救援模式后,執行命令:
# rpm2cpio /mnt/source/Packages/initscripts-9.03.491.el6.centos.x86_64.rpm| cpio -idv ./etc/inittab
# cp etc/inittab /mnt/sysp_w_picpath/etc 注意此命令執行時不能將文件直接恢復至/etc目錄,只能提取到 當前目錄下,且恢復的文件名稱所在路徑要寫完整的路徑。提取 文件成功后,將其復制到根分區所在的/mnt/sysp_w_picpath目錄下相 應位置即可
內核編譯
單內核體系設計、但充分借鑒了微內核設計體系的優點,為 內核引入模塊化機制。
內核組成部分:
kernel: 內核核心,一般為bzImage,通常在/boot目錄 下,名稱為vmlinuz-VERSION-RELEASE;
kernel object: 內核對象,一般放置于
/lib/modules/VERSION-RELEASE/
[ ]: N
[M]: M
[*]: Y
輔助文件:ramdisk
initrd
initramfs
內核版本
運行中的內核:
uname命令:
uname - print system information
uname [OPTION]...
-n: 顯示節點名稱;
-r: 顯示VERSION-RELEASE;
-a:顯示所有信息
內核模塊命令
lsmod命令: 顯示由核心已經裝載的內核模塊
顯示的內容來自于: /proc/modules文件
modinfo命令: 顯示模塊的詳細描述信息
modinfo [ -k kernel ] [ modulename|filename... ]
-n: 只顯示模塊文件路徑
-p: 顯示模塊參數
-a: author
-d: description
-l: license
lsmod |grep xfs;modinfo xfs
內核模塊管理
modprobe命令:
裝載或卸載內核模塊
modprobe [ -C config-file ] [ modulename ] [ module parame-ters... ]
配置文件:
/etc/modprobe.conf,
/etc/modprobe.d/*.conf
modprobe [ -r ] modulename...
depmod命令: 內核模塊依賴關系文件及系統信息映射文件的生成工具
裝載或卸載內核模塊:
insmod命令:指定模塊文件,不自動解決依賴模塊
insmod [ filename ] [ module options... ]
insmod `modinfo –n exportfs`
lnsmod `modinfo –n xfs`
rmmod
rmmod [ modulename ]
rmmod xfs
rmmod exportfs
/proc目錄
/proc目錄: 內核把自己內部狀態信息及統計信息,以及可配置參數通 過proc偽文件系統加以輸出 參數:只讀:輸出信息 可寫:可接受用戶指定“新值”來實現對內核某功 能或特性的配置
/proc/sys
(1) sysctl命令用于查看或設定此目錄中諸多參數
sysctl -w path.to.parameter=VALUE
sysctl -w kernel.hostname=mail.magedu.com
(2) echo命令通過重定向方式也可以修改大多數參數的值
echo "VALUE" > /proc/sys/path/to/parameter
echo “websrv” > /proc/sys/kernel/hostname
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。