Linux內核是由單內核和支持動態裝卸載功能化模塊(.ko: kernel object)組成,所有的模塊都必須依託與內核才能運行,並且所有的模塊和內核版本對應使用,不能跨版本使用.
Linux內核 內核的功能:
進程管理:task_struct, scheduler 分配進程的CPU及內存資源使用
內存管理:內存分配管理
I/O管理:中斷及中斷處理
文件系統:ext3, ext4, reiserfs, xfs
驅動程序:驅動硬件設備
安全相關: SELinux
通用軟件,平臺類的軟件
一, Linux系統的初始化流程:POST --> BIOS (Boot Sequence) --> MBR(bootloader) --> GRUB(bootloader (stage1: mbr; stage2: grub目錄中)) -->Kernel (CentOS5: initrd, CentOS6: initramfs) --> /sbin/init (CentOS5:/etc/inittab, CentOS6: /etc/inittab, /etc/init/*.conf)
POST:ROM(開機自檢)+RAM
BIOS: Boot Sequence
MBR: 存儲於0磁道總共512字節大小的引導文件.其中 446字節的bootloader引導加載器,64字節設備分區表,2字節5A效驗
GRUB: initrd或initramfs獨立於內核的一個根文件系統,幫助內核初始化,掛載根.在安裝時生成基礎硬件信息.
kernel文件:基本磁盤分區
/sbin/init在redhat和centos中內核啓動以後由init做爲所有用戶進程的父進程,負責管理用戶空間的進程.所以init的PID爲1,可執行文件位於/sbin/init
/etc/inittab 啓動配置文件
/etc/rc.d/rc.sysinit腳本 啓動
/lib/modules/ 內核模塊
二,GRUB: GRand Unified Bootloader.Redhat6使用的一種BooTLoader,MBR中的前 446 個字節,它的作用是引導啓動內核。
1,GRUB程序的組成,位於文件/boot/grub/,主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5組成。
1st stage: 位於MBR中,爲了引導2nd stage
1.5 stage: 位於boot基本磁盤分區中,爲識別內核文件所在的文件系統提供文件系統識別擴展
2nd stage: 位於boot基本磁盤分區中,GRUB的引導程序 配置文件grub.conf
2,Grub的功能:
(1)選擇要啓動的內核或系統;能隱藏選擇界面
(2)提供交互式接口 e: 編輯模式 a:傳遞參數 c:grub命令行模式 p:輸入密碼,設置了密碼纔會出現該選項
編輯模式:b:啓動引導 e:選擇編輯的項 c:命令行模式 o:新建在上方一行 O:下方新建一行 d:刪除選擇的行
(3)提供基於密碼的保護,密碼保護的兩種模式
單獨保護啓用內核映像使用密碼;
定義在相應的全局段title上使用密碼進入編輯模式
3,grub.conf:配置文件的定義
default=0 #指定默認啓動的內核或OS; timeout=5 #等待用戶選擇要啓動的內核或OS的時長,單位爲秒; splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz #指定使用的背景圖片 hiddenmenu #隱藏菜單 password --md5 *** #說明設置進入編輯模式密碼爲MD5加密 title CentOS (2.6.32-431.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg_jt-lv_root nomodeset rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_jt/lv_root rd_LVM_LV=vg_jt/lv_swap KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-431.el6.x86_64.img
title: 操作系統或內核的標題.在title前加入password字段則對進入編輯模式加密碼,在title後加入password則只對啓動系統映象加密碼
root: 設定內核文件所在的分區爲grub的根(不是操作系統的根)
kernel: 定義要使用的內核文件,ro標識開始定義內核的根及相關quiet爲結束標識,可附加傳遞給內核的啓動參數,
initrd: 指定爲內核提供額外驅動等功能的ram disk或ram fs文件
三, init相關配置和功能 /etc/inittab:
CentOS5: 每一行定義一個操作
CentOS6: upstart 腳本
1,配置文件: 每行定義一種操作:id:5:initdefault:
1,id: 操作的ID 2,runlevels: 在哪些級別下執行此操作 3,action: 動作常用的有initdefault,sysinit,wait,等 initdefault: 設置默認運行級別,無需定義操作 sysinit:指定系統初始化腳本 si::sysinit:/etc/rc.d/rc.sysinit (id:si 所有級別 動作爲sysinit 操作爲:/etc/rc.d/rc.sysinit) wait: 等待系統切換至此級別時運行一次; ctrlaltdel: 定義組合鍵被按下時要運行的命令; respawn: 當指定操作進程被關閉時立即再啓動一次; tty1:2345:respawn:/sbin/mingetty tty1 4,process: 操作
2,init要完成的任務:
(1)設定默認運行級別
(2)指定系統運行的初始化腳本
(3)啓動指定級別下的要啓動的服務,並關閉需要停止的服務
/etc/rc.d/ 腳本文件內有被註釋的chkconfig -** ** 定義啓動順序會被chkconfig命令讀取. /etc/rc.d/rcN.d (0-6)內S##代表啓動腳本,K##關閉腳本.在chkconfig 裏查看服務對應級別的開啓和關閉 rc0.d代表0級別的啓動服務連接文件
rc1.d代表1級別的啓動服務連接文件
rc2.d代表2級別的啓動服務連接文件
rc3.d代表3級別的啓動服務連接文件
rc4.d代表4級別的啓動服務連接文件
rc5.d代表5級別的啓動服務連接文件
rc6.d代表6級別的啓動服務連接文件
運行級別: 0-6: 7個級別
0:關機
1: 單用戶模式, 直接以root用戶登錄(不用輸入root密碼)
2:多用戶模式,不支持NFS文件系統
3:完全多用戶模式,文本模式
4:預留級別
5:完全多用戶模式,圖形模式
6:重啓 /etc/init.d/
(4)定義CtrlAltDel組合鍵的動作
(5)初始化終端:
終端:對應的是設備
/dev/tty#, /dev/ttyS#, /dev/console, /dev/pts/#
調用登錄入口:login-->/etc/issue
啓動圖形終端:
X-Window, 桌面管理器
(6)系統初始化腳本/etc/rc.d/rc.sysinit
(7)設置主機名
(8)打印文本歡迎信息
(9)激活SELinux和udev(探測裝載額外硬件設備)
(10)激活swap
(11)掛載/etc/fstab定義的本地文件系統
(12)檢測根文件系統並對其以讀寫方式重新掛載
(13)設置系統時鐘
(14)裝載鍵盤映射
(15)根據/etc/sysctl.conf設置內核參數
(16)激活RAID和LVM設備
(17)清理操作
四,啓動故障修復
1,在日常使用中可能會出現忘記root用戶密碼的情況,在系統啓動級別中1級別是可以不用輸入密碼進入系統.就可以利用這個特性去修改root密碼
(1)在系統尚未啓動按↑↓鍵進入GRUB編輯模式修改啓動級別
init的級別1的表示方式:1, s, single, S
單用戶模式幾乎不會啓動任何服務,且不需要用戶登錄;但是會執行/etc/rc.d/rc.sysinit腳本;
如是連/etc/rc.d/rc.sysinit文件也不加載,則傳遞 emergency
(2)回車到GRUB選擇界面按B保存修改並啓動
(3)進入系統修改root密碼
(4)修改密碼以後不需要重啓,使用init命令切換運行級別即可:
# init [0-6]
查看運行級別:
# runlevel
# who -r
2,grub配置丟失bootloader並未損壞的情況,在grub中添加原配置文件信息
(1)在系統尚未啓動按↑↓鍵進入GRUB選擇C進入grub命令行模式
(2)設置系統引導必須的root,kernel,initrd信息
grub配置丟失後在grub中添加原配置文件信息 grub> root (hd0,0) grub> kernel /vmlinuz-2.6.32-431.el6.x86_64(grub中原配置文件信息,tab鍵可以找到的文件) ro root=/dev/vg0/root quiet grub> initrd /initramfs-2.6.32-431.el6.x86_64.img(initrd通常爲cpio歸檔,並使用gzip壓縮;通常以.img作爲文件名後綴;,tab鍵可以找到的文件) grub> boot
3,grub程序損壞丟失,grub的安裝:
(1)進入安裝模式選擇rescue installed system(救援已安裝系統)
(2)/mnt/sysp_w_picpath 修復光盤在硬盤上檢測到的根並掛載到這個目錄
(3)chroot /mnt/sysp_w_picpath 切換到這個需要修復的根系統
(4)第一種方式:
# grub grub> root (hd#,#) grub> setup (hd#) grub> quit
第二種方式:
# grub-install --root-directory=/ /dev/sda
指定根目錄 指定磁盤硬件
五, 根據自己的需求製作一個簡單的可啓動的Linux,:
1、給將要製作的目標磁盤分區掛載到宿主機上:/dev/sdb1, /dev/sdb2
/dev/sdb1 掛載至 /mnt/boot #bootloader不能識別lvm,xfs等高級文件系統
/dev/sdb2 掛載至 /mnt/sysroot #掛載內核系統根文件系統
2、安裝grub至目標磁盤
# grub-install --root-directory=/mnt /dev/sdb
3、複製內核和initrd文件
# cp /boot/vmlinuz-VERSION /mnt/boot/vmlinuz
# cp /boot/initramfs-VERSION.img /mnt/boot/initramfs.img
4、創建目標主機的根文件系統
# mkdir -pv /mnt/sysroot/{etc/rc.d, usr, var, proc, sys, dev, lib, lib64, bin, sbin, boot, srv, mnt, media, home, root}
5,利用腳本接着去移植bash等程序至目標主機的根文件系統;
6、爲grub提供配置文件最基礎的title,root,kernel,initrd信息
# vim /mnt/boot/grub/grub.conf default=0 timeout=5 title MageEdu Little Linux root (hd0,0) kernel /vmlinuz ro root=/dev/sda2 quiet selinux=0 init=/bin/bash initrd /initramfs.img