• 自动秒收录
  • 软件:1973
  • 资讯:56935|
  • 收录网站:211312|

IT精英团

Linux系统的故障排除与修复技巧

Linux系统的故障排除与修复技巧

浏览次数:
评论次数:
编辑: 阳煦
信息来源: ITPUB
更新日期: 2022-06-23 20:56:19
摘要

我发现Linux系统在启动过程中会出现一些故障,导致系统无法正常启动,我在这里写了几个应用单用户模式、GRUB命令操作、Linux救援模式的故障修复案例帮助大家了解此类问题的解决。(一)单用户模式Li

  • 正文开始
  • 相关阅读
  • 推荐作品

我发现Linux系统在启动过程中会出现一些故障,导致系统无法正常启动。我在这里写了几个使用单用户模式、GRUB命令操作和Linux rescue模式的故障修复案例,帮助你了解这类问题的解决方法。

(一)单用户模式

Linux系统提供单用户模式(类似于Windows安全模式),可以在最小环境下维护。在单用户模式下(运行级别1),Linux引导到根shell,网络被禁用,只有少数进程运行。单用户模式可用于修改文件系统损坏、恢复配置文件、移动用户数据等。

以下列举了几个单用户模式修复系统故障的典型案例:

案例一:root密码忘记

单用户模式下,Linux不需要root密码(红帽系统不需要root密码,SuSe需要。不同的Linux系统略有不同。本文以Fedora Core 6为例进行说明),这使得修改root密码变得非常容易。当系统无法引导进入多用户模式时,知道如何进入单用户模式非常重要。

1.在系统启动的过程中,会出现启动界面。按任意键进入GRUB菜单选项。(如果以后不想要这个提示,只需转到GRUB菜单选项,删除配置文件grub.conf中的“hiddenmenu”项)

2.按“E”键编辑GRUB引导菜单选项,按“E”键后编辑GRUB屏幕。通过箭头键向下移动到内核行,并按“E”键,

3.在尾行光标处加单,回车返回上一屏,按“B”开机,系统自动进入单用户模式。如果要更改root密码,请执行命令:sh-3.1# passwd root

更改成功后,执行命令exit退出并重新启动。

您可以纠正许多阻止系统在单用户模式下正常启动的问题,例如:

1.禁用可能会停止系统操作的服务。如果Samba服务被禁用,则执行:sh-3.1# chkconfig smb off。Samba服务将不会在下次系统启动时启动。

2.更改系统的默认运行级别。如果X Window无法启动或失败,可以编辑/etc/inittab文件,通过文本登录,将initdefault的引导级别更改为3: ID: 3:id:3:initdefault:

案例二:硬盘扇区错乱

启动过程中最容易遇到的问题是硬盘可能出现坏轨或扇区混乱(数据损坏),这种情况多是由于非正常断电和非正常关机造成的。

这种问题发生时,当系统启动时,屏幕会显示:

按root密码或ctrl D:

此时,输入root密码系统自动进入单用户模式,输入:

fsck -y /dev/hda6

(fsck是文件系统检测修复命令,“-y”设置为检测到错误时自动修复,/dev/hda6是有错误的硬盘分区。请根据具体情况更改该参数。)

系统修复后,只需用“reboot”命令重启即可。

案例三、GRUB选项设置错误

“错误15”表示系统找不到grub.conf中指定的内核

GRUB引导错误消息。我们观察到内核文件“vmlinuz”因为打字错误被打成了“vmlinux”,所以系统找不到内核的可执行文件。

我们可以按任意键返回GRUB编辑界面并修改这个错误。输入并保存后,我们可以按“B”键正常开机。当然,别忘了进入系统后修改grub.conf文件中的这个错误。

这是许多Linux新用户在修改GRUB设置时容易犯的错误。当出现这种黑屏提示时,请注意错误消息,您可以相应地修复它。

(二)GRUB引导故障排除

我发现有时候Linux启动后会直接进入GRUB命令行界面(只有“GRUB”提示符)。这时候很多用户选择重装grub甚至重装系统。

其实一般而言此故障的原因最常见的有两个:

一是GRUB配置文件中选项设置错误;

