CentOS 7启动流程和启动排错

    xiaoxiao2023-10-27  170

    CentOS 7启动流程和启动排错

    文章目录

    CentOS 7启动流程和启动排错@[toc]CentOS 7启动流程简述CentOS 7破解root口令方法一CentOS 7破解root口令方法二CentOS 7进入救援模式修复删除GRUB2 stage 1-2导致的系统无法启动问题现象修复方法 修复删除/boot/grub2/grub.cfg文件导致的系统无法启动问题现象解决方法 修复删除/boot目录导致的系统启动故障问题现象解决方法 /etc/fstab文件错误导致的系统启动异常问题原因修复方法 补充:设置内核参数调整启动时默认使用的内核设置CentOS 7系统使用传统网卡名称 参考资料

    CentOS 7启动流程简述

    UEFi或BIOS执行硬件初始化,运行POST加电自检,获取第一个可启动的设备;

    读取并执行第一个启动设备内MBR中的boot Loader,进行引导装载,通过GRUB 1.5 stage中的内容进入boot分区,读取/boot/grub2/grub.cfg文件;

    通过grub.cfg文件载入kernel和initramfs到内存中,在内存中kernel通过initramfs解压后生成的根目录,加载内核选项,完成内核初始化。启动第一个进程systemd,执行initrd.target下所有单元,启用核心功能,载入所需驱动程序,重新侦测周边硬件。最后,卸载initramfs的小型文件系统,挂载系统真正的根目录,开始后续的开机流程;

    成功切换到根分区后,kernel会调用启动的第一个程序systemd,根据配置文件/etc/systemd/system/default.target,链接到默认运行的操作环境,一般是/usr/lib/systemd/system/目录下,multi-user.target 或 graphical.target 二者之一;

    假定这里选择的默认运行环境是multi-user.target,接着下来systemd会去激活启动multi-usre.target所依赖到的服务;

    Systemd执行local-fs.target和swap.target,挂载本机/etc/fstab文件中定义的文件系统和相关的内存交换空间;Systemd执行sysinit.target,侦测加载硬件,载入所需核心模块,进行系统环境初始化;Systemd执行basic.target,载入周边硬件驱动程序,设置防火墙和SELinux等相关任务,准备系统环境;

    Systemd启动multi-user.target下的服务,主要是启动下面两个目录下的服务;

    /usr/lib/systemd/system/multi-user.target.wants//etc/systemd/system/multi-user.target.wants/

    Systemd执行multi-user.target下的/etc/rc.d/rc.local

    Systemd执行multi-user.target下的getty.target及相关的登陆服务;


    CentOS 7破解root口令方法一

    启动时在下图界面按任意键暂停启动,然后按e键进入编辑模式;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CYrNr7QO-1606139809510)(http://banyuan.zuiyoujie.com/blog/180519/JejLjdmCDH.png?imageslim)]

    将光标移动到linux16开始的行,在行尾添加内核参数rd.break,然后按Ctrl+x启动系统;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZdPmWA9t-1606139809512)(http://banyuan.zuiyoujie.com/blog/180519/gIAAj8JFAh.png?imageslim)]

    以读写的方式重新挂载一下根分区,然后切根修改密码,在根目录下创建.autorelabel文件,exit退出后使用reboot重启正常登录。

    Note: 如果系统没有禁用SELinux,touch /.autorelabel这一步是必不可少的,如果缺少了这个文件会导致系统黑屏无法启动。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0dMJKie2-1606139809514)(http://banyuan.zuiyoujie.com/blog/180519/45c7ebH75F.png?imageslim)]


    CentOS 7破解root口令方法二

    启动时在下图界面按任意键暂停启动,然后按e键进入编辑模式;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nLEw648x-1606139809516)(http://banyuan.zuiyoujie.com/blog/180519/JejLjdmCDH.png?imageslim)]

    将光标移动到linux16开始的行,在行尾添加内核参数rw init=/sysroot/bin/bash,然后按Ctrl+x启动系统;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CJh2tAaA-1606139809519)(http://banyuan.zuiyoujie.com/blog/180519/hL23ihi1iJ.png?imageslim)]

    启动后会进入一个如下图的字符界面,切根后更改密码,根目录下创建.autorelabel文件,exit退出后使用reboot重启正常登录。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y54BYTEe-1606139809521)(http://banyuan.zuiyoujie.com/blog/180519/eh9l7CeIia.png?imageslim)]


    CentOS 7进入救援模式

    选择Troubleshooting排错,进入后选择Rescue救援模式启动。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZLKgUE5M-1606139809523)(http://banyuan.zuiyoujie.com/blog/180520/9JDl7hhm5E.png?imageslim)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HsrRSzJ1-1606139809525)(http://banyuan.zuiyoujie.com/blog/180520/316l4E82im.png?imageslim)]

    输入1选择Continue,两下回车进入救援模式的shell界面;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GSmrH5Ae-1606139809526)(http://banyuan.zuiyoujie.com/blog/180520/50ij7G7b2k.png?imageslim)]


    修复删除GRUB2 stage 1-2导致的系统无法启动

    问题现象

    //破坏stage 1-2的命令 # dd if=/dev/zero of=/dev/sda bs=1 count=446 # dd if=/dev/zero of=/dev/sda bs=1 count=10240 skip=512 seek=512 # rm -rf /boot/grub* # reboot

    找不到可引导的启动设备,报错如下图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3qJRcdTI-1606139809527)(http://banyuan.zuiyoujie.com/blog/180520/AmcL3eKkIc.png?imageslim)]

    修复方法

    使用grub2-install重新安装GRUB2 stage 1-2的内容,需要注意这是在没有切根的情况下进行安装的,需要使用--root-directory选项指定根分区路径;grub2-install命令执行过程中会依赖/usr/lib/grub/目录中的文件,若救援的光盘系统中/usr/lib/grub/目录下没有自带,则需要chroot后使用grub2-install /dev/sda进行修复。

    BIOS环境下修复grub2

    # grub2-install /dev/sda

    UEFI环境下修复grub2

    # grub2-install

    使用grub2-mkconfig命令生成grub.cfg配置文件,修复完成退出重启;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SFsMECsZ-1606139809528)(http://banyuan.zuiyoujie.com/blog/180520/glLFa03gcH.png?imageslim)]


    修复删除/boot/grub2/grub.cfg文件导致的系统无法启动

    问题现象

    无法通过grub.cfg文件加载内核进行启动,报错如下图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZnqZLRw3-1606139809530)(http://banyuan.zuiyoujie.com/blog/180520/LiG3adG87A.png?imageslim)]

    解决方法

    加载xfs文件系统模块;

    设置根分区对应磁盘的位置,这里的根分区指的是boot分区,而非真正的根分区,(hd0,1)表示第一块磁盘的第一个分区;

    指明内核文件的路径,指明真正根分区对应的磁盘分区名称,启动时禁用SELinux,防止SELinux打标签影响启动速度;

    指明initramfs文件的路径,输入boot回车启动;

    系统正常启动后,进入系统重新生成grub.cfg文件,否则下次重启还会出现这个故障。

    **补充:**grub.cfg文件可以通过命令直接生成,不需要再手工进行编写,grub2-mkconfig命令会利用/etc/grub.d/目录中的模板和/etc/default/grub文件中的设置自动生成。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q7AM92lP-1606139809531)(http://banyuan.zuiyoujie.com/blog/180520/Kgmf9eGj0F.png?imageslim)]


    修复删除/boot目录导致的系统启动故障

    问题现象

    缺少启动的相关文件,报错见下图;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LO1EBnCS-1606139809532)(http://banyuan.zuiyoujie.com/blog/180520/82Ic23F189.png?imageslim)]

    解决方法

    进入救援模式,chroot切根,挂载光盘强制安装kernel软件包;使用grub2-install命令生成grub2目录;使用grub2-mkconfig命令生成/boot/grub2/grub.cfg配置文件;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-errvM99t-1606139809533)(http://banyuan.zuiyoujie.com/blog/180520/l4ALlI4ci5.png?imageslim)]


    /etc/fstab文件错误导致的系统启动异常

    问题原因

    在/etc/fstab文件有以下三种情况的错误时,系统会先尝试自动修复,若修复失败则进入emergency shell模式,提示用户修复。

    文件中设备的UUID错误或者不存在;

    文件中的挂载点不存在(systemd会先尝试创建,不成功则进入emergency shell);

    文件中的挂载选项不正确;

    emergency shell模式:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u9IhwrI5-1606139809534)(http://banyuan.zuiyoujie.com/blog/180528/kI3G3E1hl9.png?imageslim)]

    修复方法

    输入root口令,进入系统修复/etc/fstab文件,此时的系统是没有网络的,修复完成后重启即可;


    补充:设置内核参数

    调整启动时默认使用的内核

    //方法一,根据grub.cfg配置文件中内核的顺序设置默认启动内核 # vim /etc/default/grub GRUB_DEFAULT=1 #设置默认的启动内核为第2个内核 # grub2-mkconfig -o /boot/grub2/grub.cfg #重新生成grub.cfg配置文件 # reboot //方法二,通过指定title名称的方式设定默认启动内核 # grep "^menuentry" /boot/grub2/grub.cfg #查看系统内部有多少个内核 # grub2-set-default "CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)" # grub2-editenv list #验证是否配置成功

    设置CentOS 7系统使用传统网卡名称

    //Note: 在设置完成网卡名称后,需要修改相应的ifcfg-ens32配置文件中的设备名称,否则网络服务无法正常使用。 # sed -ri '/GRUB_CMDLINE_LINUX=/s/"$/ net.ifnames=0"/' /etc/default/grub # grub2-mkconfig -o /boot/grub2/grub.cfg # reboot

    参考资料

    # man 7 BOOTUP
    最新回复(0)