POST->BIOS->MBR->Kernel->initrd->/sbin/init
首先主板加电自检,之后选择启动次序,之后找到硬盘上的MBR,MBR中的BootLoader找到内核,并将内核和(initrd)中间件一并装入内存,内核配合中间件的驱动加载/sbin/init,中间件退出。(中间件:由于内核精简化,不能装载所有设备的驱动,而内核又要读取/sbin/init的分区,所以这时需要一个中间件来提供驱动程序来让内核去加载init。中间件和内核必须在一个分区。红帽5中中间件叫initrd,红帽6中中间件叫initramfs)(这到底对不对。。,不对的话请指点。。)
[root@bogon ~]# ls -l /boot total 19661 -rw-r--r--. 1 root root 97862 Aug 31 2010 config-2.6.32-71.el6.x86_64 drwxr-xr-x. 3 root root 1024 Mar 8 08:17 efi drwxr-xr-x. 2 root root 1024 Mar 8 08:21 grub -rw-r--r--. 1 root root 13831382 Mar 8 08:21 initramfs-2.6.32-71.el6.x86_64.img drwx------. 2 root root 12288 Mar 8 08:13 lost+found -rw-r--r--. 1 root root 160542 Aug 31 2010 symvers-2.6.32-71.el6.x86_64.gz -rw-r--r--. 1 root root 2226490 Aug 31 2010 System.map-2.6.32-71.el6.x86_64 -rwxr-xr-x. 1 root root 3791744 Aug 31 2010 vmlinuz-2.6.32-71.el6.x86_64
内核:vmlinuz-2.6.32-71.el6.x86_64
库文件:/lib/modules/2.6.32/
chroot 目录 /bin/ksh:更换根目录
ldd 二进制文件:显示二进制文件的共享库
BootLoader(MBR)
LILO:Linux loader
GRUB:GRand Unified BootLoader
Stage1:引导下一个
Stage1_5:
Stage2:/boot/grub/
grub:
[root@bogon /]# cat /boot/grub/grub.conf default=0 #设定默认启动的title编号,从0开始 timeout=5 #等待用户选择的超时时长,单位是秒 splashimage=(hd0,0)/grub/splash.xpm.gz #指定背景图片 hiddenmenu #隐藏菜单
password --md5 $1$RHX0m/$7y7NNuqn3cchnkvem8H5Y0 #进入grub时需要密码,可以使用grub-md5-crypt命令生成加密密码 title Red Hat Enterprise Linux (2.6.32-71.el6.x86_64) #内核标题,或操作系统名称,字符串可自由更改 root (hd0,0) #内核文件所在的设备,对grub而言,所有类型硬盘一律为hd,hd#,#代表第几块硬盘,对应的分区 kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=UUID=a8e066f8-73e8-452b-a326-100441cf93a9 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet #内核文件的路径,及传递给内核的参数 initrd /initramfs-2.6.32-71.el6.x86_64.img #ramdisk文件路径
修复grub
当MBR中前446字节损坏,需要修复grub时
1.没有重启的情况下
命令 grub
grub> root (hd0,0) 必须是对应的磁盘,对应的分区
grub> setup (hd0)
2.没有重启的情况下
命令 grub-install --root-directory=/到boot的父目录 /dev/哪块硬盘
[root@localhost ~]# grub-install --root-directory=/ /dev/sda Installation finished. No error reported. This is the contents of the device map //boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. # this device map was generated by anaconda (hd0) /dev/sda
3.grub.conf配置文件损坏重启情况下
开机后会进入grub模式
grub>find (hd0,0)/ 按tab键可以查看这个磁盘这个分区上的内容,假如找到引导项进行下一步
grub>root (hd0,0)
grub>kernel /vmlinuz 指定当前分区下的内核
grub>initrd /initrd
grub>boot
kernel
内核初始化过程:
1.设备探测
2.驱动初始化(从initramfs文件中装载驱动模块)
3.以只读方式挂载根文件系统
4.装载第一个进程init(PID=1)
用户空间访问监控内核的方式:/proc,/sys
设定内核参数值的方法(临时):
echo VALUE > /proc/sys/FILE
sysctl -w kernel.hostname=*** 不用指定/proc/sys这个目录,sysctl已经制定好,后面的路径用点就可以
设定内核参数值的方法(永久):
vim /etc/sysctl.conf 对应的更改参数
sysctl -p :让内核重新读取配置文件,更改完配置文件后可以立即生效
lsmod:查看内核模块
modprobe 模块名称:装载模块
modprobe -r 模块名称:卸载模块
modinfo 模块名称:查看模块具体信息
insmod 模块路径:装载模块,需要填写模块路径
rmmod 模块名称:卸载模块
/sbin/init:
init的配置文件在/etc/inittab,每行都是由id:runlevels:action:process组成
[root@bogon ~]# cat /etc/inittab id:5:initdefault:
id:标识符
runlevels:在哪个级别运行此行
action:在什么情况下执行此行,空代表所有级别
initdefault:设定默认运行级别
sysinit:系统初始化
wait:等待级别切换完成,只要切换到这个级别就执行
ctrlaltdel:三个键按下时
powerfail:停电时
powerokwait:停电时又来电了
respawn:一旦程序终止,会重新启动
process:要运行的程序
/etc/rc.d/rc.sysinit:此脚本完成系统初始化
1.激活udev和selinux
2.根据/etc/sysctl.conf文件,来设定内核参数
3.设定时钟
4.装载键盘映射
5.启用交换分区
6.设置主机名
7.根文件系统检测,并以读写方式重新挂载
8.激活RAID和LVM设备
9.启用磁盘配额
10.根据/etc/fstab检查并挂载其他文件系统
11.清理过期的锁和PID文件
/etc/inittab完成的任务:
1.设定默认运行级别
2.运行系统初始化脚本
3.运行指定运行级别对应的目录下的脚本
4.设定ctrl+alt+del组合键的操作
5.定义UPS电源在电源故障或恢复时执行的操作
6.启动虚拟终端(2345级别)
7启动图形终端(5级别)
守护进程类型:
独立守护进程
xinetd:超级守护进程
瞬时守护进程
/etc/rc#.d指向/etc/rc.d/rc#.d指向/etc/init.d/下的各种脚本,其中各种脚本将在/etc/inittab初始化时,对应级别下启动或者停止,K开头的脚本将会停止,S开头的脚本将会运行
[root@bogon ~]# ls -ld /etc/rc* |head -5 lrwxrwxrwx. 1 root root 7 Mar 15 09:52 /etc/rc -> rc.d/rc lrwxrwxrwx. 1 root root 10 Mar 15 09:52 /etc/rc0.d -> rc.d/rc0.d lrwxrwxrwx. 1 root root 10 Mar 15 09:52 /etc/rc1.d -> rc.d/rc1.d lrwxrwxrwx. 1 root root 10 Mar 15 09:52 /etc/rc2.d -> rc.d/rc2.d lrwxrwxrwx. 1 root root 10 Mar 15 09:52 /etc/rc3.d -> rc.d/rc3.d #/etc/rc*.d指向/etc/rc.d/rc*.d [root@bogon ~]# ls -l /etc/rc.d/rc3.d/ | head -5 total 0 lrwxrwxrwx. 1 root root 16 Mar 15 09:54 K01smartd -> ../init.d/smartd lrwxrwxrwx. 1 root root 16 Mar 15 09:54 K10psacct -> ../init.d/psacct lrwxrwxrwx. 1 root root 19 Mar 15 09:53 K10saslauthd -> ../init.d/saslauthd lrwxrwxrwx. 1 root root 15 Mar 15 09:53 K15httpd -> ../init.d/httpd #/etc/rc.d/rc*.d内的脚本指向/etc/init.d/下的各脚本 [root@bogon ~]# ls -l /etc/init.d/ | head -5 total 324 -rwxr-xr-x. 1 root root 1708 Aug 26 2010 abrtd -rwxr-xr-x. 1 root root 1725 Dec 2 2009 acpid -rwxr-xr-x. 1 root root 2122 Jun 8 2010 atd -rwxr-xr-x. 1 root root 3378 Jan 14 2010 auditd #/init.d内的各种脚本
/etc/init.d/下各种服务脚本
每个服务必须能够接收四个参数start,stop,restart,status
[root@localhost init.d]# cat bluetooth #!/bin/sh # # chkconfig: 345 50 83 # description: Turn HID adapters into Bluetooth ones # ### BEGIN INIT INFO # Short-Description: Trigger bluetoothd start-up # Description: Trigger bluetoothd start-up ### END INIT INFO # Source function library.
每个脚本中必须有chkconfig,description
chkconfig:runlevels SS KK,当chkconfig命令来为此脚本在rc#.d目录创建脚本链接时,runlevels表示默认创建为S*开头的脚本链接,除此之外的级别默认创建为K*开头的脚本链接。S脚本链接后面的启动优先级为SS所表示的数字,K脚本链接后面的关闭优先级为KK所表示的数字
description:用于说明此脚本的简单功能,太长的话要用到\反斜线续行
chkconfig --list [服务名]:查看所有独立服务;
chkconfig --add 脚本名称:添加服务
chkconfig --del 脚本名称:移除服务
chkconfig [--level 启动级别] 服务名称 [on | off]:在某个级别启动或关闭服务,如果省略默认为2345级别
/etc/rc.d/rc.local:系统最后启动的一个服务,也就是脚本
运行级别:0-6
0:halt
1:single user mode,直接以管理员身份接入
2:multi user mode,no NFS,不启动网络功能
3:multi user mode,text mode,文本模式,默认模式
4:reserved,保留级别,没有定义
5:multi user mode,graphic mode,图形模式
6:reboot
级别配置文件/etc/inittab,修改id:#即可修改运行级别
[root@bogon ~]# cat /etc/inittab id:5:initdefault:
查看运行级别:
[root@bogon /]# runlevel N 5
#N代表前一个级别没有切换过 [root@bogon /]# who -r run-level 5 2018-03-14 02:40