目录
4.2 备份MBR扇区数据到其它磁盘( /dev/sdb1)(不可以备份在同一块硬盘中)
4.4 引导界面进入急救模式,从备份文件中恢复MBR扇区数据先加载好光盘镜像
4.5 进入shell界面,挂载带有备份的分区,静备份的数据恢复到损坏的硬盘中,并重启
4.1 重新启动客户机,按ESC进入急救模式,点击CD-ROM Drive,进入光驱模式
5.2 将光标移动linux 开始的行,添加内核参数 rd.break
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 单元类型
5. 运行级别所对应的Systemd 目标
二、修复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扇区数据先加载好光盘镜像
1.当出现安装向导界面时,选择"Troubleshooting"选项,
2.选择"Rescue a CentOS Linux system" 选项,进入急救模式
3.选择“1”选择Continue并按Enter 键继续
4.再次按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
如果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进程启动类型
- 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工具 能查看默认的运行级别
扩:etc/rc.d/rc#.d 根据运行级别启动对应/etc/rc.d/rc#.d目录下的服务(#为0-6),位于引导过程中的加载系统服务这步中
扩:自己写的服务和编译安装的是不会加载到etc/rc.d/rc#.d中的,无法使用systemd去开启或关闭。
扩:curl ip地址:可以看网页