Linux基础命令(二十四)系统排错

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wzj_110/article/details/89447185

一、了解系统的引导过程

        目标:知道启动的顺序,进而对症下药!

        理解操作系统开机引导和启动过程对于配置操作系统和解决相关启动问题是至关重要的。该文章陈述了 GRUB2 引导装载程序开机引导装载内核的过程和 systemd 初始化系统执行开机启动操作系统的过程。

        事实上操作系统的启动分为两个阶段:引导boot启动startup引导阶段开始于打开电源开关,结束于内核初始化完成和 systemd 进程成功运行;启动阶段接管了剩余工作,直到操作系统进入可操作状态。

        很不错的科普文章

(1)BIOS -->通电自检,通过硬件14中断来获取能够启动的磁盘,读取磁盘的第一个扇区的MBR

说明:如果有多个磁盘可以通过F12或F9来选择启动的磁盘,默认是第一个(CMOS记录的),我的是F9

(2)MBR --->内含启动引导代码,最基本的启动引导程序

(3)启动引导程序(Boot loader) -->一个可以读取内核文件来执行的软件,是操作系统安装在MBR上面的一个软件

(4)内核文件-->启动操作系统

 第0柱面、0磁头、1扇区组成主引导程序(Boot loader)

它由三部分组成,主引导记录MBR(Mater Boot Record)、 硬盘分区表DPT(Disk Partition table)、硬盘有效标志(55AA)

Boot loader的主要任务

提供选项:用户可以选择不同的启动选项进入相应的操作系统,多重引导的重要功能

加载内核文件:直接指向可以使用的程序段来启动操作系统(常见直接加载Windows的内核文件来开机)

转交其它的启动引导程序:将启动管理转交给其它的启动引导程序负责(启动引导程序可能被安装每个分区的启动扇区上)

二、系统排错

(1)硬盘的引导阶段,不小心错误删除MBR,如何恢复?

说明:将启动引导程序删除,找不到内核文件的位置,无法加载内核文件,就无法用内核来启动操作系统

状态

说明:并没有进入引导阶段,因为记忆被删除了卡顿了;突然想起了一首歌迷途的羔羊,希望现实的你不要迷惘!

怎么办?治疗呗,现实中总有奇迹在发生(植物人被唤醒),我们不需要创造奇迹,这里给它创造记忆,让其继续干活!

首先得有帮助手段

真实的主机,通过光盘或者光驱来启动,我的是F9,选择BIOS启动的选项!

虚拟机,可以通过CDROM来选择进行修复(设置为优先),本文以虚拟机为案例

说明:必须关闭当前虚拟机,才能进行设置!

注意:看提示信息

说明1:grub2-install /dev/vda   修复启动分区所在的硬盘(注意这里千万不要加number)

说明1:通过执行chroot 的命令把环境切换到我们的硬盘系统中,而不是cdrom环境,同时注意sh的变化!

(2)grub2文件引导阶段,引导文件被删除

注意下面:看/boot和/根分区的情况!

grub2.cfg配置文件的核心部分

set root="hd0,msd0s1" -->表示是第一块磁盘的mbr格式的第一个分区(区别于grub的双0),注意如果是gpt格式则写gpt)

说明:该root是指定grub2配置文件所在的设备,即最初分区的/boot!

查看方式: fdisk -l |grep /boot     #boot分区的位置,而grub2配置文件是在/etc/grub2/目录中

linux16 /vvmlinuz_3.10*  ro root=/dev/vdb1

说明:Linux内核文件以及内核执行所携带的参数,注意是根目录的原因(历史因素,需要搭配上面的root,加上前缀/boot)

root=/dev/vda3   表示:Linux文件系统中,根目录挂载哪个设备(分区)中!

initrd16 /initramfs_3.10*.img                       -->启动分区的初始化镜像

说明:这个是initramfs所在的文件名字,也需要搭配【set root=xxx】选项的设备才能得到正确的位置!

boot                                                                -->注意是启动分区,而不是reboot重启系统

测试:登陆系统

说明:以上操作只是临时生效,进入系统之后,必须重新生成grub2的配置文件,不然每次都是想同的状况!

补充:如果selinux开启,由于上下文的类型不匹配,无法用boot继续启动

解决策略:通过光驱设置selinux为disabled,先后修改,boot启动之后,restorecon -Rv  grub.cfg文件,并且selinux设置回来

(3)内核文件丢失

现象

说明:告诉我们找不到内核文件,给它补上不就完了码!

测试:光驱驱动,进入挽救模式

说明:完成之后,无用的包和相关的文件最好删除!

rpm拆解(一步一步安装太慢),相关参数的含义i(input)d(directory)-->不指定表示当前!

(rpm包的差解) cpio - copy files to and from archives

注意:cp的时候文件的上下文对应类型取决于当前的目录,如果是mv过去,由于不能识别上下文类型(mnt_t)导致无法开机

(4)系统的初始化镜像文件丢失

实验现象

initramfs (initram file system)

说明:mkinitrd    <initrd-image>    <kernel-version>  #依据内核版本,产生镜像文件

说明:这个文件的建立,上下文类型正确!

(5)开机模式的错误链接

举例:将开机的图形模式链接到重启模式

systemctl set-default reboot.target

解决方法:e-->ctrl+x -->quite 5(临时图形模式)

注意:selinux关闭和不关闭情形很大!(并且不能chroot)

(6)忘记root的密码

e:进行在线编辑

说明:修改内核参数为 rw rd.break,然后ctrl+x执行 #可读写(如果这里指定ro,切换环境后,就需要重新挂载了/sysroot了)

rd.break 是RAM disk里面的操作系统状态,需要chroot才能换取原来的操作系统的环境

    .autorelabel的说明:由于rd.break是在RAM disj的环境下,系统暂时是没有SELinux的限制的,所以修改了密码,这个/etc/shadow这个文件的安全上下文会被取消。如果没有让系统启动时自动恢复SELinux的安全上下文,在SELinux为enforcing的状态下,系统将无法登陆,而.autorelable就是让系统启动的时候自动使用默认的SELinux类型,写入每个文件(时间比较长)

补充:既然我们知道/.autorelable的含义,并且这样做等待的时间太常,有没有替代方案

1)root修改密码之后,修改selinux的配置文件为permissive

2)reboot后,使用root身份 restorecon -Rv /etc

3)重新修改selinux的配置文件为enforcing 然后setenforce 1

三、系统修复总结

1.当系统丢失了/boot/的文件和fstab文件,这个时候就需要进入RHEL系统光盘进入救援修复模式修复或者在其他linux系统下修复

2.在救援修复模式中按照向导先看分区是否能够找到,然后看内核文件,最后看引导文件!

3.内核安装是在伪系统中通过“rpm -ivh”运行的,"--root=/mnt/sysimage --enforce" 以root的身份把内核强制安装在硬盘系统下

4.grub文件的修复中"grub2-install /dev/sda"在第一块硬盘上添加引导

5.grub2-mkconfig /boot/grub2/grub.conf"重新生成引导项到文件

6.在救援修复模式中,常用的命令就是“pwd”和“ls”,一定注意您当前所在的位置!

6.系统默认把硬盘挂载在“/mnt/sysimage”在挂载的时候一定不能习惯性的把光盘挂载在“/mnt”否则你会删掉硬盘上的所有文件

7.总规划:救援模式——分区文件——内核相关文件——引导grub2文件

 

展开阅读全文

没有更多推荐了,返回首页