linux的引导过程
1、开机自检
服务器主机开机后,根据主板BIOS的设置对cpu、内存、显卡等设备进行基础检测,检测成功后根据一、linux的引导过程预设的启动程序移交系统控制权,大多时候会移交系统控制权,大多时候会移交给本机硬盘。
总结:如果是网络启动的话会开启pxe。
2、MBR引导
当本机硬盘启动系统时,首先根据第一个扇区中MBR的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单
总结:运行在MBR扇区里启动GRUB引导程序
3、GRUB菜单
对于linux操作系统来说GRBR(统一管理器)是使用最为广泛的多系统引导程序。
系统控制权传递给GRUB以后,将会显示用户菜单给用户选择,并根据所选项(或采用默认值)加载linux内核文件,然后将系统控制权交给内核,需要主要的是cenos7采用的是GRUBR2启动引导器。
总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置。
4、加载linux内核
linux内核是一个预先编译好的内设二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度,内核接过系统控制权后转交给内核后,将完全掌握整个linux操作系统的运行过程,在cenos中默认的内核文件放置位置在/boot/vmlinuz-3.10.0-514.el7.x86_64”。
总结:把内核和镜像文件系统加载到内存中可以使用。
5、init进程初始化
为了完成进一步的系统引导过程,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 单元类型
在systemd中不同类型的systemd对象被统一称为单 元,是让系统知道该如何进行操作和管理资源的主要 对象,所以systemd有许多单元类型。
systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软 件都会自动在这个目录中添加一个配置文件。
单元类型 | 说明 |
---|---|
Service | 描述一个系统服务 |
Socket | 描述一个进程间通信的套接字 |
Device | 描述一个内核识别的设备文件 |
Mount | 描述一个文件系统的挂载点 |
Automount | 描述一个文件系统的自动挂载点 |
Swap | 描述一个内存交换设备或交换文件 |
Path | 描述一个文件系统中文件或目录 |
Timer | 描述一个定时器(用于实现类似cron的调度任务) |
Snapshot | 用于保存一个systemd的状态 |
Scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
Target | 描述一组systemd的单元 |
systemctl 命令用于管理各种类型的systemd单 元,可以使用“systemctl -t help”命令来查询 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”可以查看系统中所有的单元文件。
修复mbr分区
故障原因:
病毒、木马的等造成的破坏;
不正确的分区操作、磁盘读写误操作等。
故障现象:
找不到引导程序,启动中断;
无法加载操作系统,开机后黑屏。
解决思路:
备份mbr引导扇区到其他磁盘
模拟破坏mbr引导扇区
引导镜像急救模式进行mbr扇区恢复
实验
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 37G 0 part /
sdb 8:16 0 40G 0 disk
sr0 11:0 1 1024M 0 rom
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xaa18be24 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-83886079,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-83886079,默认为 83886079):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk /dev/sdb -l
磁盘 /dev/sdb:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xaa18be24
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
[root@localhost ~]# mkfs -t xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, 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 ~]# mkdir /cs
[root@localhost ~]# mount /dev/sdb1 /cs
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 37G 4.0G 34G 11% /
devtmpfs 975M 0 975M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 11M 981M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 1014M 164M 851M 17% /boot
tmpfs 199M 12K 199M 1% /run/user/42
tmpfs 199M 0 199M 0% /run/user/0
/dev/sdb1 10G 33M 10G 1% /cs
[root@localhost ~]# dd if=/dev/sda of=/cs/mar.bak bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000201265 秒,2.5 MB/秒
破坏MBR,模拟扇区故障
[root@localhost ~]# ls /cs/
mar.bak
[root@localhost ~]# ls /cs/ -l
总用量 4
-rw-r--r--. 1 root root 512 4月 12 16:49 mar.bak
[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000193479 秒,2.6 MB/秒
[root@localhost ~]# init 6
选择 troubleshooting ,然后选择“Rescue a CentOS system”(急救模式),从备份文件中恢复MBR扇区,最后重新启动
成功进入用户登录界面,修复成功