Linux系统启动故障如何修复?这几个案例帮你解决问题~

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

[[209350]]

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

(一)单用户模式

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

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

案例一:root 密码忘记

在单用户模式中,Linux 不需要 root 密码 (Red Hat 系统不需要 root 密码,但 SuSe 则需要,不同 Linux 系统稍有差别,本文以 Fedora Core 6 为例讲解),这使更改 root 密码非常容易。了解当系统引导进入多用户模式失败时,如何进入单用户模式,非常重要。

1、 在系统启动过程中,会出现开始界面,按任意键,进入 GRUB 菜单选项。

若希望以后无此提示,直接进入 GRUB 菜单选项,删除配置文件 grub.conf 中 “hiddenmenu” 项即可。

2、 按 “e” 键编辑 GRUB 引导菜单选项,按 “e” 键后的 GRUB 屏幕。通过箭头键下移到 kernel 行,并按 “e” 键,

3、在尾行光标处添加 single,按回车键返回前一个屏幕,按 “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:initdefault:

案例二:硬盘扇区错乱

在启动过程中最容易遇到的问题就是硬盘可能有坏道或扇区错乱 (数据损坏) 的情况,这种情况多由于异常断电、不正常关机导致。此种问题发生,在系统启动的时候,屏幕会显示:

Press root password or ctrl+D:此时输入 root 密码系统自动进入单用户模式,输入 “fsck -y /dev/hda6”(fsck 为文件系统检测修复命令,“-y” 设定检测到错误自动修复,/dev/hda6 为发生错误的硬盘分区,请依据具体情况更改此参数),系统修复完成后,用命令 “reboot” 重新启动即可。

案例三、GRUB 选项设置错误

“Error 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 只是此文件的软链接):

  1. title Fedora Core (2.6.18-1.2798.fc6) 
  2.  
  3. root (hd0,0) 
  4.  
  5. kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quiet initrd /boot/initrd-2.6.18-1.2798.fc6.img  

其中

  1. “title” 段指定了 GRUB 引导的系统:
  2. “root” 段指定了 /boot 分区所在的位置:
  3. “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 将无法正常启动,如图 7 所示。此时,只有通过救援模式才可以解决此类问题。

/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 的引导过程,才能够对故障进行有效的判断和处理。 

责任编辑:庞桂玉 来源: talkwithtrend
相关推荐

2011-08-01 09:32:26

2023-09-02 21:39:47

2018-12-06 09:00:06

LinuxWindows双系统

2019-11-06 10:00:21

Linux 技巧操作系统

2019-08-19 14:51:56

Linux 系统 数据

2011-09-27 09:42:01

Linux系统

2009-12-03 10:00:46

Linux系统启动

2013-01-30 15:07:59

Shell

2013-07-25 14:50:03

2010-03-02 16:13:50

Linux系统启动过程

2010-03-02 15:45:57

Linux系统启动过程

2021-02-09 08:23:02

Linux操作系统

2016-01-21 10:35:35

AR技术

2020-03-25 15:07:21

数据挖掘大数据思维

2022-02-21 16:16:24

灾难恢复解决方案备份

2011-08-19 10:13:05

iPhone开发

2009-09-22 10:11:56

Windows 7启动修复

2018-06-19 16:25:40

编程语言Python爬虫

2009-11-09 16:01:36

路由器操作系统

2010-01-12 13:47:18

Linux grub
点赞
收藏

51CTO技术栈公众号