linux开机启动流程

linux开机启动流程:


wKiom1fRFGORQGWiAACCp6aQIlY198.jpg


 

一、BIOS 加电自检 
当你按电源开关开机时,电脑会首先去启动BIOS(基本输入输出系统),BIOS一般是集成在主板上的. 
BIOS 的工作 
1.检测连接硬件,比如显卡,内存,磁盘等等,检测的目的是以后把这些设备信息提供给操作系统 
2.寻找启动磁盘,每一种BIOS都会有开机启动菜单,可以在菜单里设置以哪个设备启动系统 
比如:光驱,硬盘,网络等等,这个菜单可以设置多个选项,依照设置次序在设备上寻找启动信息 
3.找到了启动硬盘,接着BIOS就会在磁盘上找启动扇区,找到内核启动系统. 
1)先试着寻找第一个扇区,也就是主引导记录MBR(Master Boot Record) 
2)如果第一个扇区上没有没有存在操作系统,再去寻找标记为BOOT的分区. 
不论是MBR还是BOOT分区,存储操作系统的空间都只有446字节; 
如果没有在上面提到的位置找到操作系统的内核,那么BIOS就无法继续启动工作. 
而我们的内核往往会大于446个字节,存放在磁盘的其他位置上,既然446装不下内核,又为了能顺利的找到放在其他位置上的内核, 
人们想出了一个办法就在446字节里写了一个小程序,当BIOS试着启动操作系统时就会执行这个小程序,然后再由小程序来载入其他位置的内核.这个小程序就是启动载入器(boot loader) 
二、BOOT Loader 
linux的boot loader(上文提到的小程序) 常见的有两种:lilo grub 
因为lilo存在着一个1024柱面的限制,并且更改了磁盘上的启动信息文件后需要重新启动系统才能同步446字节的内容,因为lilo的缺陷,已经被grub所取代.现在的绝大多数类linux系统都采用grub做boot loader; 
grub则没有了lilo各种限制,而且方便到能修改系统文件的启动内容就可以立刻与446内容同步. 
那么我们就看看grub的内容 它存在于 /boot/grub中 
GRUB有几个重要的文件,STAGE1、STAGE1.5、STAGE2 
STAGE1:它只有512字节,通常放在MBR中,它的作用很简单,就是在系统启动时用于装载STAGE2并将控制权交给它。 
STAGE2:GRUB的核心,所有的功能都是由它实现。 
STAGE1.5:介于STAGE1和STAGE2之间,是它们的桥梁,因为STAGE2较大,通常都是放在一个文件系统当中的,但是STAGE1并不能识别文件系统格式, 
所以才需要STAGE1.5来引导位于某个文件系统当中的STAGE2。根据文件系统格式的不同,STAGE1.5也需要相应的文件,如:e2fs_stage1_5,fat_stage1_5,分别用于识别ext和fat的文件系统格式。它存放于1-63的柱面之间. 
引导顺序如下:STAGE1->;STAGE1.5->;STAGE2, 
主要的配置文件时 grub.conf 
里面选项含义: 
title:一个操作系统引动的标头,可以使多个 
root :指明所需文件存在于哪个磁盘哪个分区上 (hd0,0)表示第一个硬盘,第一个分区,可参考/boot/grub/device.map 
kernel:内核文件的名字,并且会有一些加载内核时的参数 or代表以只读方式加载 
initrd:包含一些附加的驱动程序

三、内核启动 
内核启动后会向bios查询电脑的所有硬件信息,然后自己接手下来管理这些设备,以便提供给linux使用 
内核会试着驱动这些设备,这些设备的驱动一部分包含在内核中,叫做静态驱动,一部分以模块的方式(动态)存放文件系统中,由 
于此时还未挂载任何文件系统,因此还不能使用文件系统中的模块,这里只能驱动在内核中存在的硬件驱动程序的对应设备.想驱动内核中未包含的硬件驱动就需要加载文件系统. 
内核会尝试挂载根文件系统,根文件系统至少包含 /etc /bin /sbin /lib /dev 这5大目录 
他们5个缺一不可.都会导致系统无法启动 
根文件系统挂载是以只读方式挂载的,因为这时linux还在启动阶段,并不稳定,避免破坏系统资料 
四、启动INIT服务 
顺利的挂载了根文件系统后,就会启动init服务 
内核会按 /sbin/init /etc/init /bin/init 顺序寻找init程序, 
如果找不到则内核报错 这里存在一个参数 init=/bin/sh 如果启动时指定了则最后执行/bin/sh 
而不会产生内核报错.也被称为快速启动,因为它忽略了很多启动初始化工作. 
启动init的目的就是为了初始化系统环境,启动了init就证明了内核已经顺利启动,接下来就由init服务来建立linux使用环境 
init做了什么?它会读取 /etc/inittab 文件,根据这个文件的信息来进行初始化工作. 
会执行三个脚本 /etc/rc.d/rc.sysinit /etc/rc.d/rc /etc/rc.d/rc.local 
rc.sysinit 主要的功能用来建立系统的基本环境 
启动udev selinux子系统 
udev负责产生 /dev中的文件,selinux负责增强系统的安全性 
设定核心参数 sysctl -p 加载 /etc/sysctl.conf 
设定系统时间 将硬件时间设定为系统时间 
加载键盘和交换分区 swapon -a -e 
设置主机名,挂载文件系统,并将根重新挂载为可读写的. 
加载动态驱动模块 
USB设备与RAID & LVM 
卸载 /initrd/ 目录

