引导和服务
引导过程
开机自检
服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit, 中央处理器)、内 存、显卡、键盘等设备进行初步检测,检测成功后根据 预设的启动顺序移 交系统控制权,大多时候会移交给本 机硬盘。 网络启动 加载 网络批量pxe
MBR引导
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区 中 MBR(Master Boot Record, 主引导记录)的设 置,将系统控制权传递给包含操作系统引导文件的分 区;或者直接根据 MBR 记录中的引导信息调用启动菜单 (如 GRUB)。
总结:运行放在MBR扇区里的启动 GRUB引导程序
GRUB菜单 系统类型双西雅图 内核 文件 默认值
对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是 使用最为广泛的多系 统引导器程序。系统控制权传递给 GRUB 以后,将会显 示启动菜单给 用户选择,并根据所选项(或采用默认 值)准备加载 Linux 内核文件,然后将系统控制权转交 给 内核。需要注意的是,CentOS 7 采用的是 GRUB2 启 动引导器。
总结:GRUB引导程序通过读取GRUB配置件/boot/grub2/grub.cfg,来获取内核和镜像文件系统 的设置和路径位置
加载Linux内核 操作系统 调度硬件
Linux 内核是一个预先编译好的特殊二进制文件,介于 各种硬件资源与系统程序之间, 负责资源分配与调度。 内核接过系统控制权以后,将完全掌控整个 Linux 操作 系统的运行过 程。在 CentOS 系统中,默认的内核文件 位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。
总结:把内核和镜像文件系统加载到内存中 可以使用
init进程初始化 这是linux 系统运 行的第一个程序
为了完成进一步的系统引导过程,Linux内核首先将系统 中的“/sbin/init”程序加载到内 存中运行(运行中的程序 称为进程),init 进程负责完成一系列的系统初始化过 程,最后等待用户进行登录
总结:加载硬件驱动程序,内核把init进程加载到内存中 运行
systemd服务
- 对比5 6 可以解决依赖关系并行启动
- 按需启动
- 自动解决依赖关系
- 负责在系统启动或运行时,激活系统资源,服务器进程 和其它进程
init和systemd比较
- 传统init依赖于串行执行Shell 脚本启动服务,导致效率 低下,系统启动速度较慢 排队
- systemd能够将更多的服务进程并行启动,并且具有提 供按需启动服务的能力,使得启动更少进程,从而提高 系统启动速度 大家一起
Systemd新特性
- 系统引导时实现服务并行启动
- 按需启动守护进程
- 自动化的服务依赖关系管理
- 同时采用socket式与D-Bus总线式激活服务
- socket与服务程序分离
- 向后兼容sysv init脚本
- 使用systemctl 命令管理,systemctl命令固定不变, 不可扩展,非由systemd启动的服务
- systemctl无法与之通信和控制
- 系统状态快照
systemd 核心概念:unit
unit表示不同类型的systemd对象,通过配置文件进行 标识和配置;文件中主要包含了系统服务、监听 socket、保存的系统快照以及其它与init相关的信息
Systemd 单元类型
在systemd中不同类型的systemd对象被统一称为单 元,是让系统知道该如何进行操作和管理资源的主要 对象,所以systemd有许多单元类型。
systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软 件都会自动在这个目录中添加一个配置文件。
单元类型 | 扩展名 | 说明 |
Service | .service | 描述一个系统服务 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或交换文件 |
Path | .path | 描述一个文件系统中文件或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
Snapshot | .snapshot | 用于保存一个systemd的状态 |
Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
Target | .target | 描述一组systemd的单元 |
[root@localhost ~]# systemctl -t help
Available unit types:
service
socket
busname
target
snapshot
device
mount
automount
swap
timer
path
slice
scope
使用“ls /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“命令在实现服务启用或禁 用时用到 的一些选项
Unit段的常用选项
选项 | 说明 |
Description | 描述信息 |
After | 定义unit的启动次序,表示当前unit应该晚 于哪些unit启动,其功能与Before相反 |
Requires | 依赖到的其它units,强依赖,被依赖的 units无法激活时,当前unit也无法激活 |
Wants | 依赖到的其它units,弱依赖 |
Conflicts | 定义units间的冲突关系 |
Service段的常用选项
选项 | 说明 |
Type | 定义影响ExecStart及相关参数的功能的 unit进程启动类型 |
EnvironmentFile | 环境配置文件 |
ExecStart | 指明启动unit要运行命令或脚本的绝对 路径 |
ExecStartPre | ExecStart前运行 |
ExecStartPost | ExecStart后运行 |
ExecStop | 指明停止unit要运行的命令或脚本 |
Restart | 当设定Restart=1 时,则当次daemon服 务意外终止后,会再次自动启动此服务 |
RestartSec | 设置在重启服务( Restart= )前暂 停多长时间。 默认值是100毫秒(100ms)。 如果未 指 定时间单位,那么将视为以秒为单位。 例如设 为"20"等价于设为"20s"。 |
PrivateTmp | 设定为yes时,会在生 成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录 |
Install段的常用选项
选项 | 说明 |
Alias | 别名,可使用systemctl command Alias.service |
RequiredBy | 被哪些units所依赖,强依赖 |
WantedBy | 被哪些units所依赖,弱依赖 |
Also | 安装本服务的时候还要安装别的相关服务 |
对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启
systemctl daemon-reload
修复mbr分区
故障原因:
- 病毒、木马的等造成的破坏;
- 不正确的分区操作、磁盘读写误操作等。
故障现象:
- 找不到引导程序,启动中断;
- 无法加载操作系统,开机后黑屏。
解决思路:
- 备份mbr引导扇区到其他磁盘
- 模拟破坏mbr引导扇区
- 引导镜像急救模式进行mbr扇区恢复
案例
1.提前添加一块新硬盘,将MBR扇区备份到新硬盘中。
提前添加好新硬/dev/sdb,设置分区sdb1,将sdb4挂载到/data/aa目录下,之后将/dev/sda的MBR扇区备份到/data/aa目录下。
因之前已添加新硬盘并分区,此处不再演示。
[root@localhost ~]# mount /dev/sdb1 /bak/ mount: /dev/sdb1 写保护,将以只读方式挂载 mount: 未知的文件系统类型“(null)”
[root@localhost ~]# mkdir /test1
[root@localhost ~]# mount /dev/sdb1 /test1
[root@localhost ~]# df -hT
备份MBR扇区数据到其他磁盘,并模拟破坏MBR扇区,覆盖所在磁盘,最后重启
引导界面进入急救模式,恢复MBR扇区数据
进入shell界面之后,将/dev/sdb挂载,将备份的MBR数据恢复到/dev/sda中,再重启
修复GRUB引导故障
1、故障原因
MBR中的GRUB引导程序(1-446字节)遭到破坏
grub.cfg文件丢失,引导配置有误,文件位置/boot/grub2/grup.cfg
2、故障现象
系统引导停滞,显示grub >提示符
3、解决思路
- 尝试手动输入引导命令修复(不推荐)
- 进入急救模式,重写或者从备份中恢复grub.cfg
- 急救模式向MBR扇区中重建grub程序
4、修复GRUB引导故障的具体步骤(附具体操作和命令)
4.1 手动修复
在页面中的grub >
后面输入下列引导命令即可(在输入中不可复制,内核信息要在故障之前保存下来输入才可,此种方法耗费时间,笨拙,不建议)
grub> insmod xfs grub> linux16 /vmlinuz-0-rescue-73d7ede256a74b0e975e69f22d862090 root=UUID=d069b243-6623-4983-8d61-3ec6956a4f2b ro rhgb quiet grub> initrd16 /initramfs-0-rescue-73d7ede256a74b0e975e69f22d862090.img grub> boot
进入急救模式,重写或者从备份中恢复grub.conf(此方法跟修复MBR扇区的方法相同,唯一的区别是bs=446,具体做法请参照上文中修复MBR的具体操作步骤,这里就不再赘述了)
创建新目录用以挂载备份磁盘,备份GRUB引导程序 mkdir /data mount /dev/sdb /data/ dd if=/dev/sda of=/data/grup.bak bs=446 count=1 模拟对MBR中的GRUB引导程序的破坏,但不破坏分区表 dd if=/dev/zero of=/dev/sda bs=446 count=1 引导界面进入急救模式,从备份文件中恢复GRUB引导程序 sh-4.2# mkdir /data sh-4.2# mount /dev/sdb1 /data/ sh-4.2# dd if=/data/grup.bak of=/dev/sda bs=446 count=1 sh-4.2# exit
向MBR扇区中重建grub程序
4.3.1 重建grub程序的具体操作步骤
rm -rf /boot/grub2/grub.cfg #删除配置文件,模拟GRUB故障 chroot /mnt/sysimage #进入急救模式,切换根环境 grub2-install /dev/sda #重新将GRUB引导程序安装到第一块硬盘(dev/sda)的MBR扇区 grub2-mkconfig -o /boot/grub2/grub.cfg #重新构建GRUB菜单的配置文件 exit
进入急救模式
在开机加载过程中按esc键可进入
重新将GRUB引导程序安装到第一块磁盘/dev/sda
的MBR扇区,然后重新构建GRUB菜单的配置文件;
遗忘root用户密码
1、故障原因
• 遗忘root用户密码
2、 故障现象
• 无法进行需要root权限的管理操作
• 若没有其他可以账号,将无法登录系统
3、解决思路
• 进入急救模式,重设密码
4、具体操作步骤(附带命令)
chroot /mnt/Sysimage #进入急救模式,加载光盘镜像,切换系统根环境
passwd root #重设root用户密码
实例操作
5.1 进入急救模式(方法同上,在此不赘述)
切换根环境,并重设密码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?