目录
1 linux启动过程linux启动流程:
2 GRUB使用
3 内核初始化
一、BIOS初始化和自检
POST(加电--加载ROM芯片中的BIOS启动代码--BIOS执行自检程序(初始化硬件并检测硬件是否工作正常)
BIOS:存在于ROM中,保存基本的输入输出程序,系统该信息设置,自检程序,系统启动自举程序
CMOS:存在于RAM中,保存实时时钟和 硬件配置信息和参数的设定按DEL可进入BIOS设置,CMOS保存这些设置
二、装载引导程序MBR(BIOS会读取CMOS的信息获得硬件配置和启动顺序)
BIOS会根据启动顺序 读取某硬件(HD CD-ROM USB等)的MBR启动引导程序(512b)并把控制权交给boot loader也就是交给了GRUB
MBR分3部分(如硬盘HD 的0磁盘0分区1扇区 512b)
主引导程序 boot loader 446b(GRUB程序安装在bootloader)
分区表partition tables 64b
校验位magic muber 55AA 2b
boot loader分类:GRUB是bootloader一种
LILO ARM用
GRUB PC和服务器用
三、GRUB启动引导阶段
找到BMR的boot loader也就找到了GRUB
GRUB引导过程:
加载stage1,stage1通常位于MBR中,用于装载stage2
加载stage1.5,用于识别文件系统
加载stage2,grub的核心程序
注意:stage1.5和stage2文件位于/boot/grub目录下
使用/boot/grub/grub.conf配置文件来加载linux内核
四、内核引导(加载内核)
1 自动识别文件系统
2 加载linux内核vmlinuz到内存
内核取得控制权,放到/boot (vmlinuz是一个gzip压缩文件,加载时需要使用gzip解压)
3 加载initrd*.img镜像到内存(通常是加载USB,LVM,RAID,SCSI等设备模块和磁盘接口的驱动程序)
临时构建只读的/文件系统,在这个文件系统各种执行临时的init进程
临时init进程作用:
把硬件驱动运行起来,磁盘、声卡、网卡等关键驱动的加载
4 有了驱动,内核再去挂载真正的跟文件系统,内核吧控制权交给 /sbin/init进程
五、系统初始化和引导login
1 系统初始化:
运行/sbin/init程序进行初始化(使用配置文件/etc/inittab和/etc/init目录下的文件),/etc/inittab设置系统的默认级别
*运行/etc/rc.sysinit
@获取网络环境
@初始化硬件
@设置主机名
@设备映射器及相关初始化
@初始化LVM
@文件系统检测
@启用磁盘配额和更新配额
@挂载设备(根据/etc/fstab配置文件进行挂载)
@清除开机过程中所产生垃圾文件
@启用交换分区
@将信息写入/var/log/dmesg文件
*运行/etc/rc.local
*按照设定的级别启动相关的服务,使用/etc/rc.d/rc*.d目录下的程序启动服务;*表示0-6的7个级别。
/etc/rc.d/rc*.d目录下的文件由启动状态(S 表示启动,K 表示不启动)、启动顺序、和启动服务程序三部分组成。
2 引导用户登录login
*运行/sbin/mingetty登录程序
用户登录(输入用户名和密码)-->使用/etc/passwd和/etc/shadow检测正确性-->运行/etc/profile、~/.bash_profile、
~/.bashrc、/etc/bashrc
进入用户桌面,运行相应的桌面程序(gdm gnome桌面,kde kde桌面,xdm 启动X Windows)
练习:(1)在系统开机时自动设置别名rm='rm -fr',并检验是否生效
vim ~/.bashrc
(2)如果忘记密码怎么办?要求进入单用户模式将root用户密码删除
(3)将系统的默认级别设置为3
vim /etc/inittab
(4)将/boot所在的分区挂载从/etc/fstab文件里面删除,然后重启机器进行恢复。
GRUB的使用:
/boot/grub/grub.conf配置文件
-------------------------------
default=0 #设定默认启动的title的编号,从0开始
timeout=5 #等待时间 秒
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz #背景图片
hiddenmenu #隐藏菜单
#passwordlitao_59 #grub的密码
#password--md5 密文 #grub的密码
titleCentOS (2.6.32-279.el6.x86_64) #内核标题 或操作系统的名称。可改。
root (hd0,0) #内核文件所在的设备 (hd磁盘,分区)
kernel /vmlinuz-2.6.32-279.el6.x86_64 roroot=UUID=46eb83e8-17fc-4de6-9d39-50a47216881a rd_NO_LUKS KEYBOARDTYPE=pcKEYTABLE=us rd_NO_MD crashkernel=auto.UTF-8 rd_NO_LVM rd_NO_DM rhgbquiet #内核路径和参数
initrd /initramfs-2.6.32-279.el6.x86_64.img #initrd路径(小根)
-------------------------------
------------------------------------------------------------------
启动流程2 GRUB界面init
------------------------------------------------------------------
如何生成MD5密文:
grub-md5-crypt
查看运行级别命令:
1:runlevel
2:who -r
查看内核版本号:
uname -r
1安装修复GRUB:
#grub
grub> root (hd0,0) 指定ROOT(磁盘,分区)
grub> setup (hd0) 安装grub(磁盘)
2安装修复GRUB:
#grub-install --root-directory=/ boot的父目录 /dev/sda1
3grub损坏时启动内核:
grub> find (hd0,0) 查找内核所在分区
grub> root (hd0,0)
grub> kernel /路径
grub> initrd /路径
grub> boot 启动
Kernel初始化过程:
1 设备探测
2 驱动初始化(可能从initrd(initramfs)文件装在驱动模块)
3 以只读方式挂载根
4 装在第一个进程init (PID:1)
/sbin/init:(/etc/inittab)
5.5 init 传统 串行
6.3 upstart:ububtu开发 并行启动
7.0 systemd: 并行启动
标识符:运行级别:什么情况下执行此行:要运行的程序
什么情况下:
initdefault 默认
sysinit 初始化
wait 等待级别切换到此级别是执行
respawn 程序终止时重新执行
/etc/rc.d/rc.sysinit
初始化流程 配置文件
/etc/rc.d/rc3
启动系统服务配置文件
------------------------------------------------------------------
启动流程脚本SysV服务脚本
------------------------------------------------------------------
SysV: /etc/rc.d/init.d
start | stop | restart | status
chkconfig: 运行级别 ss kk
当chkconfig来为此脚本在rc#.d目录穿件链接时,运行级别表示默认
创建为S*开头的链接,除此之外的级别默认创建为K*开头的链接。
chkconfig命令:
查看独立进程: chkconfig --list 进程名
加入进程 chkconfig --add 进程名
删除进程 chkconfig --del 进程名
设定服务开机启动或关闭:
chkconfig {--level 指定级别} 服务名称 (ON|OFF)
默认2345
/etc/rc.d/tc.local
系统最后一个服务,可用于用户自定义开机启动的程序
/etc/inittab的任务
1设定默认级别
2运行系统初始化脚本
3运行指定运行级别对应的目录下的脚本
4设置重启组合键
5定义UPS电源
6启动虚拟终端(2345)
7启动图形界面)(5)
守护进程:
独立进程(httpd vsftp) 需要关联到运行级别
超级守护进程 xinetd (NFS) 不需要关联到运行级别
启动NFS:先启动xinetd 然后启动NFS
关闭NFS:先关闭NFS 然后关闭xinetd
开机启动NFS : chkconfig 进程名 (ON |OFF)