1)grub版本不同,centos7使用的是grub2版本
2)第一个启动进程不同:centos7:systemd
因此:主要介绍grub2的修复和system的相关内容
服务依赖关系启动举例:nfs服务启动依赖于rcpbind
centos6上:
如果rcpbind服务未启动,那么nfs服务不能启动
总结:如果一个服务所依赖的服务未启动,此服务也无法启动
即centos6需要人为手动解决服务依赖关系
centos7上:
如果rcpbind服务未启动,那么nfs服务也能启动
总结:如果一个服务所依赖的服务未启动,此服务也能启动
即一个依赖于别的服务需要启动时,将自动解决依赖关系,将其依
赖的服务也启动
开机启动流程:POST --> Boot Sequence --> Bootloader --> kernel + initramfs(initrd) --> rootfs --> /sbin/init
Systemd:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其他进程
systemd的新特性:
unit:unit表示不同类型的systemd对象,通过配置文件进行标识和配置,文件中主要包含了系统服务、监听socket、保存的系统快照以及其他与init相关的信息
systemd 管理centos7上的所有资源,所有资源统称为unit。
unit配置文件:
/run/systemd/system/ 和/etc/systemd/system/ 这两个目录下的内容一般都
是通过一些工具自动生成的,无需手动修改。
/usr/lib/systemd/system 可能接触添加删除.service文件,源码编译安装的
软件需要添加.service文件时,才能被systemd进行管理。
unit类型:
service unit:文件扩展名为.service,用于定义系统服务
target unit:文件扩展名为.target,用于模拟实现运行级别
Device unit: .device, 用于定义内核识别的设备
Mount unit: .mount, 定义文件系统挂载点
Socket unit: .socket, 用于标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动
telnet 启动时,由systemd监听23端口,当需要时启动Telnet,因此centos6上
的xinetd被淘汰。
Snapshot unit: .snapshot, 管理系统快照
Swap unit: .swap, 用于标识swap设备
Automount unit: .automount,文件系统的自动挂载点
Path unit: .path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如:spool 目录
关键特性:
不兼容:
~]systemctl(tab 补全查看其子命令)
常用:systemctl start|restart|status|mask|default|get-default..
systemctl管理服务的变化:
①systemctl可以同时管理多个服务
②启动服务时没有标准输出进行提示咯。没有消息就是最好的消息。
CentOS 7: service unit (注意:能兼容早期的服务脚本)
centos7也能使用service命令,但是其实被重定向至/bin/systemctl
~]# service nfs status
Redirecting to /bin/systemctl status nfs.service
命令:systemctl COMMAND name.service
其中.service可以省略不写,也只有service unit 可以省略不写,
因此省略不写时都会被认为是.service
COMMAND:start,restart,stop,status
禁止自动和手动启动:
当有多个服务提供同一功能时,eg:httpd和Nginx,
避免冲突,只能启动一个服务
或者暂时不需启动时,防止别人或自己误启动:
systemctl mask name.service
systemctl mask实质:
~]# systemctl mask atd
Created symlink from /etc/systemd/system/atd.service to /dev/null.
/etc/systemd/system/目录下文件优先级最高
再高优先级目录下创建对应的软链接指向/dev/null
取消禁止:
查看某服务当前激活与否的状态:(查看对应返回值 脚本中使用)
设定某服务开机自启
设定某服务开机禁止启动
查看某服务是否开机自启动:
(..../autofs.service; enabled-->主要看这个enabled
某服务设为开机自动实质:
Removed symlink /etc/systemd/system/multi-user.target.wants/atd.service.
/etc/systemd/system/multi-user.target.wants/此目录下为234模式开机启动的服务
systemctl list-unit-files --type service --all显示状态
loaded Unit配置文件已处理
active(running) 一次或多次持续处理的运行
active(exited) 成功完成一次性的配置
active(waiting) 运行中,等待一个事件
inactive 不运行
enabled 开机启动
disabled 开机不启动
static 开机不启动,但可被另一个启用的服务激活<只能由另一服务激活,系统管理>
显示所有单元状态
systemctl 或 systemctl list-units
只显示服务单元的状态
systemctl --type=service
/etc/systemd/system:系统管理员和用户使用
/usr/lib/systemd/system:发行版打包者使用
以 “#” 开头的行后面的内容会被认为是注释
相关布尔值,1、yes、on、true 都是开启,0、no、off、false 都是关闭
时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明
service unit file文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专用选项;此处为Service类型
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项
①Description:描述信息
②After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与
Before相反
③Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
④Wants:依赖到的其它units,弱依赖
⑤Conflicts:定义units间的冲突关系
①Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
②EnvironmentFile:环境配置文件
③ExecStart:指明启动unit要运行命令或脚本的绝对路径
④ExecStartPre: ExecStart前运行
⑤ExecStartPost: ExecStart后运行
⑥ExecStop:指明停止unit要运行的命令或脚本
⑦Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
①Alias:别名,可使用systemctl command Alias.service
②RequiredBy:被哪些units所依赖,强依赖
③WantedBy:被哪些units所依赖,弱依赖
④Also:安装本服务的时候还要安装别的相关服务
注意:对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此
配置文件,而后可以选择重启
运行级别
target units:
target:就是各种资源的状态,某一target就是对应于各种资源的开机状态
表现位一个对应的文件夹,启用相应的资源
各个target还有相互的依赖,或者表现位相互调用关系。
查看centos7系统的开机启动分析:
~]# systemd-analyze <默认显示>
Startup finished in 684ms (kernel) + 2.993s (initrd) + 6.537s (userspace) = 10.215s
systemd-analyze <\tab> 还有诸多选项
eg:systemd-analyze plot > boot.html
然后网页版查看如下图:
运行级别:
查看依赖性:
级别切换:init N ==> systemctl isolate name.target
修改默认级别:
禁用ctrl + alt + delete (重启快捷键)禁用防止误操作
systemctl mask ctrl-alt-del.target
单用户修复 systemctl set-default runlevel6.target
在Linux16行末尾添加:systemd.unit=multi-user.target,然后Ctrl-x
注意: 输入完不要敲回车,直接Ctrl+x
待系统启动后,将系统开机设为multi-user.target即可
centos7 使用的是grub2 ==>grub启动与centos6类似(stage1,stage1.5,stage2 三个阶段),但是grub2的配置文件/boot/grub2/grub.cfg不建议直接修改了,可以使用grub2-mkconfig 命令生成。
grub2 stage1—>BootLoader前446字节。
chroot–>grub2-install /dev/sda(grub2-install依赖于系统根下的工具)
然后重启即可
UEFi或BIOS初始化,运行POST开机自检
选择启动设备
引导装载程序, centos7是grub2
加载装载程序的配置文件:
加载initramfs驱动模块
加载内核选项
内核初始化,centos7使用systemd代替init
执行initrd.target所有单元,包括挂载/etc/fstab
从initramfs根文件系统切换到磁盘根目录
systemd执行默认target配置,配置文件/etc/systemd/system/default.target
systemd执行sysinit.target初始化系统及basic.target准备操作系统
systemd启动multi-user.target下的本机与服务器服务
systemd执行multi-user.target下的/etc/rc.d/rc.local
Systemd执行multi-user.target下的getty.target及登录服务
systemd执行graphical需要的服务
设置内核参数,只影响当次启动
启动时,在linux16行后添加systemd.unit=desired.target
systemd.unit=emergency.target
systemd.unit=rescue.target
rescue.target 比emergency 支持更多的功能,例如日志等
systemctl default 进入默认target
文件系统损坏
在/etc/fstab不存在对应的设备和UUID
在/etc/fstab不存在对应挂载点
在/etc/fstab不正确的挂载选项
注意: 目前是只读挂载,重新使/读写挂载
mount –o remount,rw /sysroot
chroot
然后可以进行密码重置,修改/etc/shadow文件之类的
grub2-setpassword
grub2-<\tab> 许多子命令
/boot/grub2下的文件
~]# ls /boot/grub2
device.map fonts grub.cfg grubenv i386-pc locale
[root@centos7-17 ~]# ls /boot/grub2
device.map fonts grub.cfg grubenv i386-pc locale user.cfg
[root@centos7-17 ~]# cat /boot/grub2/user.cfg
GRUB2_PASSWORD=grub.pbkdf2.sha512.1...
设置口令后多出的文件/boot/grub2/user.cfg
则此文件即为加密的密码文件
若想删除grub口令
删除/boot/grub2/user.cfg 文件或者 > /boot/grub2/user.cfg
覆盖重定向清空
添加grub口令后,grub选择菜单输入“e”
输入口令之后才能进入/boot/grub2/grub.cfg文件内容显示部分
修复操作:
救援模式 --> chroot /mnt/sysimage
--> grub2-install /dev/sda
--> grub2-mkconfig -o /boot/grub2/grub.cfg
--> 重启系统
修复操作:
救援模式 --> chroot /mnt/sysimage
--> 挂载光盘mount /dev/sr0 /mnt
--> 重装内核rpm -ivh /mnt/Packages/kernel-VERSION.rpm --force
--> grub2-install /dev/sda
--> grub2-mkconfig -o /boot/grub2/grub.cfg
--> 重启系统
注意: /boot/grub2/grub.cfg 生成一定要在内核文件生成之后
因为它需要内核作为参数提供选择
当一个系统安装多个内核时,如何修改默认启动内核?
上图可见:/boot/grub2/grub.cfg文件中5.2.9的内核是在内核3.10.0之前,如果按照顺序启动时,内核5.2.9应该为默认启动内核。默认排序为前面的5.2.9为0,其后的内核3.10.0为1;修复默认内核启动命令:grub2-set-default
grub2-set-default 1
--> 此命令修改/boot/grub2/grubenv这个文件
cat /boot/grub2/grubenv
# GRUB Environment Block
saved_entry=CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
....
注意/boot/grub2/grubenv不建议直接修改此文件,建议使用命令修改
当然还可直接修改/etc/default/grub 此文件
GRUB_DEFAULT=saved 这个值
但是一般还是建议命令修改。
修复/etc/fstab文件:
救援模式 -->
--> mkdir /mnt/sysroot
--> mount /de/sda2 /mnt/sysroot
--> vi /mnt/sysroot/etc/fstab <还原系统挂载>
--> 修复/etc/fstab文件后
--> 重启
相当于删除/boot目录修复。