二是GRUB配置文件丢失(还有少数原因,如内核文件或镜像文件损坏、丢失,/boot目录误删除等)


如果是第一种情况,可以首先通过GRUB命令引导系统后修复;若是第二种情况,则要使用Linux救援模式修复了(本文后续有描述)。

  

首先,我们需要了解GRUB启动系统的引导过程,grub.conf文件中主要的配置选项如下:


(注意,GRUB配置文件为/boot/grub/grub.conf, /etc/grub.conf只是此文件的软链接)

title Fedora Core (2.6.18-1.2798.fc6)

root (hd0,0)

kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quiet initrd /boot/initrd-2.6.18-1.2798.fc6.img

  

其中:

“title”段指定了GRUB引导的系统:

“root”段指定了/boot分区所在的位置:

“kernel”段指定了内核文件所在位置,内核加载时权限属性为只读(“ro”)以及指定根分区所在位置(root=LABEL=/);

“initrd”指定了镜像文件所在位置。


所以GRUB在引导时顺序为首先加载/boot分区,然后依次载入内核与镜像文件。

  


案例



“title Fedora Core (2.6.18-1.2798.fc6)”段被误删除


此时,系统启动后会自动进入“GRUB>”命令行,为排除故障我们可以依次做如下操作:

  

1、查找/boot/grub/grub.conf文件所在分区GRUB> find /boot/grub/grub.conf(hd0,0)

  

2、查看grub.conf文件错误GRUB>cat (hd0,0)/boot/grub/grub.conf建议系统安装设置好后,要将grub.conf文件备份,如果有备份文件如grub.conf.bak,则此时可以查看备份文件,与当前文件比较,发现错误:GRUB>cat (hd0,0)/boot/grub/grub.conf.bak

  

3、确认错误后,先通过命令行方式完成GRUB引导,进入系统后再行修复grub.conf文件错误:

1)指定/boot分区root (hd0,0)

2)指定内核加载kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quiet

3)指定镜像文件所在位置initrd /boot/initrd-2.6.18-1.2798.fc6.img

提示:GRUB支持tab键命令补全功能

  

4、从/boot分区启动boot (hd0,0)

命令行模式可以在GRUB菜单模式中通过按“c”键调用,也可以用于测试新编译的内核(设置kernel、initrd引导新内核及镜像文件)。增加对GRUB引导以及Linux系统引导知识的了解将对此类故障排除大有帮助。

(三)Linux救援模式应用

当系统连单用户模式都无法进入时或出现GRUB命令行也不能解决的引导问题,我们就需要使用Linux救援模式来进行故障排除了。


步骤如下:


1、将Linux安装光盘(如果使用CD光盘,则放入第一张引导光盘)放入光驱,设置固件CMOS/BIOS为光盘引导,当Linux安装画面出现后,在“boot:”提示符后输入“linux rescue”回车进入救援模式。(想了解救援模式详细信息,还可以按F5键查看)

  

2、系统会检测硬件,引导光盘上的Linux环境,依次提示你选择救援模式下使用的语言(建议选择默认的英文即可,根据笔者测试,部分Linux系统选择中文会出现乱码);键盘设置用默认的“us”就好;网络设置可以根据需要,大部分故障修复不需要网络连接,可不进行此项设置,选择“No”。

  

3、接下来系统将试图查找根分区,出现挂载提示,设置默认在救援模式,硬盘的根分区将挂载到光盘Linux环境的/mnt/sysimage目录下,默认选项“continue”表示挂载权限为读写:“Read-only”为只读,如果出现检测失败可以选择“skip”跳过。此处,因为要对系统进行修复,所以需要有读写权限,一般选择默认选项“continue”。

  

进入下一步后,系统提示执行“chroot /mnt/sysimage”命令,可以将根目录挂载到我们硬盘系统的根目录中去。

   


案例一:双系统启动修复



当我们安装双系统环境,先安装Linux再安装Windows;或者已经安装好双系统环境的Windows损坏,在重新安装Windows后,保存 GRUB的MBR(Master Boot Record,主引导记录)会被Windows系统的自举程序NTLDR所覆盖,造成Linux系统无法引导。

  