rc 脚本设置启动级别 linux中有许多不同的启动级别,不同的启动级别会制定不同的服务
根据指定rc的参数会对应执行 /etc/rc.d/rc[0-6].d/ 中的连接脚本文件 以S开头的则启动
rc.local 前两个脚本都是系统至关重要的脚本,如果我们想在启动过程中放置一些其他程序
应该使用rc.local脚本中 因为S99local存在于rc[2-5].d中
三个RC脚本执行完毕后,就会建立虚拟主控制台 执行 /bin/login 就提供了用户登陆界面了
如果是图形 L5级别的话,会启动X window登录界面
所有的启动就都已经完毕
用户环境初始化
输入用户名和密码系统验证,然后会执行
    /etc/profile
    /etc/profile.d/*.sh $HOME/.bash_profile
    /etc/bashrc
    $HOME/.bashrc

启动级别 
0 关机 
1 单用户 
2 多用户模式但带网络但不能远程登录 
3 不受限多用户模式 TUI 
4 保留 
5 图形模式 
6 重新启动 
查看启动级别 
# runlevel        或者 who -r
N 3 
N是上次的级别,3是当前级别 也就是说机器开机就是3级别 
切换级别 
init 5




设置开机自动写的服务

1 将自己所写的脚本放到/etc/init.d, 并将脚本加上执行权限chmod +x 脚本名

[root@centos6 rc.d]# ll -hi /etc/init.d

1179741 lrwxrwxrwx. 1 root root 11 Aug 17 13:35 /etc/init.d -> rc.d/init.d

[root@centos6 etc]# ll -di /etc/rc.d/init.d/

1179742 drwxr-xr-x. 2 root root 4096 Aug 25 06:21 /etc/rc.d/init.d/


2 在脚本中写入

#!/bin/bash

#chkconfig:35 88 22                         #35表示在级别3和级别5下开启此程序

                                                          #88表示开机时运行的优先级

                                                          #22表示关机时运行的优先级

#description:testsrv script

3 执行chkconfig –add 脚本名称,此时在/etc/rc.d/目录下的rc3.d和rc5.d中创建脚本的连接,K代表关机关闭顺序,S代表开机启动顺序


chkconfig命令:


查看服务在所有级别的启动或关闭设定情形:

chkconfig[–list] [name]

添加:

SysV的服务脚本放置于/etc/rc.d/init.d(/etc/init.d)

chkconfig–add name

#!/bin/bash

#LLLL 表示初始在哪个级别下启动,-表示都不启动

# chkconfig: LLLL nnnn

删除:

chkconfig–del name

修改指定的链接类型

chkconfig[–level levels] name <on|off|reset>

–level LLLL: 指定要设置的级别;省略时表示2345

作业

1、每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”

    

0 0 * * 2,4,7 cp -r /var/log/messages /logs/"messages-`date +%Y%m%d`"

2、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中

0 */2 * * * egrep "^M|^S" /proc/meminfo >> /tmp/meminfo.txt

原创文章,作者:zebra930,如若转载,请注明出处:http://www.178linux.com/44651

(1)
上一篇 2016-09-19 13:49
下一篇 2016-09-19 13:49

相关推荐

  • N25第九周作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash declare -a usersh nologin=0 login=0 usersh=($(cut -d’:’ -f7 /etc/passwd)) ##数组赋值时需…

    Linux干货 2017-03-04
  • The best essay writing service on reddit will supply your paper instantaneously and ensure that you should without doubt have gotten a top quality grade

    How to Keep track of down Best Essay Writing Service on Reddit to Get Help with Your Essay Best essay writing service reddit will deliver your paper in time and ensure you will hav…

    Linux干货 2023-01-14
  • 网络N22期-第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d" " -f1 | uniq root 2、取出最后登录到当前系统的用户的相关信息。 [roo…

    Linux干货 2016-08-29
  • 文件查找:locate/find

    文件查找就是在文件系统上查找符合条件的文件,工具名分别为:locate和find locate是非实时查找或数据库查找的工具;而find则是实时查找工具。 locate locate依赖于事先构建的索引。索引的构建是在系统较为空闲时自动进行(即为周期性任务),也可以手动更新数据库(updatedb) 注意:索引构建过程需要遍历整个根文件系统,极其消耗资源。 …

    Linux干货 2016-03-12
  • Kernel——linux的核心

    Linux Kernel: CentOS 启动流程:POST –> BootLoader(BIOS,MBR) –>Kernel(initrd) –> rootfs –> switch_root –> /sbin/init     …

    Linux干货 2016-09-11
  • ELK 日志分析实例

    网海过客www.chinasa.net ELK 日志分析实例一、ELK-web日志分析二、ELK-MySQL 慢查询日志分析三、ELK-SSH登陆日志分析四、ELK-vsftpd 日志分析 一、ELK-web日志分析 通过logstash grok正则将web日志过滤出来,输出到Elasticsearch 搜索引擎里,通过Kibana前端展示。  …

    Linux干货 2016-06-03