Linux操作系统引导过程
完整启动过程
简化紧要关键步骤(重点)
Linux系统开机引导过程:
1)开机自检 检测硬件设备,找到能够引导系统的设备,比如硬盘
2)MBR引导 运行MBR扇区里的主引导程序GRUB
3)启动GRUB菜单 系统读取GRUB配置文件(/boot/grub2/grub.cfg)获取内核的设置和位置,并在屏幕显示GRUB菜单页面
4)加载Linux内核 把内核加载到内存,将系统控制权交接给内核
5)init进程初始化 内核将init进程加载到内存中运行,并把init进程作为系统的第一个进程
6)系统初始化 启动内核模块,执行运行级别的启动脚本,执行/etc/rc.d/rc.local文件里的命令等
系统初始化进程
init进程 文件位于 /sbin/init -> /lib/systemd/systemd ,init进程PID(进程标记)号固定为 1 ,是系统中其它所有进程的父进程
init进程负责组织和运行许多独立的或相关的初始化工作,因此也被称为init系统。init系统可以定义,管理和控制init进程的各种行为,从而让计算机系统进入某种用户所需的运行模式。
可以通过pstree -p 命令查看PID
进程启动方式
centos7开始的版本默认的启动方式是 systemd,开机服务程序为并行启动,启动效率较快
centos6及以前版本的启动方式是 sysVinit,开机服务程序是通过串行执行/etc/init.d/目录下的shell脚本启动的,容易阻塞,启动效率较慢
systemd服务启动文件在lib/systemd/systemd中
Systemd单元类型
.service(实现单个应用的状态管理)和.target(实现多个应用/一组程序的状态管理)
Linux的运行级别
启动类故障恢复
先进入opt目录创建一个用于做备份的目录 ,添加一个用于做备份的硬盘
硬盘分区做格式化
挂载到刚刚创建做备份的目录上
如果是 MBR 整个扇区数据被破坏了,需要进入到急救模式将备份的MBR数据导入还原
备份命令:dd if=/dev/sda of=备份文件 bs=512 count=1
演示做个破坏
重启后操作系统黑屏 无法进入操作系统
进入急救模式
创建一个新的备份目录 挂载备份光盘到这个新目录上
还原命令:dd if=备份文件 of=/dev/sda 然后关机重启
模拟 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配置文件 chroot /mnt/sysimage -> grub2-mkconfig -o /boot/grub2/grub.cfg
重启即可
如果是 MBR 的GRUB主引导程序被破坏了(硬盘分区表还在)
1)在急救模式下使用备份文件恢复 dd if=备份文件 of=/dev/sda bs=446 count=1
2)在急救模式下重建MBR的GRUB主引导程序 chroot /mnt/sysimage -> grub2-install /dev/sda
root密码遗忘修改
两种方法
1)在急救模式下 先切换系统根环境 chroot /mnt/sysimage -> passwd root
2)在GRUB菜单按 e 键,修改内容
在 linux16 /vmlinuz-3.10.0-1160.71.1.el7.x86_64 root=UUID=a99fd431-dc10-4233-a655-3c4b8d710624 ro rhgb quiet LANG=zh_CN.UTF-8 这行后面追加配置
rw single init=/bin/bash ,再按 ctrl + x 重启系统
再在bash界面输入 passwd root 修改密码 -> touch /.autorelabel --> exec /sbin/init
系统服务控制
服务管理操作
1、systemctl start|stop|restart|reload|status|is-active 服务名[.service]
#要确保在 /usr/lib/systemd/system/ 目录中有相关服务的 XXX.service 文件
2、service 服务名 start|stop|restart|reload|status (属于centos7前没有systemctl会使用这个service)
#要确保在 /etc/init.d/ 目录中有相关服务的管理脚本文件
服务开机自启管理
systemctl enable|disable [--now] 服务名[.service] # --now选项可实现立即开启|关闭服务
systemctl is-enabled 服务名[.service] 查看开机自启是否已打开
centos7以前
先vim 进入脚本文件chkconfig (添加服务管理) 35是运行级别开机自动启动 20是启动位 99是关闭位
chkconfig --add 服务名 #服务名就是 /etc/init.d/ 目录下的脚本文件名
chkconfig --level 运行级别列表 服务名 on|off #开启|关闭服务在哪些运行级别下开机自启
chkconfig --list 服务名 #查看自启状态
运行级别
runlevel #查看上一次的运行级别 和 当前的运行级别
systemctl get-default #查看当前的默认运行级别
systemctl set-default multi-user.target|graphical.target #设置默认运行级别
等效于
ln -s -f /usr/lib/systemd/system/multi-user.target|graphical.target /etc/systemd/system/default.target