1. 程式人生 > >Linux啟動和內核管理

Linux啟動和內核管理

linux grub

系統啟動和內核管理

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啟動和內核管理