文章目录
Liunx操作系统的引导过程
1:开机BIOS自检,加载硬盘。
2:读取MBR,进行MBR引导。
3:grub引导菜单(Boot Loader)。
4:加载内核kernel。
5:启动init进程,依据inittab文件设定运行级别
6:init进程,执行rc.sysinit文件。
7:启动内核模块,执行不同级别的脚本程序。
8:执行/etc/rc.d/rc.local
9:启动mingetty,进入系统登陆界面:开机自检,MBR引导,GRUB菜单, 加载linux内核,init进程初始化
引导过程
引导过程能以两种方式之一初始化。其一,如果系统处于关机状态,那么打开电源按钮将开启系统引导过程。其二,如果操作系统已经运行在一个本地用户(该用户可以是 root 或其他非特权用户),那么用户可以借助图形界面或命令行界面通过编程方式发起一个重启操作,从而触发系统引导过程。重启包括了一个关机和重新开始的操作。
Blos自检
在 1981 年,IBM 设计的第一台个人电脑中,BIOS 被设计为用来初始化硬件组件。POST 作为 BIOS 的组成部分,用于检验电脑硬件基本功能是否正常。如果 POST 失败,那么这个电脑就不能使用,引导过程也将就此中断。
BIOS 上电自检确认硬件的基本功能正常,然后产生一个 BIOS 中断 INT 13H,该中断指向某个接入的可引导设备的引导扇区。它所找到的包含有效的引导记录的第一个引导扇区将被装载到内存中,并且控制权也将从引导扇区转移到此段代码。
MBR 引导
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record, 主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR 记录中的引导信息调用启动菜单(如 GRUB)。
grub引导菜单(Boot Loader)
GRUB2 全称是 GRand Unified BootLoader,Version 2(第二版大一统引导装载程序)。它是目前流行的大部分 Linux 发行版本的主要引导加载程序。GRUB2 是一个用于计算机寻找操作系统内核并加载其到内存的智能程序。由于 GRUB 这个单词比 GRUB2 更易于书写和阅读,在下文中,除特殊指明以外,GRUB 将代指 GRUB2。
内核启动
内核文件都是以一种自解压的压缩格式存储以节省空间,它与一个初始化的内存映像和存储设备映射表都存储于 /boot 目录之下。
在选定的内核加载到内存中并开始执行后,在其进行任何工作之前,内核文件首先必须从压缩格式解压自身。一旦内核自解压完成,则加载 systemd 进程(其是老式 System V 系统的 init 程序的替代品),并转移控制权到 systemd
启动init进程,依据inittab文件设定运行级别
内核加载到内存中并开始执行后,在其进行任何工作之前,内核文件首先必须从压缩格式解压自身。一旦内核自解压完成,则加载 systemd 进程(其是老式 System V 系统的 init 程序的替代品),并转移控制权到 systemd。
系统初始化进程
init进程
-
由linux内核加载运行/sbin.inint程序
-
Init 进程是系统第一进程
-
init进程的PID号永远为1
systemd进程
-
systemd 是所有进程的父进程。它负责将 Linux 主机带到一个用户可操作状态(可以执行功能任务)
-
systemd是linux操作系统的一个init软件
-
centos7中采用全新的systemd启动方式,取代了传统的sysvinit
-
centos7中运行第一个init进程是/ilb/systrmd/sysytemd
-
运行级别对应systemd目标
SystemV 运行级别 | systemd 目标态 | systemd 目标态别名 | 描述 |
---|---|---|---|
halt.target | 停止系统运行但不切断电源。 | ||
0 | poweroff.target | runlevel0.target | 停止系统运行并切断电源. |
S | emergency.target | 单用户模式,没有服务进程运行,文件系统也没挂载。这是一个最基本的运行级别,仅在主控制台上提供一个 shell 用于用户与系统进行交互。 | |
1 | rescue.target | runlevel1.target | 挂载了文件系统,仅运行了最基本的服务进程的基本系统,并在主控制台启动了一个 shell 访问入口用于诊断。 |
2 | runlevel2.target | 多用户,没有挂载 NFS 文件系统,但是所有的非图形界面的服务进程已经运行。 | |
3 | multi-user.target | runlevel3.target | 所有服务都已运行,但只支持命令行接口访问。 |
4 | runlevel4.target | 未使用。 | |
5 | graphical.target | runlevel5.target | 多用户,且支持图形界面接口。 |
6 | reboot.target | runlevel6.target | 重启。 |
当MBR扇区出现故障如何操作
故障原因
病毒,木马等造成的破坏
不正确的分区操作,磁盘读写误操作
故障现象
找不到引导程序,启动中断
无法加载操作系统,开机后黑屏
解决思路
提前做好备份文件
以安装光盘引导进入急救模式
从备份文件中恢复
实验过程
虚拟机加一块300G硬盘做实验
进系统查看磁盘
fdisk -l ###看是否有sdb
创建一个30G的硬盘
mkfs -t ext4 /dev/sdb ###格式化sdb
挂载mount /dev/sdb /opt
1、备份MBR扇区数据
dd if=/dev/sda of=/opt/mbr.bak bs=512 count=1 ,磁盘字节
2、模拟MBR扇区故障
dd if=/dev/zero of=/dev/sda bs=512 count=1
3.从备份文件中恢复 MBR 扇区数据
由于 MBR 扇区被破坏以后,就无法再从该硬盘启动系统,所以需要使用其他硬盘中的操作系统进行引导,或者直接使用 CentOS 系统的安装光盘进行引导。不管使用哪种方式, 目的都是相同的——获得一个可以执行命令的 Shell 环境,以便从备份文件中恢复 MBR 扇区中的数据。
以使用 CentOS 安装光盘引导为例,当出现安装向导界面时,选择“Troubleshooting” 选项,如图所示,进入修复故障页面。
2、进入troubleshooting菜单 选择Rescue a centos system拯救centos系统
3、进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2#继续
4、mount /dev/sdb1 /mnt ## 将备份sdb备份的文件挂到mnt下 然后进去看下是否有mbr.bak
4、dd if=/mnt/sda.mbr.bak of=/dev/sda
init 6 重启
模拟centos 7.4 grub修复
故障原因
MBR中的GRUB引导程序遭到破坏
grub.conf文件丢失,引导配置有误
故障现象
系统引导停滞,显示“grub>”提示符
解决思路
尝试手工输入引导命令(成功率很低,不建议)
进入急救模式,重写或者从备份中恢复grub.conf
向MBR扇区中重建grub程序
模拟破坏grub引导菜单
cd /boot/grub2 ###进入grub2
mv grub.cfg grub.cfg.bak
重新启动系统,在载入条时,立马按F2进入BIOS界面
按方向键右键到Boot界面,选择到CD-ROM Drive,按+号将这一选项移到最上面
重新启动
进入troubleshooting菜单 选择Rescue a centos system
3、进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2#
4、进入救援模式后切根
chroot /mnt/sysimage/
5、使用 grub2-install 命令修复grub
grub2-install /dev/sda
6、修复grub.cfg配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
查看是否修复
cd /boot/grub2/
ls
已经修复
7、重启
exit
reboot ###主要改启动项,否认还是进光盘模式
忘记root密码
故障原因
遗忘root用户的密码
故障现象
无法进行需要root权限的管理操作
若没有其他可用账号,将无法登录系统
解决思路
进入急救模式,重设密码
模拟密码忘记
随便更一下密码
1.装入光盘,在光盘引导界面选择troubleshooting:
再移动到Exit,回车保存并重启
1.装入光盘,在光盘引导界面选择troubleshooting:
2、进入troubleshooting菜单 选择Rescue a centos system
3、进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2
4、进入救援模式后切根
chroot /mnt/sysimage/
5:修改密码
passwd root
输入密码:Abc123 ###第一次
输入密码:Abc123 ###第二次
、重启
exit
reboot ###主要改启动项,否认还是进光盘模式
总结
选择急救模式,进入救援centos系统的方式都是一样的
加载镜像系统命令
chroot /mnt/sysimage
重新构建grub菜单系统命令
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
系统服务使用systemd管理
systemd不是一个单独的命令,而是一个集合体
systemd是维持整个Linux系统的始祖
主要目的就是为了将服务开启
常用控制类型
start 启动
stop 停止
restart 重新启动 '//重新启动,会中断服务,此服务的PID值会改变'
reload 重新加载 '//重新加载配置文件不会中断服务,此服务的PID值会改变'
status 查看服务状态
例如:
[root@localhost ~]# systemctl start httpd 启动httpd服务
[root@localhost ~]# systemctl stop httpd 停止httpd服务
[root@localhost ~]# systemctl restart httpd 重新启动httpd服务
[root@localhost ~]# systemctl reload httpd 重新加载httpd服务配置文件
对于在实际生产环境中运行的服务器,不要轻易执行 stop 或 restart 操作,以免造成客户端访问中断,带来不必要的损失。若只是要为系统服务启用新的配置,可以采用相对温和一些的“reload”参数重新加载配置,而不是生硬地执行“restart”。
Linux运行级别
runlevel命令:查看切换运行级别与当前运行级别
[root@localhost ~]# runlevel
N 3
N 是上一次运行的级别,3是这一次运行的级别,若从init 3 切换到 init 5 ,在init3中输入runlevel命令
systemctl 工具
systemctl 能查看默认的运行级别
例如:检查系统网路是否开机自启动
优化启动过程(开机自启)
使用ntsysv命令:提供交互仿图像界面,便于管理多个服务
按tab键可以确认退出或取消,空格可以加“”子号选择开启或关闭【*】表示开启 【】表示关闭
systemctl 工具
不提供交互式,可视化窗口
[root@localhost ~]# systemctl disable httpd 将httpd服务设置关闭开机自启
[root@localhost ~]# systemctl enable httpd 将httpd服务设置开机自启
在当前系统下执行“systemctl list-units --type=service”命令可以查看当前系统中所有已激活的系统服务,命令如下:
[root@localhost ~]# systemctl list-units --type=service //查看所有已经激活的系统服务
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.serviceloaded active running ABRT Xorg log watcherdisabled