目录
2.2 MBR 引导:运行放在MBR扇区里的启动GRUB引导程序。
2.3 GRUB 菜单:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置以及路径位置。
2.4 加载Linux内核:把内核和镜像文件系统加载到内存中。
2.5 init 进程初始化:加载硬件驱动程序,内核把init进程加载到内存中运行。
4.2 备份MBR扇区数据到其它磁盘( /dev/sdb1)
4.4 引导界面进入急救模式,从备份文件中恢复MBR扇区数据先加载好光盘镜像
4.5 进入shell界面,挂载带有备份的分区,静备份的数据恢复到损坏的硬盘中,并重启
4.1 重新启动客户机,按ESC进入急救模式,点击CD-ROM Drive,进入光驱模式
5.2 将光标移动linux 开始的行,添加内核参数 rd.break
5.3 按ctrl-x启动,输入代码,如果SELinux是启用的,需要在执行exit操作前执行touch /.autorelabel,如查没有启动,不需要执行touch /.autorelabel
1、service unit file文件通常由三部分组成:
2、runlevel命令 只能查看切换运行级别与当前运行级别
一、Linux操作系统引导过程
1、引导过程总览


2、引导过程详解
2.1 开机自检:硬件设置检查,移交系统控制权
服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘,因为操作系统一般都是装在硬盘内
总结:检测出第一个能够引导系统的设备,比如硬盘或光驱
2.2 MBR 引导:运行放在MBR扇区里的启动GRUB引导程序。
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单。例如:GRUB等
总结:运行放在MBR扇区里的启动GRUB引导程序
2.3 GRUB 菜单:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置以及路径位置。
对于Linux操作系统来说,GRUB(统一启动加载器)是使用最为广泛的多系统引导器程序,系统控制权传递给FRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。
GRUB启动阶段
- primary boot loader :
1st stage.…MBR的前446个字节引导硬件去找内核
5 stage:..MBR 之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
- secondary boot loader : 2nd stage,分区文件/boot/grub2/grub.cfg
(CentOS 7采用的是GRUB2启动引导器)
总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置
2.4 加载Linux内核:把内核和镜像文件系统加载到内存中。
Linux内核是一个预先编译好的特殊二进制文件,介于各自硬件资源与系统程序之间,复制资源分配与调度,内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。
(在CentOS系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.e17.x86_64”)
总结:把内核和镜像文件加载到内存中
2.5 init 进程初始化:加载硬件驱动程序,内核把init进程加载到内存中运行。
为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init进程负责完成整个系统的初始化,最后等待用户进行登录。
总结:加载硬件驱动程序,内核把init进程加载到内存中运行
3、系统初始化进程
3.1 init 进程 (串行启动)
- 由Linux内核加载运行/sbin/init程序;
- init进程是系统中第一个进程,是所有进程的父进程;
- init进程的PID(进程号)号永远为1.
3.2 Systemd 可以代替服务监听 (并行启动)
- Systemd是Linux操作系统的一种init软件;(centos7的第一个进程是systemd,centos6以及之前的第一个进程是init)
- CentOS 7中采用权限的Systemd(并行启动服务进程)启动方式,取代传统的SysVinit(串行执行shell脚本启动服务);
- CentOS 7中运行的第一个 init进程是/lib/systemd/systemd
- 传统sysVinit依赖于串行执行Shell 脚本启动服务,导致效率低下,系统启动速度较慢
- systemd能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度
4 Systemd 单元类型
| 单元类型 | 扩展名 | 说明 |
|---|---|---|
| Service | .service | 描述一个系统服务(给他人提供服务) |
| Socket | .socket | 描述一个进程间通信的套接字(双向的,ip地址,端口号) |
| Device | .device | 描述一个内核识别的设备文件(硬件设备) |
| Mount | .mount | 描述一个文件系统的挂载点 |
| utomount | .automount | 描述一个文件系统的自动挂载点 |
| Swap | .swap | 描述一个内存交换设备或交换文件(交换分区文件) |
| Path | .path | 描述一个文件系统中文件或目录(描述一个文件的路径) |
| Timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
| Snapshot | .snapshot | 用于保存一个systemd的状态 |
| Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
| Slice | .slice | 描述居于Cgroup的一-组通过层次组织的管理系统进程 |
| Target | .target | 描述一组systemd的单元(运行级别) |
5 运行级别所对应的Systemd 目标
| 运行级别 | Systemd的target | 说明 |
|---|---|---|
| 0 | targe | 关机状态,使用该级别时将会关闭主机 |
| 1 | rescue.target | 单用户模式(急救模式),不需要密码验证即可登录系统,多用于系统维护 |
| 2 | multi-user.target | 用户定义/域特定运行级别(不支持远程等有一定缺陷)。默认等同于3 |
| 3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
| 4 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
| 5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
| 6 | reboot.target | 重新启动,使用该级别时将会重启主机 |




