Linux之系統啓動和內核管理

系統啓動

常用命令:

runlevel
who -r
/etc/inittab:定義啓動級別
/etc/rc.d/init.d/NetworkManager 定義網絡管理程序的詳細信息
/etc/rc.d/rc.sysinit 系統初始化腳本
/etc/rc.d//rc[0-6].d/定義6個級別對應的服務程序開啓或關閉
/etc/rc.d/rc.local 開機最後一步要執行的腳本可以放到此文件中
自定義服務

chkconfig --list 查看定義服務程序詳情列表
testsrv需要放入/etc/rc.d/init.d/目錄下testsrv
內部定義

#!/bin/bash
chkconfig: 345 66(s-啓動) 44(k-關閉)
description: test service
echo ##########

ntsysv可以設置當前級別模式哪些進程啓動或不啓動,重啓生效。*爲開機啓動項。

chkconfig --add testsrv
chkconfig --del testsrv
chkconfig NetworkManager on|off 不加--level 默認設置2345

/boot/grub/grub.conf
grub-md5-crypt或者grub-crypt --md5
grub-crypt 默認採用sha512
grub-crypt --sha-256
主要項有
default=0
timeout=5
hiddenmenu
passwd --md5 $$$$$$$$$$$$$$$$$$$$$$$$$$加密後的密碼
passwd --encrypted ########################加密後密碼
title centos
kernel (hd0,0)/vmlinuz-2.6.32-754.el6.x86_64 root=UUID-xxxxx
initrd (hd0,0)/initramfs-xxxxxxxxxxx

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz 該文件爲啓動選項背景圖片,可以自行修改:(ImageMagick包,convert -resize 640*480 -colors 14 centos.jpg centos.xpm)
hiddenmenu
title CentOS 6 (2.6.32-754.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=a6d8689c-a3ec-415b-a2d2-7fb209c352c9 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-754.el6.x86_64.img

TIPS:

核心驅動文件在/boot/vmlinuz-3.10.0-957.el7.x86_64**內核
按需加載
/usr/lib/modules/3.10.0-957.el7.x86_64中驅動模塊
輔助的僞根系統
/boot/initramfs-3.10.0-957.el7.x86_64.img**(打包文件,內部放有內核掛載所需識別驅動模塊)
cpio -tv < initramfs-3.10.0-957.el7.x86_64.img 查看內部文件。

modinfo ext4:查看驅動模塊所在位置
lsmod:查看所有加載到內存的驅動模塊

模擬故障實驗1,initramfs-3.10.0-957.el7.x86_64.img僞根文件丟失

重啓後故障圖:
Linux之系統啓動和內核管理
方法1:進入光盤救援模式

chroot /mnt/sysimage切根
mkinitrd /boot/initramfs-`uname -r`.img `uname -r` --force(此項如果boot下沒有initramfs文件可不加)------重新生成僞根img文件
或者
dracut /boot/initramfs-$(uname -r).img $(uname -r)------重新生成僞根img文件
exit-------退出當前根
reboot--------重啓系統

模擬故障實驗2,vmlinuz-3.10.0-957.el7.x86_64內核文件丟失

重啓後故障圖:
Linux之系統啓動和內核管理
方法1:進入光盤救援模式

mount /dev/sr0 /mnt/sysimage/data
cp /mnt/sysimage/data/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz--$(uname -r)從光盤裏把內核文件拷貝到/原boot目錄下並加版本信息
reboot--------重啓系統

模擬故障實驗3,/etc/inittab裏,默認啓動級別錯誤定義到0或者1

Linux之系統啓動和內核管理
方法:在開機倒計時時,按任意鍵調出菜單,下面有提示,按a鍵進入內核模式,在後面補上啓動級別3,即可進入系統。進入系統後再重新修改/etc/inittab內默認啓動級別爲正常級別即可。

模擬故障實驗4,MBR裏前446字節被清空,grub,stag1被破壞,導致的無法啓動系統。(全部清空的話,沒有備份分區表無法恢復,切記)

Linux之系統啓動和內核管理
方法:進入光盤救援模式

chroot /mnt/sysimage切根
grub安裝
安裝grub:
(1) grub-install 此命令可用於修復/boot/grub/下的所有文件除了grub.conf和*.xmp.gz文件 但是如果使用grub-install修復後,再把除了grub.conf以外的所有文件拷貝走,重啓後將無法進入系統,需要進入救援模式切根再執行grub-install /dev/sda命令 操作完後多此執行sync,防止數據在內存中未寫入硬盤
安裝grub stage1和stage1_5到/dev/DISK磁盤上,並複製GRUB相關文件到 DIR/boot目錄下
grub-install --root-directory=DIR(boot的上級父目錄名稱) /dev/DISK
(2) grub
grub> root (hd#,#) 中間有空格
grub> setup (hd#)

模擬故障實驗5,MBR裏前446字節被清空,/boot目錄下被清空。

Linux之系統啓動和內核管理
方法:進入光盤救援模式

chroot /mnt/sysimage切根
grub-install /dev/sda
mount /dev/sr0 /mnt
cp /mnt/isolinux/vmlinuz /boot/vmlinuz-uname -r
dracut /boot/initramfs-uname -r.img uname -r
最後寫grub.cfg文件

default=0
timeout=5
hiddenmenu
title Centos 6
root (hd0,0)
kernel /vmlinuz-2.6.32-754.el6.x86_64 root=UUID=a6d8689c-a3ec-415b-a2d2-7fb209c352c9
initrd /initramfs-2.6.32-754.el6.x86_64.img

模擬故障實驗6,MBR裏前446字節被清空,/boot目錄下被清空。/etc/fstab文件被刪除。進行恢復(前提是/和/home還有swap都是邏輯卷創建的文件系統)

方法:進入救援模式
由於分區表沒有壞,所以先找分區,寫fstab文件
因爲所有文件系統都是邏輯卷創建的,默認邏輯卷沒有被激活
需要激活用(vgchange -ay
創建臨時根目錄,掛載邏輯卷/到臨時根目錄
然後寫fstab文件
需要重啓重讀fstab配置文件。
之後參照實驗5,或者安裝光盤裏的rpm -ivh /mnt/Package/kernel.... --nodeps --force
最後sync幾遍重啓

模擬故障實驗7,grub.conf文件內,initrd和 kernel上下行顛倒

Linux之系統啓動和內核管理
Linux之系統啓動和內核管理
啓動菜單出現後按e編輯菜單,因爲兩行上下顛倒,所以d刪除上面的一行,在剩下行上面o新創一行,然後e取編輯一下,輸入initrd /initramfs-xxxxxxx 回車,然後b啓動,以上修改爲臨時性修改。進入程序後再修改grub.conf文件。

模擬故障實驗8,開機啓動卡在某服務,排錯

方法:在開機倒計時時,按任意鍵調出菜單,下面有提示,按a鍵進入內核模式,在後面補上啓動級別1,進入單用戶維護模式。將啓動不了的服務臨時設置爲開機不啓動chkconfig testsrv off。然後reboot,開機後再想辦法解決。


模擬服務自己寫一個testsrv,實現service testsrv start|stop|status|restart

#!/bin/sh                                                                                                                          
#
#chkconfig: - 66 22
#description:testsvr
service=`basename $0`
. /etc/init.d/functions
start(){
    if [ -f /var/lock/subsys/$service ];then
        echo "$service has been started"
    else
        touch /var/lock/subsys/$service
        action "Starting $service"
    fi
}

stop(){
    if [ -f /var/lock/subsys/$service ];then
        rm -rf /var/lock/subsys/$service
        action "stopping $service"
    fi
}

status(){
    if [ -f /var/lock/subsys/$service ];then
        echo "$service is running"
    else
        echo "$service is stopped"   
    fi
}

case $1 in 
start)
    $1
    ;;
stop)
    $1
            ;;
restart)
    stop
    start
    ;;
status)
    $1
    ;;
*)
    echo "Usage service `basename $0`start|stop|status|restart "
esac                                                                                                                    

Centos6啓動流程
網址轉載流程圖
https://s4.51cto.com/wyfs02/M02/87/20/wKiom1fVBELjXsvaAAUkuL83t2Q304.jpg
Linux之系統啓動和內核管理

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控制主機

啓動流程

POST:Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、串並行接口、鍵盤等硬件情況的檢測

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

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