系統啟動和內核管理
Linux組成
Linux:kerne+rootfs(應用程序)
kernel:進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能
roots:程序和glibc
函數:相當于命令的集合
庫:函數集合,function,調用接口(頭文件負責描述)
過程調用:procedure,無返回值
函數調用:function
程序:二進制執行文件
內核設計:
單內核(monolithic kernel):Linux
把所有功能集成于一個同一個程序
微內核(micro kernel):Windows,Solaris
每種功能使用一個單獨子系統實現
內核
Linux內核特點:
支持模塊化:.ko(內核對象)
如:文件系統,硬件驅動,網絡協議等
支持內核模塊的自動化的裝載和卸載
組成部分:
核心文件:/boot/vmlinuz-VERSION-release(存放著最重要的一些文件)
ramdisk:輔助的偽文件系統
Centos5;/boot/initrd-VERSION-release.img
Centos6,7:/boot/initramfs-VERSION-release.img
模塊文件:/lib/modules/VERSION-release(大部分功能模塊)
/lib/modules(存放著大部分的驅動)
Centos6啟動過程
POST加電啟動檢查→MBR引導→GRUB→加載內核
啟動流程:
POST:Power-On-Self-Test
ROM(只讀):BIOS,保存著有關計算機系統重要的基本輸入輸出程序,加電就會運行這些程序,系統信息設置,開機加電自檢程序等
RAM(此處不代表內存):斷電也不會丟失RAM中的數據,因為主板有電池,在BIOS中調整的順序會保存在此處
按次序查找引導設備,第一個有引導程序的設備為本次啟動設備(可在BIOS中調整)
bootloader:引導加載器(用來啟動計算機的一段兒程序),引導程序
windows:ntloader,僅僅是啟動OS,只可以啟動Windows
Linux:早期用LILO(LInux LOader只能用來引導Linux)來引導Linux,grub引導Linux也可以引導Windows
GRUB:GRand Unified Bootloader
GRUB 0.X:老版本
MBR:
446:bootloader(grub的第一階段),64:分區表,2:55AA
GRUB:
primary boot loader:1st stage(grub的第一階段)
1.5 stage(用來讀取boot分區的文件系統驅動)兩者都是以二進制方式存儲
讀取文件系統驅動,用initramfs-VERSION-release中的文件來讀取文件系統驅動;
Centos5 ramdisk:模擬了一塊兒磁盤,還需將模擬的磁盤轉換為文件系統再轉換為磁盤
Centos6 ramfs:直接給了一個文件系統,通過文件系統訪問磁盤
系統初始化
POST–>BootSequence(BIOS)–>Bootloader(MBR)–>kernel(ramdisk)–>rootfs(只讀)–>init(systemd)
ramdisk文件制作:
mkinitrd “文件名(最好是原名)`uname -r`.img” `uname -r`(為當前正在使用的內核重新制作ramdisk文件)
init程序的類型
SysV:init,Centos 5之前
配置文件/etc/inittab
Upstart:init,Centos6
配置文件:/etc/inittab, /etc/init/*.conf
Systemd:systemd, CentOS 7
配置文件:/usr/lib/systemd/system
/etc/systemd/system
開機啟動流程:
post
mbr boot loader grub
/boot/vmlinxz
/boot/initramfs.
/sbin/init
/etc/inittab
/etc/rcN.d/ –> /etc/init.d/xxx
/etc/rc.d/rc.local
login
模式(在/etc/inittab中調整開機模式):
0:關機
1:單用戶模式
2:多用戶模式,不具有NFS功能
3:多用戶模式(跟2幾乎相同,并且是字符界面)
4:未使用,暫時沒用上
5:圖形界面
6:重啟
默認級別:3,5
切換級別:init #
查看級別:runlevel
Centos 5的配置文件:/etc/inittab
ntsysv查看開機啟動的程序
chkconfig –list “程序名稱”
–add 添加到開機啟動的服務
“程序名稱” on 開機啟動
–del “程序名稱” 刪除服務開機啟動
(1)默認模式定義
(2)系統初始化腳本
(3)運行模式對應的腳本
/etc/rc#.d/下存放了S開頭的一系列啟動文件,數值越小,啟動優先級最高;
同時存放了K開頭的一系列停止文件,數值越小,關閉優先級越高
/etc/rc#.d/S99local作用是寫開機要做的事情
/etc/rc.d/rc.local中放的內容是隨著服務器開機啟動而啟動
xinetd管理的服務
瞬態:服務被xinetd進程所管理
進入的請求首先被xinetd代理
配置文件:/etc/xinetd.conf、/etc/xinetd.d/<servicename>
當/boot目錄下的vmlinux文件丟失的時候,可以使用光盤救援模式將光盤中isolinux下的vmlinux改名并復制到/boot目錄下即可
cp /mnt/cdrom/isolinux/vmlinux /mnt/sysimage/vmlinux-`uname -r`即可
當/boot目錄丟失的時候進入救援模式執行
rpm -ivh /mnt/cdrom/Package/kernel-xxxxxx –force –root=/mnt/sysimage/
grub legacy
grub
stage1:mbr
stage1_5(1.5階段):mbr之后的扇區
grub.conf(grub的配置文件)
/etc/grub.conf中指明了根分區的位置,找到了根文件之后就可以找到/下面的一系列進程,然后進行啟動
安裝grub
(1)grub-install
安裝grub stage1和stage1_5到/dev/DISK磁盤上,并復制GRUB相關文件到DIR/boot目錄下
grub-install [–root-directory=DIR](指定grub安裝的位置的父目錄) /dev/DISK 440個字節的修復方法 grub-install /dev/sda
(2)grub(交互式命令,hd寫的是boot掛載點的第幾塊硬盤,hd0,0就是第一塊硬盤的第一個分區)
root(hd#,#)
setup(hd#)
破解root口令(必須要在服務器面前)
(1)啟動過程中出現選擇菜單后輸入”a”在后方輸入1進入單用戶模式
(2)進入后passwd root設置新密碼
(3)在/etc/grub.conf文件中追加”password fang”則是將進入單用戶模式加為明文密碼
grub-md5-crypt可生成隨機md5密碼,將生成的隨機密碼復制到/etc/grub.conf中password后面則是將進入單用戶模式加密
grub-crypt生成隨機密碼,將生成的隨機密碼復制到/etc/grub.conf中的password -encrypted 后方
啟動口令:/etc/grub.conf啟動的菜單下面添加password -encrypted “生成的隨機密碼”可將啟動也添加上密碼
配置文件:/boot/grub/grub.conf
default=#:設定默認啟動的菜單項;
timeout=#:指定菜單項等待選項選擇的時長
splashimage(hd#,#)/PATH/XPM_FILE:菜單背景圖片
password:啟動菜單編輯設定密碼
hiddenmenu:隱藏菜單
title:定義菜單項標題
root(hd#,#):查找stage2及kernel文件所在設備分區;
kernel:為grub的根kernel “內核包位置”
initrd “內核匹配的ramfs文件”
/proc目錄:
存放一系列進程文件
參數:只讀:輸出信息
/proc/sys
sysctl -a:所有正在生效的設置
sysctl -w:修改指定的某一行數據,修改后的數據會存放在內存中,重啟后會還原
sysctl -p:讀取/etc/sysctl.conf文件,是修改生效,當文件中不存在某行的時候,就會與內村中定義的同步
常用參數:
net.ipv4.forward:管理路由功能是否開啟0為開啟,1為關閉
net.ipv4.icmp_echo_ignore_all:不允許別的主機ping自身
vm.drop_caches:將此值改為1則是釋放緩存內存
/sys目錄:
存放一系列與硬件相關的主要內容
編譯安裝內核
內核組成部分:
kernel,內核核心,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE
kernel object:內核對象,一般放置于/lib/modules/VERSION-RELEASE
[ ]:Not set(沒有啟用)
[M]:m(以模塊方式存在的,并為獨立文件)
[*]:y(存放到vmlinuz中了,不為獨立文件了)
內核版本
運行中的內核:
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 查看xfs模塊是否運行,并且查看詳細信息
modprobe命令(自動解決依賴關系):
裝載或卸載內核模塊
modprobe
-r:卸載模塊,并且模塊之間是存在依賴性的,驅動消失后,硬件也就消失了
配置文件:/etc/modprobe.conf或者是/etc/modprobe.d/*.conf
depmod命令:
設置模塊之間的依賴關系
裝載或卸載內核模塊:
insmod命令:指定模塊文件,不會自動解決依賴模塊
insmod [ filename ] [ module options ]
insmod `modinfo -n exportfs`(將反撇號中的執行結果用insomod加載)
rmmod命令:卸載模塊
rmmod [ modulename ]
編譯內核
1 從www.kernel.org下載要編譯的內核文件
2 安裝Development Tools組
3 .config:準備文本配置文件,可以將系統上已有的config-3.10.0-693.el7.x86_64文件修改為.config文件編輯
4 make menuconfig:配置內核選項,此命令是一個菜單,菜單中”—>”說明后方還有子菜單
[ ]:Not set(沒有啟用)
[M]:m(以模塊方式存在的,并為獨立文件)
[*]:y(存放到vmlinuz中了,不為獨立文件了)
5 make [ -j #]( -j 指定CPU核數)會在/lib下生成一個編譯的版本的目錄
6 make modules_install:安裝模塊,相當于安裝了lib/modules目錄
7 make install:安裝內核相關文件
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/98421