二、修复MBR扇区故障
MBR位于第一块硬盘(/dev/sda)的第一个物理扇区处,总共512字节,前446个字节是GRUB程序,后面64个字节是分区表。
1、故障原因
- 病毒、木马等造成的破坏
- 不正确的分区操作、磁盘读写误操作
2、故障现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
3、解决思路
- 准备添加另一块硬盘作为备份;
- 应提前做好备份文件;
- 以安装光盘引导进入急救模式;
- 从备份文件中恢复。
4、修复MBR扇区的具体步骤
4.1 加硬盘并分区



4.2 备份MBR扇区数据到其它磁盘( /dev/sdb1)(不可以备份在同一块硬盘中)
dd if=/dev/sda of=/mnt/mdr.bak bs=512 count=1
(复制覆盖,dev下的sda复制到mnt下取名为mbr.bak ,一次512个字节,复制1次)

4.3 模拟破坏MBR引导扇区
dd if=/dev/zero of=/dev/sda bs=512 count=1
(往sda中写一次512字节的空格)
hexdump -C -n 512 /dev/sda
查看sda硬盘的前512字节,发现已经被破坏了,此时重启,需要进入急救模式,此时读的是光驱的系统。

4.4 引导界面进入急救模式,从备份文件中恢复MBR扇区数据先加载好光盘镜像
- 当出现安装向导界面时,选择"Troubleshooting"选项,
- 选择"Rescue a CentOS Linux system" 选项,进入急救模式
- 选择“1”选择Continue并按Enter 键继续
- 再次按Enter键后将进入带“sh-4.2#"提示符的Bash Shell环境



4.5 进入shell界面,挂载带有备份的分区,静备份的数据恢复到损坏的硬盘中,并重启
sh-4.2# mkdir bak
sh-4.2# mount /dev/sdb1 /bak
#挂载带有备份文件的分区
sh-4.2# dd if=/bak/mdr.bak of=/dev/ sda
#恢复备份数据
sh-4.2# hexdump -C -n 512 /dev/sda
查看sda硬盘的前512字节,发现已经修复好了。
sh-4.2# reboot
#重启
![]()


三、修复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
4.2 进入急救模式,恢复GRUB引导程序,重写或者从备份中恢复grub.conf(此方法跟修复MBR扇区的方法相同,唯一的区别是bs=446)MBR位于第一块硬盘的第一个物理扇区处,共512字节,前446字节是主引导记录
#创建新目录用以挂载备份磁盘,备份GRUB引导程序
mkdir /bak
mount /dev/sdb1 /bak/
dd if=/dev/sda of=/bak/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
4.3 引导界面进入急救模式,重建GRUB菜单配置文件
#删除配置文件,模拟GRUB故障
rm -rf /boot/grub2/grub.cfg
#进入急救模式,加载光盘镜像,切换到系统根环境
sh-4.2# chroot /mnt/sysimage
#重新将GRUB引导程序安装到第一块硬盘(dev/sda)的MBR扇区,如果有多个分区可省略
bash-4.2# grub2-install /dev/sda
#重新构建GRUB菜单的配置文件
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
#退出chroot环境,并重启
bash-4.2# exit
sh-4.2# reboot
5、重建GRUB菜单配置文件
5.1 模拟删除引导文件

