1.linux 操作系统引导过程
开机的时候,先是硬件自检BIOS 基本的输入输出系统 主板上的ROM芯片
配置BIOS 使用的是汇编语言 可以配置密码,时间等 配置BIOS信息的内容放在 CMOS 上面,是以RAM存储,对硬件加电自检 寻找可以引导系统启动的设备或者程序(光盘,硬盘,U盘,网络)
UEDI 使用的是C语言。比较容易实现,未来可能会接替BIOS
MBR引导 主引导记录,在磁盘的第一扇区,512字节的MBR
启动引导程序 boot loader 456字节
存放MBR分区表 64字节 一个分区16字节,有4个分区
16进制的字段, 2个字节 :根据系统型号决定,例如55AA AA55 ,意思可引导
核心目标: boot loader 寻找内核,加载内核,寻找的是系统里面的操作系统自己本身的 loader ,去进行识别,会有选项 提供用户,这就是GRUB菜单
GRUB菜单 centos 6 grub / centos 7 grub2
将会显示提供用于选择,并根据-选项加载linux内核文件
加载内核 boot loader 移交控制权,进行解压,在系统中运行
本身也会进行自检,检查驱动程序是否安装
加载上module 模块,系统引导器程序会从本地硬盘中加载内核以及内存文件系统 initramfs,其中包含启动时所有必要的硬件内核模块、初始化脚本等
为了挂载,加载驱动,依赖一个虚拟文件系统,帮助识别挂载,
内核无法自己主动识别驱动,boorleader 找到内核,找到initarnfs文件系统(伪根)
之后找到真正的根 文件系统
init进程 初始化
centos 7里面是 init 6
会产生第一个系统的进程 systemd 进程号 PID=1
在initramfs中找到驱动程序的所有硬件,然后作为PID 1
从initramfs执行/lib/systemd/systemd
systemd启动initrd.target中所有单元,包括挂载/etc/fstab
然后从initramfs根文件系统切换到磁盘根目录并且systemd启动默认target(字符界面还是图形化界面)也就是 /etc/systemd/system/default.target
最后等待用户登陆
system 启动之后,有一个支持的软件环境,systemd 服务
systemd 服务:
- sysint 对系统进行初始化,准备一些文件系统,用户名,网络的基本设置,文件系统的格式
2.multiuser 然后进入命令行模式,系统自启动的服务
3.getty 为用户准备一个登录环境,安装图形化界面的步骤
4.graphcal 实现图像界面化的登录.
2.排除启动故障错误
centos7忘记密码恢复方法
https://www.cnblogs.com/rzxiaojia/p/8360558.html
启动系统,并在GRUB2启动屏显时,按下e键进入编辑模式
在linux16/linux/linuxefi所在参数行尾添加以下内容:init=/bin/sh
按Ctrl+x启动到shell
挂载文件系统为可写模式:mount –o remount,rw /
运行passwd,并按提示修改root密码
运行命令exec /sbin/init来正常启动,或者用命令exec /sbin/reboot重启
MBR扇区修复
1、首先模拟故障
新加一块硬盘,格式化挂载
dd if=/dev/sda of=/opt/sdb/mbr.bak bs=512 count=1
dd if=/dev/zero of=/dev/sda bs=512 count=1
2、重启电脑,无法进入系统
3、设置boot选项从光盘进入
4、选择修复模式进入
5、mkdir /bak
6、重新挂载sdb,mount /dev/sdb /bak
7、dd if=/bak/mbr.bak of=/dev/sda
8、reboot重启
9、boot修改第一启动项为硬盘,顺利进入系统
grub修复
1、从光盘启动,进入救援模式,进入修复shell
执行chroot /mnt/sysimage #初始系统已经挂载到了/mnt/sysimage下面,想要进入初始系统下面,需要执行chroot /mnt/sysimage命令
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
reboot
3. 服务控制及切换运行级别
运行级别 | Systemd的target | |
---|---|---|
0 | target | 关机状态,使用该级别时将会关闭主机 |
1 | rescue taret | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
2 | mull-usertarget | 用户定义域特定运行级别。默认等同于3 |
3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
4 | multi-user.target | 用户定义域特定运行级别。默认等同于3 |
5 | graphical target | 图形界面的多用户模式,提供了圈形桌面操作环境 |
6 | reboot. target | 重新启动,使用该级别时将会重启主机 |
init 0 正常关机的状态,其中一个命令 shutdown
init 1 修复系统,root系统,相当于windos的安全模式,单用户模式
init 2 不太常用,没有共享存储,无网络 ,多用户模式
init 3 默认字符界面,多用户模式,不止root 用户可以使用,如果是最小安装,没有图形界面 默认init 3
init 4 保留,不使用
init 5 图形化界面,实现图形界面的多用户模式
init 6 重启 或者reboot 或者 shutdown -r
运行级别:
查看运行级别:
runlevel命令
systemct工具
runlevel只能查看切换运行级别与当前运行级别
systemctl时能查看默认的运行级别
临时切换运行级别:
init命令
systemctl工具
init的命令参数是运行级别所对应的数字
systemctI的命令参数是具体的target
4.优化启动过程
init进程
由Linux内核加载运行/sbin/init程序
init进程是系统中第一 个进程
init进程的PID (进程标记)号永远为1
Systemd
Systemd是Linux操作系统的一种init软件
CentOS7中采用全新的Systemd启动方式,取代传统的SysVinit
CentOS7中运行的第一个init进程 是/lib/systemd/systemd
详细的分类为:
单元类型 | 扩展名 | 说明 |
---|---|---|
Service | .service | 描述一个系统服务 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述个内存交换设备或交换文件 |
Path | .path | 描述一个文件系统中文件或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
Snapshot | snapshot | 用于保存一个systemd的状态 |
Scope | scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
Target | .target | 描述一组systemd的单元 |
5.相关命令
命令 | 作用 |
---|---|
systemctl --version | 查看systemd的版本 |
systemctl start name.service | 开启服务 |
systemctl stop name.service | 停止服务 |
systemctl restart name.service | 重启服务,先停止后启动 |
systemctl reload name.service | 重新加载服务的配置文件,服务不会中断 |
systemctl status name.service | 查看服务状态 |
systemctl enable name.service | 设置开机自启 |
systemctl disable name.service | 设置服务开机不自启 |
systemctl is-enable name.service | 查看服务是否开机启动 |
systemctl cat kube-apiserver .service | 查看服务的system服务配置 |
systemctl unmask name.service | 取消屏蔽服务 |
systemctl get-default | 查看当前系统默认启动的target |
systemctl set-default multi-user.target | 设置启动的target为 multi-user.target |
systemd-analyze | 查看系统启动耗时,等同于systemd-analyze time |