目录
1.linux操作系统引导过程
1.1引导过程总览
编辑1.2 linux操作系统的引导过程
1.3 系统初始化进程
1.4 Systemd单元类型
1.5 运行级别所对应的systemd目标
2.排除启动类故障
2.1 修复MBR扇区故障
2.2 实例:修复MBR扇区故障
2.3 实例:恢复GRUB引导程序
1.linux操作系统引导过程
1.1引导过程总览
1.2 linux操作系统的引导过程
1. 开机自检
服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
总结: 检查硬件设备,检测出第一个能够引导系统的设备,比如硬盘或者光驱
2. MBR 引导
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR 记录中的引导信息调用启动菜单(如 GRUB)。
总结: 运行MBR扇区里的主引导程序GRUB
3.启动 GRUB 菜单
对于Linux操作系统来说,GRUB(统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。
CentOS 7 采用的是 GRUB2 启动引导器。
总结:启动GRUB菜单 系统读取GRUB配置文件(/boot/grub2/grub.cfg)获取内核的设置和位置,并在屏幕显示GRUB菜单页面
4.加载 Linux 内核
Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。
CentOS 7系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。
总结:把内核和镜像文件系统加载到内存中
5.init 进程初始化
为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成整个系统的初始化,最后等待用户进行登录。
总结:加载硬件驱动程序,内核把init进程加载到内存中运行
6. 系统初始化
总结:启动内核模块,执行运行级别的启动脚本,执行/etc/rc.d/rc.local文件里的命令等
1.3 系统初始化进程
init进程
● 由Linux内核加载运行/sbin/init程序
● init进程是系统中第一个进程,是所有进程的父进程
● init进程的PID(进程标记)号永远为1
Systemd
● Systemd是Linux操作系统的一种init软件
● CentOS7中采用全新的Systemd启动方式,取代传统的sysVinit
● CentOS7中运行的第一个init进程是/lib/systemd/systemd
init进程 文件位于 /sbin/init -> /lib/systemd/systemd ,init进程PID号固定为 1 ,是系统中其它所有进程的父进程
进程启动方式:centos7开始的版本默认的启动方式是 systemd,开机服务程序为并行启动,启动效率较快
centos6及以前版本的启动方式是 sysVinit,开机服务程序是通过串行执行/etc/init.d/目录下的shell脚本启动的,容易阻塞,启动效率较慢
1.4 Systemd单元类型
1.5 运行级别所对应的systemd目标
2.排除启动类故障
2.1 修复MBR扇区故障
故障原因
● 病毒、木马等造成的破坏
● 不正确的分区操作、磁盘读写误操作
故障现象
● 找不到引导程序,启动中断
● 无法加载操作系统,开机后黑屏
解决思路
● 应提前作好备份文件
● 以安装光盘引导进入急救模式
● 从备份文件中恢复
2.2 实例:修复MBR扇区故障
(1)新建一块硬盘sdb,并将该硬盘格式化,挂载到/backup目录中;
[root@localhost ~]# fdisk -l
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00010c9c
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 83886079 40893440 8e Linux LVM
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-root:37.7 GB, 37706792960 字节,73646080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:4160 MB, 4160749568 字节,8126464 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x1c4e72ec 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# mkfs -t xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242624, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mount /dev/sdb1 /opt/mbr.bak/
[root@localhost ~]# df -ht
df:选项需要一个参数 -- t
Try 'df --help' for more information.
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 13M 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 36G 5.2G 30G 15% /
/dev/sda1 xfs 1014M 174M 841M 18% /boot
tmpfs tmpfs 394M 20K 394M 1% /run/user/0
/dev/sr0 iso9660 4.5G 4.5G 0 100% /run/media/root/CentOS 7 x86_64
/dev/sdb1 xfs 20G 33M 20G 1% /opt/mbr.bak
(2)备份MBR扇区数据到其他磁盘(/dev/sdb1);
[root@localhost ~]# dd if=/dev/sda of=/opt/mbr-bak bs=512 count=1 #将MBR扇区文件中数据,备份到/backup/mar.bak目录中
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000172723 秒,3.0 MB/秒
(3)模拟破坏MBR引导扇区;
[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1 #将零设备文件复制到MBR扇区文件中进行破坏
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000113332 秒,4.5 MB/秒
(4)重新启动虚拟机;
(5)引导界面进入急救模式,从备份文件中恢复MBR扇区数据;
2.3 实例:恢复GRUB引导程序
方法一:急救模式中,手动输入引导命令(笨拙繁琐,不建议使用,敲错一个字重来)
grub> insmod xfs #加载指定的模块到内核
grub> linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=UUID=8fd74986-ae66-4ffd-b7d8-a19f2eca7b6f ro rhgb quiet LANG=zh_CN.UTF-8 #内核的名字及位置等信息
grub> initrd16 /initramfs-3.10.0-693.el7.x86_64.img #镜像系统文件
grub> boot #引导boot
方法二:进入急救模式,恢复GRUB引导程序;
(1)备份GRUB配置文件到/bak/grub.bak文件中;
(2)引导界面进入急救模式,从备份文件中恢复GRUB引导数据;
方法三:引导界面进入急救模式,重建GRUB菜单配置文件;
(1)手动删除/boot/grub2/grub2.cfg文件;
[root@clr ~]# cd /boot/grub2
[root@clr /boot/grub2]# ls
device.map fonts grub.cfg grubenv i386-pc locale
[root@clr /boot/grub2]# rm -rf grub.cfg #手动删除/boot/grub2/grub2.cfg文件
[root@clr /boot/grub2]# ls
device.map fonts grubenv i386-pc locale
[root@clr ~]# init 6 #重启系统
(2)进入急救模式,加载光盘镜像,切换到系统根环境;
重新启动虚拟机,在系统刷新读取设备文件时,快速按esc,进入CD-ROM Drive,通过光盘方式进行启动;