码迷,mamicode.com
首页 > 其他好文 > 详细

系统引导

时间:2018-06-13 23:32:25      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:eric   cti   一个   levels   lang   linux引导   splash   win   bubuko   

 

 

Linux系统引导过程

 

Linux引导总览:

 

技术分享图片

 

 

Linux引导过程:

加电自检-->MBR扇区-->GRUB配置(/boot/grub/grub.conf)

-->root(hd0,0)
  kernel(/boot/vmlinuz)
  initrd(boot/initrd-....img)
-->/etc/inittab:
  /etc/rc.d/rc.sysinit
  /etc/rc.d/rc 级别 (initdefault默认级别)
 -->/etc/rcX.d/快捷方式
        --> /etc/rc.d/init.d/服务脚本
  S99local-->/etc/rc.local(自定义开机脚本)
mingety tty1-tty6-->login-->验证用户配置(passwd、shadow)-->/bin/bash--?>用户正常执行命令

 

 

启动引导开机顺序

 

    (1)主机加电自检,加载BIOS硬件信息
        (2)读取MBR的引导文件(grub,lilo)
        (3)引导linux内核
        (4)运行第一个进程init(进程号永远为1)
        (5)进入相应的运行级别  //运行级别0 1 2 3 4 5 66)运行终端,输入用户名密码

 

或者:

1.BIOS初始化
2.引导程序
3.内核初始化
4.init开始并进入运行级别
4.1执行/etc/rc.d/rc.sysinit脚本
4.2执行/etc/rc.d/rc and /etc/rc.d/rc[0-6].d/下的脚本
4.3执行/etc/rc.d/rc.local脚本
4.4进入虚拟控制台Virtual consoles
4.5进入图形界面

 

BIOS初始化

 

 

1.侦测外围设备
2.选择引导设备
读取和执行引导设备的第一个扇区,即MB

 

 

 

编辑/etc/grub.conf


# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/vda
default=0  ##启动顺序,从0开始排序
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz  #表示第一个硬盘的第一个分区
hiddenmenu
title CentOS 6 (2.6.32-642.el6.x86_64)  #加载内核
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=tty0 console=ttyS0,115200n8
        initrd /initramfs-2.6.32-642.el6.x86_64.img

#ro :以只读方式挂载根分区

 

技术分享图片:卷标

 

技术分享图片

 

rootnoverify :不校验

chainloader +1:读取硬盘的第一个扇区

 grub加密:

技术分享图片

 

技术分享图片

 

 

内核初始化

 

 

1.设备检测
2.设备驱动初始化
3.只读方式挂载根分区系统
4.加载init程序

 ctrl+alt+del3秒重启

 

技术分享图片

 

市电停电后,由ups发出指令让计算机2分钟后关机

技术分享图片

 

发电了,结束关机动作

技术分享图片

 

2345级别进入系统可以得到1-6tty终端

技术分享图片

 

 

技术分享图片

1.在执行此脚本之前,3级别和5级别是一模一样的
2.如果把5改成3,通过5或3进来都会进入字符界面

 

 

系统启动后执行的最后一个脚本:/etc/rc.d/rc.local;跟用户无关;这个脚本执行后才会进入登录界面

 

 

Linux运行级别

 

默认包括7种运行级别

 

    0:halt
        1: single user mode, 直接以管理员身份切入, s,S,single
        2:multi user mode, no NFS
        3: multi user mode, text mode
        4:reserved
        5: multi user mode, graphic mode
        6: reboot

 

 INIT进程

Linux内核加载执行 /sbin/init程序

系统中第一个进程,进程ID始终为1
主配置文件:/etc/inittab

 

 

技术分享图片

 

 

/etc/inittab记录格式

 

id:runlevels:action:process
或者:

[设置项目]:[runlevel]:[init操作行为]:[命令项目]

 

 技术分享图片

 

id:runlevels:action:process
id: 标识符
runlevels: 在哪个级别运行此行;
action: 在什么情况下执行此行;
process: 要运行程序; 

 

行动类别

 

技术分享图片

 

 

initdefault: 设定默认运行级别
sysinit: 系统初始化
wait: 等待级别切换至此级别时执行
respawn: 一旦程序终止,会重新启动

 

配置文件:

[root@localhost ~]#  vim  /etc/inittab    //进入设置启动级别         
        id:5:initdefault:        //设置系统默认启动的级别             
        ca::ctrlaltdel:/sbin/shutdown -t3 -r now  //三键重启比较危险,所以在编辑第32行时要在ca前面加#号屏蔽掉这条命令     

 

 

 

/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/rc.d/rc.sysinit脚本

##: 关闭或启动的优先次序,数据越小越优先被选定
先关闭以K开头的服务,后启动以S开头的服务;

 

切换运行级别

 

 

设置默认级别

 

技术分享图片

 

 默认级别千万不要设置为 0 4 6

 

 查看当前的运行级别

 

#runlevel
5 3

 

 

 

 切换到指定的运行级别

 

 

#init 3

 

 

 

 其他初始化配置

 

 

/etc/rc.d/rc.sysinit脚本

 

 

 

由init进程调用执行
设置网络时钟、加载文件系统等一系列工作

 

 

技术分享图片

 

 

 

/etc/rc.d/rc脚本

 

由init进程调用执行
根据运行级别参数,加载/终止相关服务

 

技术分享图片

 

 

/etc/rc.d/rc.local脚本

 

 

由rc脚本调用执行
保存用户定义的需开机后自动执行的命令

 

技术分享图片

 

 RHEL6的系统开机的过程: 

 

1. 加载BIOS的硬件信息、进行自我测试,并依据设定获得第一个可开机的设备; 
2. 读取并执行第一个开机设备内MBR的boot Loader(grub等程序); 
3. 依据boot loader的设置加载Kernel,Kernel会开始检测硬件与加载驱动程序; 
4. 内核启动init; 
5. 系统初始化:(/etc/init/rcS.conf exec /etc/rc.d/rc.sysinit);
6. init找到/etc/inittab文件,确定默认的运行级别(X) (/etc/init/rcS.conf exec telinit $runlevel); 
7. 触发相应的runlevel事件(/etc/init/rc.conf exec /etc/rc.d/rc $RUNLEVEL); 
8. 开始运行/etc/rc.d/rc,传入参数X; 
9. /etc/rc.d/rc脚本进行一系列设置,最后运行相应的/etc/rcX.d/中的脚本; 
10. /etc/rcX.d/中的脚本按事先设定的优先级依次启动;
11. 最后执行/etc/rc.d/rc.local;
12. 加载终端或X-Window 接口。

 

 

 

技术分享图片

 

 

解决修改错误配置的方法:

1、在grub界面时输入e

2、选中第二行输入e

3、最后输入1/single/s(单用户级别)——

 

单用户级别可绕过验证,不会去读/etc/inittab这个文件

 

系统引导

标签:eric   cti   一个   levels   lang   linux引导   splash   win   bubuko   

原文地址:https://www.cnblogs.com/zhongguiyao/p/9180396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!