1、如果要恢复双系统引导,首先用上述方法进入救援模式,执行chroot命令如下:sh-3.1# chroot /mnt/sysimage

  

2、将根目录切换到硬盘系统的根目录中,然后执行grub-install命令重新安装GRUB:sh-3.1# grub-install /dev/hda“/dev/hda”为硬盘名称,如使用SCSI硬盘或Linux安装在第二块IDE硬盘,此项设置要做相应调整。

  

3、然后依次执行exit命令,退出chroot模式及救援模式(执行两次exit命令):sh-3.1# exit系统重启后,将恢复GRUB引导的双系统启动。 



案例二:系统配置文件丢失修复


 

系统在引导期间,很重要的一个过程就是init进程读取其配置文件/etc/inittab,启动系统基本服务程序及默认运行级别的服务程序完成系统引导,如果/etc/inittab误删除或修改错误,Linux将无法正常启动。此时,只有通过救援模式才可以解决此类问题。


/etc/inittab文件丢失引导错误示例

  

1、有备份文件的恢复办法进入救援模式,执行chroot命令后,如果有此文件的备份(强烈建议系统中的重要数据目录,如/etc、/boot等要进行备份),直接将备份文件拷贝回去,退出重启即可。


如果是配置文件修改错误,如比较典型的/boot/grub/grub.conf及/etc/passwd的文件修改错误,也可以直接修正恢复。


假设有备份文件/etc/inittab.bak,则在救援模式下执行:sh-3.1# chroot /mnt/sysimage sh-3.1# cp /etc/inittab.bak /etc/inittab

  

2、没有备份文件的恢复办法如果一些配置文件丢失或软件误删除,且无备份,可以通过重新安装软件包来恢复。


首先查找到/etc/inittab属于哪一个RPM包(即便文件丢失,因为存在RPM数据库,一样可以查找到结果):

sh-3.1# chroot /mnt/sysimage sh-3.1# rpm -qf /etc/inittab initscripts-8.45.3-1

  

退出chroot模式:

sh-3.1# exit

  

挂载存放RPM包的安装光盘(在救援模式下,光盘通常挂载在/mnt/source目录下):

sh-3.1# mount /dev/hdc /mnt/source

  

Fedora系统的RPM包存放在光盘Fedora/RPMS目录下,其他Linux存放位置大同小异,我在这里不一一列举;


另外,因为要修复的硬盘系统的根目录在/mnt/sysimage下,需要使用——root选项指定其位置。


覆盖安装/etc/inittab文件所在的RPM包:

sh-3.1# rpm -ivh ——replacepkgs ——root /mnt/sysimage /mnt/source/Fedora/RPMS/ initscripts-8.45.3-1.i386.rpm


其中的rpm命令选项“——replacepkgs”表示覆盖安装,执行完成后,即已经恢复了此文件。

  

如果想只提取RPM包中的/etc/inittab文件进行恢复,可以在进入救援模式后,执行命令:

sh-3.1# rpm2cpio /mnt/source/Fedora/RPMS/initscripts-8.45.3-1.i386.rpm | cpio -idv ./etc/inittab sh-3.1# cp etc/inittab /mnt/sysimage/etc

  

注意此命令执行时不能将文件直接恢复至/etc目录,只能提取到当前目录下,且恢复的文件名称所在路径要写完整的绝对路径。提取文件成功后,将其复制到根分区所在的/mnt/sysimage目录下相应位置即可。

  

救援模式是维护Linux的有力武器,本文以上述两个例子讲解了它的应用方法,希望能够给读者一点启示。解决Linux系统启动的故障,必须充分理解Linux的引导过程,才能够对故障进行有效的判断和处理。


