grub stage 1
MBR中前 446个字节,如果把这里面的内容损坏,那么系统会认为当前磁盘没有启动引导功能,会尝试从光盘或者网络启动系统
grub stage 1.5
存放识别/boot分区的文件系统的驱动,一般占用的空间是在MBR扇区后面的27个扇区
如果数据被损坏,启动系统的时候还是会从磁盘引导,但是不会出现启动菜单.会一直出现黑屏等待状态
grub stage 2
只要看到内核的启动菜单,表示已经成功的进入了grub的stage 2阶段,因为启动菜单是在2 stage生成的.
读取grub.conf文件
系统启动到执行启动第一个进程
1.通过grub stage1 中的MBR 找到 grub stage 1.5
2.通过读取存储在stage 1.5中的/boot分区的驱动文件使grub能够以文件的方式读取/boot分区下面的文件
3.通过stage2中读取/boot/grub.conf加载linux内核文件到内存,然后再加载虚拟文件系统initramfs使内核能够以文件系统的方式识别操作系统的根分区
4.grub程序在加载完成内核后,会把程序执行权限移交给内核
5.当内核识别操作系统的根分区后,启动系统的第一个进程,执行系统初始化脚本
grub命令
1.grub-install /dev/sda 修复grub1 1.5 2 所有阶段的数据 修复的时候不依赖于任何外部配置文件
2.grub中对应的/根分区不是操作系统的根分区,它代表的是/boot分区
3.(hd0,0) 表示第一块磁盘的第一个分区 即代表sda1
4.(hd0) 表示第一块磁盘 即表示sda
5.grub是一个交互式命令 (1) grub > (2) root(hd0,0) > (3) setup(hd0)
6.grub这个命令依赖于/boot/grub目录下的一些配置文件,如果这些文件被删除或者移动,那么使用grub命令无法正常修复
7.如果没有使用grub修复过系统,那么/boot/grub/目录下的文件只有两个文件影响系统启动(grub.conf 和 splash.xpm.gz)
如果使用过grub修复过系统,那么 /boot/grub 目录下的其它配置文件同样会影响到系统启动.
系统启动脚本流程(系统启动第一个进程后/sbin/init)
/etc/rc.d/rc.sysinit: 系统初始化脚本(系统启动后运行的第一个脚本)
1.设置主机名
2.设置欢迎信息
3.激活udev和selinux
4.挂在/etc/fstab文件中定义的文件系统
5.检测根文件系统,并以读写方式重新挂载根文件系统
6.激活swap设备
7.根据/etc/sysctl.conf文件设置内核参数
8.激活lvm以及software raid设备
9.加载额外设备的驱动程序
运行设定级别脚本
根据设定的启动级别,执行 /etc/rc.d/rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d 中的其中一个目录下的脚本
按照文件名中包含的数字从小到大依次执行各个服务脚本
1.先执行k开头的叫不能文件 停止相关服务
2.再执行s开头的脚本文件 启动相关服务
系统启动最后执行的启动脚本是 /etc/rc.local 这个脚本是等所有的服务脚本执行完后才会执行的
可以把一些简单的命令写到这个文件作为开机启动命令
读取/etc/inittab(读取系统启动级别) 》 /etc/rc.d/rc.sysinit 》 /etc/rc.d/rc[0-6].d目录下的所有脚本 》/etc/rc.local 脚本
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 [root@yxh6 rc.d]# ls 2 init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit 3 [root@yxh6 rc.d]# cd rc3.d 4 [root@yxh6 rc3.d]# ls 5 K01smartd K69rpcsvcgssd K95firstboot S15mdmonitor S28autofs 6 K02oddjobd K73winbind K99rngd S22messagebus S50bluetooth 7 K05wdaemon K74ntpd S01sysstat S23NetworkManager S55sshd 8 K10psacct K75ntpdate S02lvm2-monitor S24nfslock S80postfix 9 K10saslauthd K75quota_nld S05rdma S24openct S82abrtd 10 K15htcacheclean K76ypbind S08ip6tables S24rpcgssd S83abrt-ccpp 11 K15httpd K84wpa_supplicant S10network S25blk-availability S90crond 12 K30spice-vdagentd K87restorecond S11auditd S25cups S95atd 13 K36mysqld K88sssd S11portreserve S25netfs S99certmonger 14 K50dnsmasq K89netconsole S12rsyslog S26acpid S99local 15 K50kdump K89rdisc S13cpuspeed S26haldaemon 16 K60nfs K92iptables S13irqbalance S26udev-post 17 K61nfs-rdma K92pppoe-server S13rpcbind S27pcscd
设置系统服务开机启动或停止
1. chkconfig --list atd 查看atd服务开机设置状态
2. chkconfig --level 235 atd off 设置atd服务在2,3,5启动级别中为不启动状态
3. chkconfig --level 235 atd on 设置atd服务在2,3,5启动级别中为启动状态
4. 不指定模式的时候,默认指定的是2,3,4,5模式
自定义服务启动脚本
1.必须首先在/etc/init.d目录下创建一个服务脚本,格式如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!/bin/bash 2 #chkconfig: 35 96 03 3 #description: test my service 4 source /etc/init.d/functions 5 case $1 in 6 start) 7 action "testservice is start" 8 touch /var/lock/subsys/testservice 9 ;; 10 stop) 11 rm -fr /var/lock/subsys/testservice 12 action "testservice is stop" 13 ;; 14 status) 15 [ -f /var/lock/subsys/testservice ] && echo testservice is starting || echo testservice is stoped 16 ;; 17 *) 18 echo "usage start stop status" 19 ;; 20 esac
2.给服务脚本添加执行权限 chmod +x testservice.sh
3.把服务脚本变成后台服务 chkconfig --add testservice
4.系统启动时候这些显示都是执行都是 /etc/init.d目录下的后台脚本
5.如果某个后台服务在启动时出现异常,把系统重启进入1模式, 然后执行 chkconfig service off. 最后正常重启后 修改服务脚本
xinetd管理的服务(非独立服务)
使用频率不高,如果设置为开机启动会浪费资源。如果设置为开机不启动,当有用户访问的时候再去启动就已经来不及了.
xinetd管理的服务在开机的时候不用启动,由xinetd服务负责监听用户的请求.只有当用户访问这些服务的时候再由xinetd服务
激活相应的进程,处理完用户的请求后被xinetd激活的服务又会自动关闭.
centos7的Systemd服务
centos7上由systemd代替了xinetd服务,启动系统的时候只启动systemd服务
其它的服务都无需启动,只有被访问的时候才会由systemd激活
这就是centos7系统启动比较快速的原因 按需启动服务的方式