1 CentOS 6 启动流程
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 控制主机
MBR:
446: bootloader, 64: 分区表, 2: 55AA
GRUB:
primary boot loader : 1st stage ,1.5 stage
secondary boot loader :2nd stage ,分区文件
kernel: :
自身初始化:
探测可识别到的所有硬件设备
加载硬件驱动程序(借助于ramdisk 加载驱动)
以只读方式挂载根文件系统
运行用户空间的第一个应用程序:/sbin/init
ramdisk文件的制作
(1) mkinitrd 命令
为当前正在使用的内核重新制作ramdisk 文件
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut 命令
为当前正在使用的内核重新制作ramdisk 文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)
/etc/rc.d/rc.sysinit: 系统初始化脚本
(1) 设置主机名
(2) 设置欢迎信息
(3) 激活udev 和selinux
(4) 挂载/etc/fstab 文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap 设备
(8) 根据/etc/sysctl.conf 文件设置内核参数
(9) 激活lvm 及software raid 设备
(10) 加载额外设备的驱动程序
(11) 清理操作
运行 /etc/rc#.d
K* 表示 级别切换要关闭的服务,有顺序
S* 表示 级别切换要开启的服务,有顺序
说明:rc N --> 意味着读取/etc/rc.d/rcN.d/
K*: K##* :## 运行次序;数字越小,越先运行;数字
越小的服务,通常为依赖到别的服务
S*: S##* :## 运行次序;数字越小,越先运行;数字
越小的服务,通常为被依赖到的服务
CentOS 6 启动流程:
POST --> Boot Sequence(BIOS) --> Boot Loader -->Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 别 设定默认运行级别 --> 系统初始化脚本 rc.sysinit --> 务 关闭或启动对应级别的服务 --> 启动终端
grub: GRand Unified Bootloader
grub 0.97: grub legacy
grub 2.x: grub2
grub legacy:
stage1: mbr
stage1_5: mbr 之后的扇区,让stage1 中的bootloader能识别stage2 所在的分区上的文件系统
stage2 :磁盘分区(/boot/grub/)
grub安装
(1) grub-install
安装grub stage1 和stage1_5 到/dev/DISK 磁盘上,并
复制GRUB到 相关文件到 DIR/boot 目录下
grub-install --root-directory=DIR /dev/DISK
(2) grub
grub> root (hd#,#)
grub> setup (hd#)
grub legacy 的配置文件
default=#: 设定默认启动的菜单项;落单项(title) 编号从0 开始
timeout=# :指定菜单项等待选项选择的时长
splashimage=(hd#,#)/PATH/XPM_FILE :菜单背景图片文件路径
hiddenmenu :隐藏菜单
password [--md5] STRING: 启动菜单编辑认证
title TITLE :定义菜单项“标题”, 可出现多次
root (hd#,#) :查找stage2 及kernel 文件所在设备分区;为grub 的根
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS] :启动的内核
initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs 文件
password [--md5|--encrypted ] STRING: 启动选定的内核或操作系统时进行认证
生成grub口令
grub-md5-crypt MD5 口令
grub-crypt sha512口令
2 内核参数调整
/proc 目录:
内核把自己内部状态信息及统计信息,以及可配置参数通 过proc 伪文件系统加以输出
参数:只读:输出信息
可写:可接受用户指定“新值”来实现对内核某功能或特性的配置
/proc/sys
(1) sysctl 命令用于查看或设定此目录中诸多参数
sysctl -w path.to.parameter=VALUE
sysctl -w kernel.hostname=mail.magedu.com
(2) echo 命令通过重定向方式也可以修改大多数参数的值
echo "VALUE" > /proc/sys/path/to/parameter
echo “websrv” > /proc/sys/kernel/hostname
sysctl 命令:
默认配置文件:/etc/sysctl.conf
(1)设置某参数
sysctl -w parameter=VALUE
(2)通过读取配置文件设置参数
sysctl -p [/path/to/conf_file]
(3)查看所有生效参数
sysctl -a
注意: 如果在内存的内核参数和文件的参数起冲突,才会修改内存中加在的内核参数,否则内存中的内核参数将不会修改
/sys 目录:
sysfs :为用户使用的伪文件系统,输出内核识别出的各
硬件设备的相关属性信息,也有内核对硬件特性的设定信息;有
些参数是可以修改的,用于调整硬件工作特性
udev 通过此路径下输出的信息动态为各设备创建所需要
设备文件,udev 是运行用户空间程序
专用工具:udevadmin, hotplug
udev 为设备创建设备文件时,会读取其事先定义好的规
则文件,一般在/etc/udev/rules.d 及/usr/lib/udev/rules.d目 目
录下
3 内核模块管理
lsmod 命令:
显示由核心已经装载的内核模块
显示的内容来自于: /proc/modules 文件
modinfo 命令:
显示模块的详细描述信息
modinfo [ -k kernel ] [ modulename|filename... ]
-n: 只显示模块文件路径
-p: 显示模块参数
-a: author
-d: description
-l: license
modprobe 命令:会自动解决依赖关系
装载或卸载内核模块
modprobe [ -C config-file ] [ modulename ] [ moduleparame-ters... ]
配置文件:/etc/modprobe.conf,/etc/modprobe.d/*.conf
modprobe [ -r ] modulename...
depmod 命令:
内核模块依赖关系文件及系统信息映射文件的生成工具 装载或卸载内核模块:
insmod 命令:指定模块文件,不自动解决依赖模块
insmod [ filename ] [ module options... ]
insmod `modinfo –n exportfs`
lnsmod `modinfo –n xfs`
rmmod 命令:卸载模块
rmmod [ modulename ]
rmmod xfs
rmmod exportfs