5.2 重新启动后在半秒内按ESC进入急救模式

5.3 选择并点击CD-ROM Drive,进入光驱模式

5.4 选择Troubleshooting

5.5 选择Rescue a CentOS system

5.6 进入后输入1,进入光驱系统

5.7 重建grub程序

四、遗忘root用户密码
1、故障原因
- 遗忘root用户的密码
2、故障现象
- 无法进行需要root权限的管理操作
- 若没有其他可用账号,将无法登录系统
3、解决思路
- 进入急求模式,重设密码
4、有光盘更改密码
4.1 重新启动客户机,按ESC进入急救模式,点击CD-ROM Drive,进入光驱模式

4.2 选择Troubleshooting

4.3 选择Rescue a CentOS system

4.4 输入1,进入光驱系统

4.5 修改密码

5、单用户模式更改密码
5.1 启动时任意键暂停启动,按e键进入编辑模式


5.2 将光标移动linux 开始的行,添加内核参数 rd.break
5.3 按ctrl-x启动,输入代码,如果SELinux是启用的,需要在执行exit操作前执行touch /.autorelabel,如查没有启动,不需要执行touch /.autorelabel
五、系统服务控制
格式:systemctl 控制类型 服务名称
系统后台有程序一直在运行
- systemctl enable --now 服务名 立即启动,并且开机自启
- systemctl disable --now 服务名 立即关闭服务,并且开机不自启
- systemctl enable 服务名 开机自启
- systemctl disable 服务名 开机不自启
| 控制类型 | 作用 |
|---|---|
| start | 启动 |
| stop | 停止 |
| restart | 重新启动 |
| reload | 重新加载 |
| status | 查看服务状态 |
| is-enabled | 查看服务是否启动 |
以防火墙为例:
1、service unit file文件通常由三部分组成:
- [Unit]:定义与Unit类型无关的通用选项,用于提供unit的描述信息、unit行为及依赖关系。
- [Service]:与特定类型相关的专用选项,此处为Service类型
- [Install]:定义由“systemctl enable”以及systemctl disable” 命令在实现服务器启动或禁用时用到一些选项
2、Unit段的常用选项
- Description: 描述信息
- After: 定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
- Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
- wants:依赖到的其它units,弱依赖
- conficts:定义units间的冲突关系
3、Service段的常用选项
Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
| simple | 默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中 |
| forking | 由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止 |
| oneshot | 与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中 |
| dbus | 与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行 |
| notify | 在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息 |
| idle | 与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务 |
- 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/目录
六、Linux系统的运行级别
1、查看运行级别
- runlevel命令 只能查看切换运行级别与当前运行级别
- systemctl工具 能查看默认的运行级别
2、runlevel命令 只能查看切换运行级别与当前运行级别

在终端上用init命令切换级别


3、systemctl工具 能查看默认的运行级别


| 运行级别 | Systemd的target | 说明 |
|---|---|---|
| 0 | target | 关机状态,使用该级别时将会关闭主机 |
| 1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
| 2 | multi-user.target | 用户定义域特定运行级别,默认等同于3 |
| 3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
| 4 | multi-user.target | 用户定义域特定运行级别,默认等同于3 |
| 5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作系统 |
| 6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
扩:etc/rc.d/rc#.d 根据运行级别启动对应/etc/rc.d/rc#.d目录下的服务(#为0-6),位于引导过程中的加载系统服务这步中
扩:自己写的服务和编译安装的是不会加载到etc/rc.d/rc#.d中的,无法使用systemd去开启或关闭。
扩:curl ip地址:可以看网页

6636



被折叠的 条评论
为什么被折叠?



