系統與內核管理
1.Linux組成
Linux: kernel+rootfs
kernel: 進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能
rootfs:程序和glibc
庫:函數集合, function, 調用接口(頭文件負責描述)
過程調用:procedure,無返回值
函數調用:function
程序:二進制執行文件
內核設計流派:
單內核(monolithic kernel):Linux?? 把所有功能集成于同一個程序
微內核(micro kernel):Windows, Solaris?? 每種功能使用一個單獨子系統實現
2.內核
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
3.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控制主機
4.啟動流程詳解
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(第1.5階段)
secondary boot loader :2nd stage(第二階段),分區文件
kernel:
自身初始化:
探測可識別到的所有硬件設備
加載硬件驅動程序(借助于ramdisk加載驅動)
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序:/sbin/init
ramdisk:
內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問,并加載相應 的硬件驅動 ramdisk –> ramfs 提高速度
CentOS 5: initrd
工具程序:mkinitrd
CentOS 6,7: initramfs
工具程序:mkinitrd, dracut (用來重新生成initramfs-2.6.32-696.el6.x86_64.img文件)
使用方法:mkinitrd /boot/initramfs-`uname -r`.img `uname -r`
系統初始化:
POST –> BootSequence (BIOS) –> Bootloader(MBR) –> kernel(ramdisk) –> rootfs(只讀) –> init(systemd)
實驗:誤刪除了initramfs-2.6.32-696.el6(7).x86_64.img文件,解決方法
①未重啟機器:
mkinitrd /boot/initramfs-`uname -r`.img `uname -r`
②已重啟機器,導致機器已無法啟動
啟動時錯誤界面:
解決方法:
esc鍵(虛擬機為此鍵)——>cd-room driver——>rescue installed system——>開啟一個shell——>chroot /mnt/sysimage/ (切根)——>mkinitrd /boot/initramfs-`uname -r`.img `uname -r`——>sync——>exit——>選擇reboot
實驗:誤破壞了內核文件vmlinuz-3.10.0-693.el6(7).x86_64,解決方法
啟動時錯誤界面:
解決方法:
①機器已重啟,造成無法啟動
進入救援模式——>將光驅掛載上,并插入CentOS安裝光盤——>
cp?? /run/install/repo/isolinux/vmlinuz?? /mnt/sysimage/boot/vmlinuz-`uname -r`
注:光盤的掛載點以df顯示為準
——>sync——>exit
②機器未重啟
將光驅掛載上,并插入CentOS安裝光盤——>
cp?? /run/install/repo/isolinux/vmlinuz?? /mnt/sysimage/boot/vmlinuz-`uname -r`
注:光盤的掛載點以df顯示為準
ramdisk管理
ramdisk文件的制作:
(1) mkinitrd命令
為當前正在使用的內核重新制作ramdisk文件
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut命令?? 為當前正在使用的內核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)
5.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
實驗:忘記root密碼,如何破解(CentOS 5(6)版本)
重啟系統——>選擇啟動菜單界面,按a鍵——>輸入1,進入單用戶模式——>passwd鍵入新口令
注:只能在機器面前實現(單用戶模式是沒有網絡的)
init初始化
init讀取其初始化文件:/etc/inittab
初始運行級別(RUN LEVEL)
系統初始化腳本
對應運行級別的腳本目錄
捕獲某個關鍵字順序
定義UPS電源終端/恢復腳本
在虛擬控制臺生成getty
在運行級別5初始化X
CentOS 5的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
CentOS 6 /etc/inittab和相關文件
/etc/inittab
設置系統默認的運行級別
id:3:initdefault:
示例:
破解CentOS5和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
6./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/ ???#N:0-6任意級別 如:ls /etc/rc.d/rc5.d :查看5級別下開機啟動或禁止的程序
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
ntsysv命令 :用來更改某一程序開機啟動或禁止啟動
用法:ntsysv –level=3 更改3級別下開機啟動或禁止的程序
ntsysv –level=5 更改5級別下開機啟動或禁止的程序
……
chkconfig命令(比ntsysv命令更便捷)
chkconfig命令
查看服務在所有級別的啟動或關閉設定情形:
chkconfig [–list] [name]
示例:
chkconfig –list atd
添加:
SysV的服務腳本放置于/etc/rc.d/init.d (/etc/init.d)
chkconfig –add name
#!/bin/bash
#LLLL 表示初始在哪個級別下啟動,-表示都不啟動
# chkconfig: LLLL nn nn
示例:將atd程序在3、5級別下設置為禁止啟動
chkconfig –level 35 atd off
刪除:
①chkconfig –del name
②rm -f /etc/init.d/name (如果這個服務腳本 不想保留的情況下)
修改指定的鏈接類型
chkconfig [–level levels] name <on|off|reset>
–level LLLL: 指定要設置的級別;省略時表示2345
7.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
注:①yum install telnet-server (服務器端)?? (客戶端為yum install telnet)
②telnet必須為開啟狀態:chkconfig telnet on
③service xinetd start
注意:正常級別下,最后啟動一個服務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在指定運行級別腳本后運行
可以根據情況,進行自定義修改
注:建議將3鍵(Ctrl+alt+del)重啟功能注釋掉
CentOS 5: /etc/inittab 下,找到注釋掉
CentOS 6: /etc/init/control-alt-delete.conf 下,找到注釋掉
1:2345:respawn:/usr/sbin/mingetty tty1 ???#respawn : 再生功能
2:2345:respawn:/usr/sbin/mingetty tty2
…
6:2345:respawn:/usr/sbin/mingetty tty6
mingetty會自動調用login程序
x:5:respawn:/etc/X11/prefdm -nodaemon
8.啟動過程(總結)
總結:/sbin/init –> (/etc/inittab) –> 設置默認運行級別 –> 運行系統初始 腳本、完成系統初始化 –> (關閉對應下需要關閉的服務)啟動需要啟動服務 -> 設置登錄終端
CentOS 6 init程序為: upstart, 其配置文件: /etc/inittab, /etc/init/*.conf,配置文件的語法 遵循 upstart配置文件語 法格式,和CentOS5不同
10.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#,#) ?#hd表示硬盤(#,#)代表第#塊硬盤,第#個分區 root:這里的root是/boot的意思
如:(hd0,0):第一塊硬盤的第一個分區
grub> setup (hd#)
實驗:stage1階段mbr被破壞,解決方法
系統未重啟情況下:
grub-install /dev/sda
系統已重啟情況下:
啟動時錯誤界面:
①進入救援模式,開啟shell
②chroot /mnt/sysimage
③grub-install /dev/sda
④sync
⑤exit
配置文件:/boot/grub/grub.conf <– /etc/grub.conf
stage2及內核等通常放置于一個基本磁盤分區
功用:
(1) 提供啟動菜單、并提供交互式接口
a:內核參數
e: 編輯模式,用于編輯菜單
c: 命令模式,交互式接口
(2) 加載用戶選擇的內核或操作系統
允許傳遞參數給內核
可隱藏啟動菜單
(3) 為菜單提供了保護機制
為編輯啟動菜單進行認證
為啟用內核或操作系統進行認證
注:可以在/etc/grub.conf配置文件中輸入password(空格)后面輸入密碼,使必須使用密碼才能進入單用戶模式更改密碼,設置密碼后,重啟系統,選擇菜單界面已經沒有了a選項,這時需要使用p選項,會提示輸入密碼,輸入正確密碼后,界面重新出現a選項,即可進入單用戶更改密碼。
另注:配置文件里設置的密碼要通過加密實現,命令:grub-md5-crypt,將生成的加密密碼粘貼至配置文件中
或:grub-crypt 加密算法,配置文件中加密聲明應為 –encrypted
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/99078