啟動管理:
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,如需轉載請自行聯系原作者