一、centos6系统启动过程及相关配置文件
1、centos6系统启动过程
1.加载BIOS的硬件信息,根据设定取得第一个可开机引导设置,如:光驱,硬盘,网络,USB
2.读取硬盘中MBR的boot loader就是grub引导
GRUB(GRand Unified Bootloader 简称GRUB)是一个来自GUN项目的多操作系统启动程序。
MBR是硬盘的0柱面,0磁头,1扇区称为主引导扇区(也叫主引导记录MBR),它由三个部分组成,主引导程序,硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。
磁盘默认一个扇区大小为512字节,MBR由一下3部分组成:
第一部分:主引导程序(boot loader)占446字节,主引导程序它负责从活动分区中装载,并运行系统引导程序。
第二部分:分区表(Partition table),即DPT,占64字节,为分区项1,分区项2,分区项3,分区项4四个,64字节只存4个分区表。
第三部分:MBR有效标识位,占2字节,固定位55AA。3.依据boot loader的设定,到引导分区加载Kernel ,Kernel会开始侦测硬件并加载驱动程序
4.在硬件驱动成功后,Kernel会主动执行init程序,而init会取得run-level信息
5.init执行/etc/rc.d/rc.sysinit文件来准备软件执行的作业环境
6.init执行run-level下各个服务并启动(script方式)
7.init执行开机后自动运行脚本 /etc/rc.d/rc.local 文件
8.init执行虚拟终端机控制程序mingetty来启动login程序,最好等待用户登入
2、centos6启动相关的配置文件
修改系统启动级别:
/etc/rc.d/rc.sysinit :shell脚本,(作用:系统初始化:如主机名和/etc/fstab都在这里指定了)
执行rc.sysinit完成了包括mount分区,激活swap,加载modules等重要的工作
启动对应级别下的服务:如init3级别
/etc/rc.d/rc3.d/(这里的程序/服务S开头的全部开机执行,K开头的开机不执行)
rcn.d (n为1-6)是对应于不同的run-level下启动不同的服务,这些目录下都是软链接,链接到/etc/rc.d/init.d下的一些文件。以S开头的表示启动,以K开头的不启动
第一个字母后面的数字表示优先级,centos6中是串行启动服务,按顺序一个一个服务启动,而centos7中的systemd可以并行启动多个服务,速度比较快
例:
chkconfig这一行,2345表示在runlevel ,2345下启动,10为此服务的启动顺序,90为关机时关闭此服务的顺序
查看network服务哪些级别启动:
所有服务都运行成功后,设置开机自动执行某个命令:/etc/rc.local
查看系统启动级别:
二、centos7系统启动过程
1、centos7系统启动过程
Centos7引导顺序
1.UEFI或BIOS初始化,运行POST开机自检
2.选择启动设备
3.引导装载程序,centos7是grub2
4.加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grunb.cfg
5.加载内核选项
6.加载initramfs初始化为文件
7.内核初始化,centos7使用systemd代替init
8.执行initrd.target所有单元,包括挂载/etc/fstab
9.从initramfs根文件系统切换到磁盘根目录
10.systemd执行默认target配置,配置文件/etc/systemd/system/default.target
11.systemd执行sysinit.target初始化系统及basic.target准备操作系统
12.systemd启动multi-user.target下的本机与服务器服务
13.systemd执行multi-user.target下的/etc/rc.d/rc.local
14.systemd执行multi-user.target下的getty.target及登录服务
15.systemd执行graphical需要的服务
2、systemd运行原理--了解
Systemd概述:systemd即为systemd daemon守护进程,是Linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低shell的系统开销的效果,最终替代现在常用的system V与BSD风格init程序。
与多数发行版使用的system V风格init相比,systemd采用了一下技术:1.采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;2.用Cgroups代替PID来追踪进程,以此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。
unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置,文件中主要包含了系统服务,监听socket,保存的系统快照以及其它与init相关的信息
Systemd配置文件:
/usr/lib/systemd/system/ :这个目录存储每个服务的启动脚本,类似于之前的/etc/init.d
/run/systemd/system/ :系统执行过程中所产生的服务脚本,比上面目录优先运行
/etc/systemd/system :管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx 类的功能,比上面的目录优先运行
对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,然后可以选择重启
[root@localhost ~]# systemctl daemon-reload
总结:centos5,6,7系统版本启动过程:
centos5 centos6 centos7
3、管理系统服务
命令:systemctl COMMAND name.service
- |
centos6 |
centos7 |
启动 |
service name start |
systemctl start name.service |
停止 |
service name stop |
systemctl stop name.service |
重启 |
service name restart |
systemctl restart name.service |
状态 |
service name status |
systemctl status name.service |
重载或重启服务(先加载,在启动) |
- |
systemctl reload-or-restart name.service |
chkconfig命令的对应关系
- |
centos6 |
centos7 |
设定某服务开机自启 |
chkconfig name on |
systemctl enable name.service |
设定某服务开机禁止启动 |
chkconfig name off |
systemctl disable name.service |
查看所有服务的开机自启状态 |
chkconfig --list |
systemctl list-unit-files --type service |
列出该服务在哪些运行级别下启动和禁用 |
chkconfig sshd -list |
ls /etc/systemd/system/*.wants/sshd.service |
查看服务是否开机自启 |
- |
systemctl is-enabled name.service |
服务状态:
loaded :unit配置文件已处理
active(running) :一次或多次持续处理的运行
active(exited) :成功完成一次性的配置
active(waiting) :运行中,等待一个事件
inactive :不运行
enabled :开机启动
disabled :开机不启动
static :开机不启动,但可被另一个启用的服务激活
4、运行级别
centos6下Linux运行级别0-6的含义:
0 :关机模式
1 :单用户模式,用于找回root密码
2 :无网络支持的多用户模式
3 :有网络支持的多用户模式,字符界面
4 :保留,未使用
5 :有网络支持,支持图像界面的多用户模式
6 : 重启,重新引导系统
在不同级别下,设置服务是否随系统启动运行。在centos7上运行级别的含义与之前不同了,已经由.target来代替运行级别,我们可以通过target定制符合我们的工作运行环境
[root@localhost ~]# ls /usr/lib/systemd/system/*.target #查看我们的机器上有多少个target
[root@localhost ~]# systemctl list-unit-files --type target #查看所有target的状态
[root@localhost ~]# systemctl list-dependencies runlevel3.target #查看3级别unit的所有依赖
centos6-7运行级别的变化
5、运行级别的切换
1.在centos6上,我们切换级别使用init,在centos7上虽然也能使用,但是调用的不再是原来的程序了。centos7使用systemctl isolate name.target来切换target。
在centos6/7下切换到字符界面:
init3 #切换到字符界面
init5 #切换到图形界面
centos7切换到字符界面:
systemctl isolate multi-user.target 或 systemctl isolate runlevel3.target
2.centos7设置默认系统启动级别
systemctl set-default name.target
查看默认的级别是什么:
[root@localhost ~]# ll /etc/systemd/system/default.target
三、修复MBR分区
1、模拟MBR文件损坏,修复
1.备份MBR引导扇区
2.损坏MBR引导扇区
3.修复MBR引导分区
因为引导扇区损坏,所有开机自动进入了CDROM
选择Troubleshooting
选择Rescue a CentOS system进入救援模式
输入1 ,Continue继续,然后回车进入shell
把之前备份的文件挂载到新建的目录下,然后把备份文件覆盖到sda,重启
2、使用光盘进入救援模式,重建GRUB修复损坏的系统
我们把grub2目录删除,重启发现起不来
这时我们要在开机时进入BIOS,把CDROM的引导顺序调到第一个,然后按F10保存退出,就可以进入光盘镜像的救援模式
选项和之前一样,选择Troubleshooting然后选Rescue a CentOS system
选择1进入shell,这里它告诉我们原来的根是/mnt/sysimage,可以使用chroot切换过去
切换过去可以看到shell类型变为bash
3、忘记root密码,进入紧急模式找回root身份
在这个界面按e
在linux开头的那一行末尾添加rd.break然后按ctrl加上x
这时候会进入shell,可以先mount查看,可以看到最后一行根目录只有读的权限,我们要改密码需要写的权限,所以我们可以重新挂载根分区
重新挂载根分区加上写权限,chroot切根,语言改为English,passwd命令修改密码,如果系统的selinux开着,则需要执行命令:touch /.autorelabel以更新系统信息,否则重启之后密码修改不会生效。如果已经关闭selinux不需要创建/ .autorelabel
先退出当前根,然后重启系统