当前位置: 代码迷 >> 综合 >> 第17章 Linux系统启动原理及故障排除
  详细解决方案

第17章 Linux系统启动原理及故障排除

热度:45   发布时间:2024-02-05 00:30:59.0
  1. centos6系统启动过程及相关配置文件
    1. 加载BIOS硬件信息,对硬件自检
    2. 读取硬盘中的MBR的boot Loader 就是grub引导,硬盘的0柱面,0磁头,1扇区称为主引导扇区,也叫主引导记录MBR,由3个部分组成,主引导程序,硬盘分区表DTP和硬盘有效标志,为什么MBR分区表只能分4个主分区?磁盘默认一个扇区大小为512字节,主引导程序占446字节,负责从活动分区中装载,并运行系统引导程序,分区表DPT占64字节,负责记录硬盘中分区的数量和大小。每个分区表项长16个字节,4个分区表项占用64字节。MBR有效标识位,占2个字节,固定为55AA。
    3. 依据boot loader的设定,到引导分区加载Kernel,Kernel会开始侦测硬件并加载驱动程序;
    4. 在硬件驱动成功后,Kernel会主动执行init程序,而init会取得run-level信息;
    5. init执行 /etc/rc.d/rc.sysinit文件来准备软件执行的作业环境(如网络,时区等);
    6. init执行 run-level 下各个服务并启动(script方式);
    7. init执行开机后自动运行脚本/etc/rc.d/rc.local 文件;
    8. init执行虚拟终端机控制程序 mingetty 来启动login程序等待用户登入
  2. centos8系统启动过程及相关配置文件
    1. 加载bios进行自检,根据设置读取第一个启动设备
    2. 读取并执行第一个启动设备内MBR的启动引导(grub2)
    3. 根据启动引导的设置加载内核(Kernel),此时内核在内存中运行,并检测与加载硬件驱动程序,当内核检测硬件与加载驱动程序完毕后,操作系统启动完成。
    4. 在硬件驱动加载成功后,内核会调用systemd程序。systemd执行sysinit.target初始化系统。basic.target准备操作系统。启动multi-user.target。systemd执行multi-user.target下的/etc/rc.d/rc.local文件。systemd执行multi-user.target下的getty.target以及登录服务。systemd执行graphical需要的服务。
    5. 由于系统数据都会存储到硬盘中,所以BIOS会指定启动的设备以便读取磁盘中的操作系统内核文件。但是由于不同的操作系统的文件格式并不相同,因此会以启动引导程序来处理内核文件的加载,所以这个启动引导程序就被称为boot loader,会被放置到启动设备的第一个扇区当中。
    6. 在内核加载完毕、进行硬件检测和驱动程序的加载之后。内核会调用第一个程序,就是systemd。使用pstree命令可以看到systemd的PID为1.systemd会准备软件运行的环境,包括系统的主机名、网络设置、语言设置、文件系统格式及其他服务的启动。而所有的操作都会通过systemd的默认启动服务集合/etc/systemd/system/default.target(实际上这是个软连接,而真正链接到的文件会随着默认启动级别的变化而变化。)
  3. systemd概述
    1. systemd即为system daemon 守护进程,是linux下的一种init软件,开发目标是系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低shell的系统开销效果,最终代替现在常用 的System v 与 BSD风格init程序。
    2. 与多数发行版System V风格init 相比,systemd采用了以下新技术:
    3. 采用Socket激活式与总现激活式服务,以提高相互依赖的各服务的并行运行性能;
    4. 用Cgroups代替PID来追踪进程,以此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。
    5. unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息
    6. system配置文件:
    7. /usr/lib/systemd/system/ #这个目录存储每个服务的启动脚本,类似于之前的/etc/init.d/
    8. 对于新建或修改的unit文件,要通知systemd重载此配置文件,然后可选择重启。systemctl deamon-reload
  4. 运行级别
    1. 0关机模式,1单用户模式,用于破解root密码
    2. 2无网络支持的,多用户模式
    3. 3有网络支持的多用户模式(一般叫字符界面,工作中最常用的模式)
    4. 4保留,未使用
    5. 5有网络支持,多用户的图形界面
    6. 6重启
  5. target目标态,target代替运行级别
    1. ls /usr/lib/systemd/system/*.target
    2. systemctl list-dependencies runlevel3.target #查看3级别unit的所有依赖,a依赖于b,systemd启动a的时候,同时会启动b,可以理解为3运行级别下都开启哪些服务
    3. centos7/8目标态,就是各种指定的服务和基础target组合而成。
    4. ll /etc/systemd/system/default.target
    5. /etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target
    6. systemctl set-default multi-user.target
    7. /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
    8. 默认目标态就是创建了一个软连接到指定的target
  6. 我们系统中有2个内核,改变默认启动的内核顺序
    1. vim /etc/default/grub
    2. GRUB_DEFAULT=saved #这里改成1,0代表第一个内核,1代表第二个,类推
    3. grub2-mkconfig -o /boot/grub2/grub.cfg #修改完成后,并没有生效,用此命令生成grub2.cfg文件,下次启动就会选择新的默认内核。
    4. uname -r  #查看当前系统内核
    5. cat /etc/redhat-release
    6. cat /proc/version
  7. 实战加密grub防止黑客通过单用户系统破解root密码
    1. grub2-mkpasswd-pbkdf2 #centos7/8 输入口令,确认口令
    2. grub.pbkdf2.sha512.10000.xxxxxxxx 复制该密钥
    3. vim /etc/grub.d/00_header 文件末尾添加如下内容
    4. cat <<EOF
    5. set superusers='rs'
    6. password_pbkdf2 rs
    7. grub.pbkdf2.sha512.10000粘贴该密钥
    8. EOF
    9. :wq
    10. grub2-mkconfig -o /boot/grub2/grub.cfg  #更新grub信息 重启验证
    11. 开机按e ,进入输入用户名密码,进入grub菜单,按ctrl+x启动
  8. 实战通过liveCD进入救援模式,重装grub修复损坏的系统
    1. BIOS设置光盘启动
    2. Troubleshooting
    3. Rescue a CentOS Linux system  #救援模式
    4. chroot /mnt/sysimage/
    5. ls
    6. grub2-install /dev/sd*
    7. ls /boot/grub2/
    8. grub2-mkconfig -o /boot/grub2/grub.cfg
    9. exit
    10. reboot