天天看點

Linux運維 第二階段 (十)啟動管理

啟動管理:

1、 POST(power on selftesting)-->BIOS(boot sequence)-->bootloader(MBR)->kernel(initramfs,root fs)-->init(/sbin/init,redhat6是upstart另一版本的init,ubuntu開發,并行啟動程序,d-bus配置event-driven事件驅動,而傳統風格redhat5是串行啟動程序),/etc/inittab,/etc/init/*.conf)

/boot/vmlinuz-VERSION(核心)

/lib/modules/VERSION/*(核心子產品.ko,裝載子產品insmod、modprobe)

2.6核心之前(例如2.4、2.5奇數表示測試版,偶數表示穩定版);2.6核心之後(分成兩條線,一部分2.6.17-->2.6.18.rc1-->.rc2—>.rc3(release candidate發行候選),另一部分2.6.17-->2.6.17.1-->.2-->.3)

2、核心設計風格:

單核心(linux,所有功能靠一個程序,工作邏輯簡單,lwp(line weight process));

微核心(windows,solaris,有子系統,需要用時調用子系統,支援線程)。

3、  核心初始化:硬體探測;裝載驅動(可能會從initramfs檔案中裝載驅動子產品);以隻讀方式挂載根檔案系統rootfs;啟動使用者空間中的第一個程序init

4、redhat5中/etc/inittab檔案:id:RUNLEVEL:action:process(例如:id:3:initdefault:、si::sysinit:/etc/rc.d/rc.sysinit)

id(辨別);

RUNLEVEL(在哪個級别運作此行);

action(在什麼情況下執行此行,initdefault表示設定預設運作級别,sysinit表示系統初始化,wait表示等待級别切換至此級别時執行(可能會執行多次),ctrlaltdel,powerfail有UPS電源才有意義,powerokwait,respawn表示一旦程式終止會重新啟動(6個虛拟終端及進入5級别時啟動圖形界面#mingetty  tty1也可手動執行));

process(要運作的程式)。

/etc/inittab檔案的任務(redhat5):

設定預設運作級别;

運作系統初始化腳本;

運作指定運作級别對應目錄下的腳本(/etc/rc.d/init.d/*、/etc/rc.d/rc#.d/*);

設定ctrl+alt+del組合鍵的動作;

定義UPS電源在故障|恢複時的動作;

啟動虛拟終端(2345級别);

啟動圖形終端(僅5級别);

5、#runlevel(outputprevious and current runlevel,檢視上一次和目前運作級别)

#who -r(--runlevel,print current runlevel)

#uname -a(--all,print all information)

#uname -r(--kernel-release)

6、#file  /etc/rc.d/rc.sysinit(Bourne-Againshell script text executable)

#wc -l  /etc/rc.d/rc.sysinit(668行,系統初始化腳本完成的任務如下,至關重要)

激活udev和selinux;

根據/etc/sysctl.conf檔案,設定核心參數;

設定實時時鐘;

裝載鍵盤映射;

啟用交換分區;

設定主機名;

根檔案系統檢測,并以讀寫方式重新挂載;

激活RAID和LVM裝置;

啟用磁盤配額;

檢查并挂載其它FS(/etc/fstab);

清理過期的鎖和PID檔案。

7、#ls  /etc/rc3.d/{K##,S##}(關閉或啟動的優先次序,數字越小,優先被標明,先關閉以K開頭的檔案再開啟S開頭的檔案)

#ls /etc/rc.d/init.d/(服務類腳本:sysv(/etc/rc.d/init.d/下的所有檔案,start|stop|restart|status最起碼有這四個參數,另reload|configtest))

腳本内容中靠兩行來實作管理系統服務的(#chkconfig和#description),如下:

# chkconfig: RUNLEVELS  SS  KK(頂格必須有井号,其中RUNLEVELS預設運作級别,在哪些級别下啟動,-表示沒有級别,預設建立為S*開頭的連結,除此之外的級别預設建立為K開頭的連結,SS與KK的和為99)

# description:(用于說明此腳本的簡單功能,\可續行,最多不要超過80個字元)

例如:

#vim /etc/rc.d/init.d/test

#!/bin/bash

#

# chkconfig: 2345  85  14

#description: Test service

case  $1  in

   start)

   echo "service is running..."

   ;; 

   stop)

   echo "service is stop..."

   restart)

   *) 

   echo "unknow."

esac

#chmod 755  /etc/rc.d/init.d/test

#chkconfig --list  [SERVICE_NAME](檢視所有獨立守護程序相關服務,也可指定檢視某服務)

#chkconfig --add|--del  SERVICE_NAME(建立或移除連結檔案,K開頭或S開頭的檔案)

#chkconfig --add  test

#chkconfig --list  test

#chkconfig [--level  RUNLEVELS]  SERVICE_NAME on|off(若不指定級别,預設為2345)

#chkconfig --level  35  test on

#/etc/init.d/test  start

#/etc/init.d/test  restart

#service test  restart

8、使用者空間通路,監測核心的方式:可在僞檔案系統/proc、/sys下修改核心特性(/sys/下某些檔案可寫,/proc/sys/下的大多數檔案可寫)

設定核心參數值的方式:

方式一:#echo  VALUE  > /proc/sys/TO/SOMEFILE

方式二:#sysctl  -w  kernel.FILENAME=”VALUE”( configurekernel parameters at runtime,/proc/sys/kernel/下的檔案,注意/proc/sys下的路徑用點隔開)

以上方式可立即生效但不能永久有效

例1:

#free -m

#echo 1  >  /proc/sys/vm/drop_caches(清空緩存)

例2:

#sysctl -w  vm.drop_caches=”1”

配置檔案:/etc/sysctl.conf(修改此檔案能永久有效,但無法立即生效)

#vim /etc/sysctl.conf

net.ipv4.ip_forward = 0改為1

#sysctl -p(Load in sysctl settings from the file specified or /etc/sysctl.conf,執行此句可立即生效)

#sysctl -a(顯示所有核心參數值,688項,并非每個都能改)

9、核心子產品管理:

#lsmod(program to show thestatus of modules in the Linux Kernel,列出子產品)

#modinfo MOD_NAME(program to show information about a Linux Kernel module)

#modprobe MOD_NAME(裝載子產品,指定子產品名)

#insmod /PATH/TO/MODULE_FILE(裝載子產品,需指定路徑)

#modprobe -r  MOD_NAME(--remove解除安裝子產品)

#rmmod MOD_NAME(解除安裝子產品)

#depmod /PATH/TO/MODULES_DIR(program to generate modules.dep and map files生成子產品依賴表)

注:核心中的功能除了核心功能之外,在編譯時大多功能都有三種選擇:不使用此功能;編譯成核心子產品;編譯進核心

10、boot loader(在MBR中):

LILO(linux loader,不支援>8G分區,應用于嵌入式系統中)

GRUB(grand unified bootloader,stage1(MBR),stage1.5(常見的不同類型的FS),stage2(/boot/grub))

#rpm -q  grub

#cat /etc/grub.conf(此檔案連結到/boot/grub/grub.conf)

default=0(設定預設啟動的title編号,從0開始)

timeout=5(等待使用者選擇的逾時時長,機關秒)

splashimage=(hd0,0)/grub/splash.xpm.gz(grub的背景圖檔)

hiddenmenu(隐藏菜單)

password --md5  加密的字元串(有此句開機編輯grub菜單需輸入密碼,如設定密碼為redhat生成的加密字元串#openssl  passwd  -1 -salt  12345678  redhat)

title Red Hat Enterprise Linux(2.6.32-358.el6.x86_64)(核心标題或OS名稱,字元串,可自由修改)

 root  (hd0,0)(核心檔案所在的裝置,對grub而言,所有硬碟類型均為hd)

  kernel/vmlinuz-2.6.32-358.el6.x86_64 ro……(核心檔案路徑及傳送給核心的參數,#cat  /proc/cmdline發起程序的指令)

  initrd/initramfs-2.6.32-358.el6.x86_64.img(完整的linux系統的檔案路徑,注意/boot單獨分區與不單獨分區路徑是不同的)

#dd if=/dev/zero  of=/dev/sda  bs=400 count=1(模拟損壞grub,注意bs不要超過446否則會損壞分區表)

#sync

修複步驟:

用CD光牒進入修複模式rescue installed system

#grub

>root (hd0,0)

>setup (hd0)

>quit

重新開機即可

制作grub啟動圖檔:

#yum -y  install  gimp

#gimp &(在圖形界面下打開此軟體)

image-->scale image(大小調整為640*480,僅支援14色,否則不會正常顯示,将圖檔儲存為xpm格式)

#gzip -9  linux.xpm(最大限度壓縮圖檔為linux.xpm.gz格式,并放至/boot/grub/下)

#vim /etc/grub.conf(更改配置檔案中圖檔路徑)

splashimage=(hd0,0)/grub/linux.xpm.gz

制作一塊虛拟磁盤,使得可在建立的虛拟機上啟動:

在一有系統的正常的虛拟機上建立一塊虛拟磁盤,注意store virtual disk as a single file,浏覽儲存至其它路徑(本例添加的是IDE類型)

#fdisk /dev/sda(sda1(20M),sda2(512M))

#partx /dev/sda

#mke2fs -j  /dev/sda1

#mke2fs -j  /dev/sda2

#mkdir /mnt/{boot,sysroot}

#mount /dev/sda1  /mnt/boot

#mount /dev/sda2  /mnt/sysroot

#ls /mnt/boot

#grub-install  --root-directory=/mnt  /dev/sda(install GRUB on yourdrive,/mnt是boot的父目錄,會自動查找)

#sync;sync

#ls /mnt/boot/grub

#vim /mnt/boot/grub/grub.conf

default=0

timeout=5

title mylinux

 root  (hd0,0)

 kernel  /vmlinuz

 initrd  /initramfs

suspend挂起這台正常的虛拟機,建立一虛拟機,将此例建立的那塊虛拟盤作為新虛拟機的唯一盤,啟動看能否正常引導

若grub配置檔案破壞後啟動系統,操作如下:

>find

>root (hd#,N)

>kernel /PATH/TO/KERNEL_FILE

>initrd /PATH/TO/INITRD_FILE

>boot(嘗試啟動系統)

以上是學習《馬哥網絡視訊》做的筆記。

一、1、啟動流程:

         》加載BIOS的硬體資訊進行自我測試,并依據BIOS設定取得第一個可啟動的裝置;

         》讀取每一個啟動裝置的MBR,加載MBR中的BOOTLOADER(grub或spfdisk);

         》依據BOOTLOADER的設定加載kernel,kernel會再進行系統檢測,并采用kernel檢測到的硬體資訊,同時kernel會通過加載動态子產品的形式加載硬體驅動;

         》核心啟動系統的第一個程序/sbin/init;

         》程序/sbin/init調用/etc/init/rcS.conf,再通過這個配置檔案調用/etc/rc.d/rc.sysinit,進而進行系統初始化及軟體執行的操作環境;

         》/etc/init/rcS.conf調用/etc/inittab,進而确定系統預設運作級别,接着/etc/inittab調用/etc/init.rc.conf繼而調用并執行/etc/rc.d/rc腳本檔案并傳入運作級别參數;

         》/etc/rc.d/rc确認傳入的運作級别,運作相應的運作級别目錄/etc/rc[0-6].d/中的腳本,進而依據設定好的優先級别依次啟動和關閉;

         》最後執行/etc/rc.d/rc.local中的程式,設定系統啟動就運作的工作;

         》若是字元界面就已啟動完畢,若圖形界面調用x-windows接口。

         2、MBR位于硬碟的0磁道、0柱面、1扇區,主要記錄BOOTLOADER啟動引導程式和分區表,其中啟動引導程式占446byte,分區表占64byte,另2byte作結束标記,是以分區表共64byte,每個分區要占16byte,僅能劃分4個主分區。

         BOOTLOADER的作用:最主要功能加載作業系統核心;提供菜單,來選擇啟動哪個作業系統;調用其它的BOOTLOADER,這是多系統啟動的關鍵,注意windows的bootloader不能調用linux的bootloader。

         3、常見的USB、SATA、SCSI等硬碟裝置驅動,特殊檔案系統LVM、RAID等的驅動,都以子產品形式儲存在/lib/modules/下;使用initramfs虛拟檔案系統解決作業系統安裝在SCSI硬碟上或采用LVM的檔案系統的問題。

         4、#runlevel      (檢視系統運作級别,0:關機;1:single單使用者模式,用于系統修複;2:不完全的指令行模式,不含NFS服務;3:完全的指令行模式,标準字元界面;4:系統保留;5:圖形模式;6:重新開機

         #init    0|1|2|3|5|6    (切換系統運作級别

         5、grub:支援更多的檔案系統;grub的主程式可直接在檔案系統中查找核心檔案;系統啟動時利用grub的互動界面編輯和修改啟動選項;可動态修改grub的配置檔案,重新啟動即生效,而不用重新安裝grub。

         》grub的主程式分三個階段來執行:

stage1:執行主程式(主程式位于bootloader中)用來啟動stage1.5和stage2;

stage1.5:識别不同檔案系統,它位于MBR之後的32K的空間中,這一段硬碟空間是空白無用的,而且是沒有檔案系統的,是以stage1能直接讀取stage1.5,進而能識别不能的檔案系統;

stage2:加載grub的配置檔案(/boot/grub/grub.conf),然後根據配置檔案中的定義,加載kernel和initramfs,繼而kernel接管啟動過程,繼續自檢加載硬體子產品。

》系統中沒grub,手工安裝步驟:

#grub-install  --root-directory=/tdisk  /dev/sdb1

#vi  /boot/grub/gurb.conf

title  centos tdisk

root (hd1,0)

chainloader  +1      (使用目前分區的啟動扇區啟動系統

grub>root(hd0,0)     (設定grub的主目錄,這裡隻能是(hd0,0),因為核心和檔案系統安裝在/dev/sda1中

grub>find  /boot/grub/stage1

grub>find  /grub/stage1

grub>find  vmlinuz-2.6.32-279.3l6.i686

grub>set  (hd1,0)     (在tdisk分區的啟動扇區安裝grub

grub>quit

注:#grub-install  選項   裝置檔案名

          --root-directory=DIR        (DIR是實際目錄,手工指定grub相關檔案的安裝目錄

》MBR中的grub被覆寫,需重新安裝grub

CD光牒修複模式:

sh-4.1#grub

grub>root  (hd0,0)

grub>setup (hd0,0)

》grub加密

#grub-md5-crypt      (輸兩次密碼生成加密字串

#vi  /boot/grub/grub.conf

password  --md5  此處放加密字串   (必須要将加密字串放在timeout與splashimage之間,此項僅在開機啟動編輯grub時生效,有此項可以正常啟動進入系統

splashimage=……

title  centos (2.6……)

         lock    (在title字段下一行加lock代表鎖死,必須輸入正确的密碼才能正常啟動

三、核心子產品管理

         核心子產品儲存位置:/lib/modules/$(uname  -r)/kernel/

         depmod指令會掃描系統中所有的核心子產品,然後把結果放入modules.dep檔案,後續的子產品安裝和删除都依賴這個檔案中的内容,如子產品所在位置的絕對路徑,子產品的依賴性。

#depmod  -a|-A|-n

-a          掃描所有子產品

-A          掃描新子產品,才更新modules.dep

-n          僅輸出到螢幕,不寫入modules.dep

#lsmod     (核心子產品檢視

#modprobe  選項  子產品名

-l          列出所有子產品

-f          強制加載子產品

-r          删除子產品

例:#depmod  -a

#modprobe  vfat

#lsmod |grep  vfat

#modprobe  -r vfat

四、系統修複模式:

         1、單使用者模式:遺忘root密碼;修改系統預設運作級别。

         2、CD光牒修複模式:多系統并存,grub被覆寫;重要系統檔案丢失,導緻系統無法啟動。

         #chroot  /mnt/sysimage        (CD光牒模式下預設根目錄是CD光牒的模拟根目錄,系統根目錄被當作外來裝置放在/mnt/sysimage

本文轉自 chaijowin 51CTO部落格,原文連結:http://blog.51cto.com/jowin/1651809,如需轉載請自行聯系原作者

繼續閱讀