Linux啓動和內核管理

系統啓動和內核管理

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:安裝內核相關文件

   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章