标签:系统 模式 文件
python异常处理10分钟
« 上一篇 2022-06-23
  • python异常处理10分钟
    0阅读 0条评论 个赞
    异常处理:捕获异常,简单的捕获异常语法,在程序开发时,可以尝试加如try来捕获异常try:尝试执行的代码except:出现错误的处理try尝试下方填写要尝试的密码,不确定能不能够正常执……
  • 知道雷迪斯关系数据库这些细节,可以少踩很多坑
    0阅读 0条评论 个赞
    在使用Redis的过程中,你是否遇到过下面这些问题:开启RDB落盘,业务频繁出现请求超时。除了save和bgsave命令,还有哪些操作会触发RDB落盘?执行了flushall,发……
  • 大厂中的技术专家:建筑设计中的常见思维模式
    0阅读 0条评论 个赞
    上周我写的一篇文章《关于技术能力的思考和总结》引起了大家的关注,好多读者的评论“以写代想、以想促真、以讲验真”,大家的感受很深刻,基于上次的文章,这篇文章我其实更想跟大家聊聊一些常用的思考方法,思考问……
  • 在线K8s群集性能评估 基本服务部署调整
    0阅读 0条评论 个赞
    对于非结构化的数据存储系统来说,LIST操作通常都是非常重量级的,不仅占用大量的磁盘IO、网络带宽和CPU,而且会影响同时间段的其他请求(尤其是响应延迟要求极高的选主请求),是集群稳定性的一……
  • 当字节跳动向美国出口中国996.
    0阅读 0条评论 个赞
    作者|GeorgiaWells/YoreeKoh/SalvadorRodriguez来源|WSJ在荣克离职时发布的一份内部备忘录中,他说,“TikTok对待员工的方式与TikTok平台代表的……
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
  • 30个重要的Python字符串方法
    0阅读 0条评论 个赞
    以下文章来源于公众号-法纳斯特,作者小F字符串是Python中基本的数据类型,几乎在每个Python程序中都会使用到它。这次给大家介绍30个最重要的内置字符串方法,希望大家能从中找到对自己有帮助的技巧……
  • 致Linux运维:你真的需要背熟这些高频命令!
    1阅读 0条评论 个赞
    这些命令都是在系统运维常敲的命令,几天不敲,有些就记不全了,对于职业的运维工程师来说这些最好能熟记并能举一反三。虽然什么都可以百度、谷歌,但是如果你能在工作中很流畅的敲出来并解决问题,那么工作效率肯定……
  • 如何在Mac上愉快地使用Docker
    0阅读 0条评论 个赞
    一、目标任务首先要明确的是,作为了一个每天在LinuxServer上rm-rf的人来说,如果想在Mac上使用Docker,最舒服的也是兼容所有dockercli命令行操作……
  • Kubernetes日志收集例程 能正确使用吗?
    0阅读 0条评论 个赞
    一、准备1、关于容器日志Docker的日志分为两类,一类是Docker引擎日志;另一类是容器日志。引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置。本文主要介绍容器日志,容器日志可以……
  • 运维!你要对数据心存敬畏~
    0阅读 0条评论 个赞
    简述“对数据要有敬畏之心”这个主题是同事在一个早会分享时提出的,却直接引起我心中的共鸣。前几年各种删库跑路事件、Facebook宕机事件仍不绝于耳,虽然大家将“删库跑路”当作一个调侃与谈资,但上升到“……
  • 可以解决80%故障的故障排除方法
    1阅读 0条评论 个赞
    在讲解事件、故障处理思路前,先讲一个故障场景(以呼叫中心系统作为一例子):业务人员反映呼叫中心系统运行缓慢,部份电话在自助语言环节系统处理超时,话务转人工座席,人工座席出现爆线情况。运维人员开始忙活了……
  • 大厂企业系列仓库建设规划(整理需要一周时间 建议收藏~)
    1阅读 0条评论 个赞
    以下文章来源于公众号-大数据兵工厂,作者大数据兵工厂大家好,推荐一下老兵抽空整理了企业级数仓建设方案。整体内容包括:数仓架构数仓分层规划数据流向规划数据同步策略数仓命名规范通篇内容紧贴企业级建设主题,……
  • 前端质量|基于业务驱动的前端绩效有效实践案例
    1阅读 0条评论 个赞
    一、背景1.1.前端性能优化的业务意义前端的本质价值是什么?我认为是给用户创造良好的交互体验。前端性能对用户体验、对业务跳失率的影响,在业界已有共识,不言而喻。根据Google的数据,如果移动站点……
  • 阿里云伊利:云原生如何解决企业降本增效问题?
    0阅读 0条评论 个赞
    2020年以来,新冠疫情改变了全球经济的运行与人们的生活。数字化的生产与生活方式成为后疫情时代的新常态。今天,云计算已经成为全社会的数字经济基础设施,而云原生技术正在深刻地改变企业上云和用云的方式。如……
  • 美团:用了几年时间踩雷 然后总结出数据管理避坑的策略
    0阅读 0条评论 个赞
    目录一、序言二、背景介绍三、治理体系化思考3.1什么是数据治理体系化?3.2数据治理体系化如何解决目前治理存在的问题?3.3业务数据管治体系框架如何建设?3.4体系框架如何落地实施?四、治理体……
  • 数据库主键一定要自己增加吗?有哪些不推荐自我增加的场景?
    0阅读 0条评论 个赞
    我们平时建表的时候,一般会像下面这样。CREATETABLE`user`(`id`intNOTNULLAUTO_INCREMENTCOMMENT'主键',`name`char(10)NOTNULLDE……
  • 用MySQL写SQL的21个好习惯
    0阅读 0条评论 个赞
    前言每一个好习惯都是一笔财富,本文分SQL后悔药,SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~1.写完SQL先explain查看执行计划(SQL性能优化)……
  • 深度知识的六个维度:如何让人工智能真正理解世界?
    1阅读 0条评论 个赞
    智能的真正标志不是知识,而是想象力。作者|GadiSinger编译|王玥编辑|陈彩娴什么知识让我们变得聪明?我们用来理解世界、解释新体验和做出深思熟虑的选择的认知结构是什么?定义一个阐明……
  • 大厂中的技术专家:建筑设计中的常见思维模式
    0阅读 0条评论 个赞
    上周我写的一篇文章《关于技术能力的思考和总结》引起了大家的关注,好多读者的评论“以写代想、以想促真、以讲验真”,大家的感受很深刻,基于上次的文章,这篇文章我其实更想跟大家聊聊一些常用的思考方法,思考问……
  • 管理关系型数据库常用的统计语句
    1阅读 0条评论 个赞
    以下文章来源于公众号-悦专栏,作者马听这一节内容,整理一些管理MySQL会经常用到的统计语句,比如表的碎片率、非InnoDB的表、所有用户和所有业务库等。1查看所有业务库selectsche……
  • 运维入坑必看:Kubernetes平台架构解读
    1阅读 0条评论 个赞
    Kubernetes是一个开源容器编排平台,管理大规模分布式容器化软件应用,是云计算发展演进的一次彻底革命性的突破。Kubernetes是谷歌的第三代容器管理系统,是Borg独特的控制器和Omega灵……
  • 收藏!四种异常检测方法综述
    0阅读 0条评论 个赞
    作者丨Ai,来源丨宅码编辑丨极市平台本文收集整理了公开网络上一些常见的异常检测方法(附资料来源和代码)。不足之处,还望批评指正。一、基于分布的方法1.3sigma基于正态分布,3sigma准则认为超……
  • 深入了解Linux CPU上下文切换
    3阅读 0条评论 个赞
    我们都知道Linux是一个多任务操作系统,它支持的任务同时运行的数量远远大于CPU的数量。当然,这些任务实际上并不是同时运行的(SingleCPU),而是因为系统在短时间内将CPU轮流分……
  • 如何保证MySQL和Redis的数据一致性?
    1阅读 0条评论 个赞
    以下文章来源于公众号-楼仔,作者楼仔我直接先抛一下结论:在满足实时性的条件下,不存在两者完全保存一致的方案,只有最终一致性方案。根据网上的众多解决方案,总结出6种,直接看目录:不好的方案1.先……
  • 嵌入式系统登录的简单方法
    3阅读 0条评论 个赞
    来源|我姓梁很多场景都需要记录日志,在嵌入式系统中,特别是单片机这种存储资源有限的环境下,就需要一种轻量级的存储方法。系统日志在嵌入式设备应用场景中,系统日志时常可以监控设备软件的运行状态,及时记录……
最近发布资讯
更多