当前位置: 首页 > 科技观察

Linux系统启动失败如何解决?这几个案例帮你解决问题~

时间:2023-03-13 09:06:04 科技观察

Linux系统在启动过程中会出现一些故障,导致系统无法正常启动。笔者在这里写了几个应用单用户模式、GRUB命令运行、Linux救援模式失败的修复案例,帮助大家了解此类问题的解决方法。(1)单用户模式??Linux系统提供了单用户模式(类似于Windows安全模式),可以在最小环境下进行系统维护。在单用户模式下(运行级别1),Linux启动到rootshell,网络被禁用,只有少数进程在运行。单用户模式可用于修复文件系统损坏、恢复配置文件、移动用户数据等。下面列举几种典型的单用户模式下修复系统故障的案例:案例一:root密码忘记有区别的是,本文以FedoraCore6为例),这使得修改root密码变得非常容易。当系统无法引导进入多用户模式时,知道如何进入单用户模式很重要。1、系统启动时,会出现启动界面,按任意键进入GRUB菜单选项。如果以后不想要这个提示,可以直接进入GRUB菜单选项,删除配置文件grub.conf中的“hiddenmenu”项。2.按“e”键编辑GRUB引导菜单选项,按“e”键后的GRUB屏幕。使用箭头键向下移动到内核行,然后按“e”键。3、在最后一行光标处添加单机,按回车键返回上一画面,按“b”键开机,系统自动进入单用户模式。如果要修改root密码,执行命令:sh-3.1#passwdroot修改成功后,执行命令exit退出重启。您可以纠正许多阻止系统在单用户模式下正常启动的问题,例如:1.禁用可能停止系统的服务。例如禁用Samba服务,执行:sh-3.1#chkconfigsmboff系统下次启动时,将不再启动Samba服务。2.更改系统默认运行级别。如果XWindow无法启动或失败,可以编辑/etc/inittab文件,使用文本登录,将initdefault启动级别修改为3:id:3:initdefault:情况2:磁盘扇区紊乱最可能遇到的问题启动过程中硬盘可能出现坏道或扇区紊乱(数据损坏),这往往是异常断电或非正常关机引起的。出现此类问题时,系统启动时,屏幕会显示:Pressrootpasswordorctrl+D:此时输入root密码,系统会自动进入单用户模式,输入“fsck-y/dev/hda6”(fsck为文件系统检测修复命令,“-y”设置为检测到错误时自动修复,/dev/hda6为发生错误的硬盘分区,请根据需要更改此参数具体情况),系统修复完成后,使用命令“rebo??ot”重新启动。案例三:GRUB选项设置错误“Error15”表示系统找不到grub.conf中指定的内核。GRUB引导报错信息,我们观察到由于错别字,内核文件中的“vmlinuz”被键入为“vmlinux”,导致系统找不到内核的可执行文件。我们可以按任意键回到GRUB编辑界面,修改这个错误,回车保存,然后按“b”键正常开机。当然,进入系统后不要忘记修改grub.conf文件中这里的错误。这是许多Linux初学者在修改GRUB设置时常犯的错误。当出现这个黑屏提示时,要注意错误信息,然后有针对性地修复。(2)GRUB引导故障排除我发现有时Linux会在引导后直接进入GRUB命令行界面(只有“grub>”提示符)。这时候很多用户会选择重装GRUB甚至重装系统。其实一般来说,造成这种失败的原因最常见的有两种:一是GRUB配置文件中的选项设置不正确;另一种是GRUB配置文件丢失(也有几种原因,如内核文件或镜像文件损坏或丢失,/boot目录误删等)。如果是第一种情况,可以先通过GRUB命令引导系统,然后进行修复;如果是第二种情况,则需要使用Linux救援模式进行修复(本文后面会介绍)。首先,我们需要了解GRUB引导系统的引导过程。grub.conf文件中的主要配置选项如下(注意GRUB配置文件是/boot/grub/grub.conf,/etc/grub.conf只是这个文件的软链接):titleFedoraCore(2.6.18-1.2798.fc6)root(hd0,0)kernel/boot/vmlinuz-2.6.18-1.2798.fc6roroot=LABEL=/rhgbquietinitrd/boot/initrd-2.6.18-1.2798.fc6.img“标题”部分指定GRUB引导的系统:“root”部分指定/boot分区的位置:“kernel”部分指定内核文件的位置,权限属性为只读(“ro”)和指定根分区的位置(root=LABEL=/);initrd指定映像文件的位置。所以GRUB先加载/boot分区,然后在开机时依次加载内核和镜像文件。案例:“titleFedoraCore(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.bak3。确认错误后,先通过命令行完成GRUB引导,进入系统后修复grub.conf文件错误:1)指定/boot分区根目录(hd0,0)2)指定内核加载内核/boot/vmlinuz-2.6.18-1.2798.fc6roroot=LABEL=/rhgbquiet3)指定镜像文件initrd的位置/boot/initrd-2.6.18-1.2798.fc6.img提示:GRUB支持tab键命令completionfunction4.Bootfrom/bootpartition(hd0,0)命令行模式可以在GRUB菜单模式下按“c”键调用,也可以用来测试新编译的内核(settingkernel,initrd引导新内核和映像文件)。增加对GRUB引导以及Linux系统引导的了解将对此类故障排除大有帮助。(3)Linux救援模式的应用当系统连单用户模式都无法进入或者出现无法通过GRUB命令行解决的引导问题时,我们就需要使用Linux救援模式进行故障排除。步骤如下:1.将Linux安装光盘(如果使用光盘,则放入第一张引导光盘)放入光驱,将固件CMOS/BIOS设置为光盘引导,当出现Linux安装画面时,点击在“boot:”提示符号后输入“linuxrescue”回车进入救援模式。(如果想了解救援模式的详情,也可以按F5键查看)2、系统会检测硬件,启动光盘上的Linux环境,并提示选择使用的语言依次进入rescue模式(建议选择默认英文,根据笔者测试,部分linux系统选择中文会出现乱码);默认的“us”适用于键盘设置;网络设置可根据需要进行,大多数故障修复不需要网络连接,可以保留此设置,选择“否”。3、接下来系统会尝试寻找根分区,会出现挂载提示。默认设置为救援模式。将硬盘的根分区挂载到光盘上Linux环境的/mnt/sysimage目录下。默认选项“continue”表示挂载权限对于读写:“Read-only”为只读,如果检测失败,可以选择“skip”跳过。这里因为需要修复系统,所以需要读写权限,一般选择默认选项“继续”。进入下一步后,系统提示执行“chroot/mnt/sysimage”命令,将根目录挂载到我们硬盘系统的根目录下。案例一:双系统启动修复当我们安装双系统环境时,先安装Linux,再安装Windows;或者已经安装在双系统环境下的Windows损坏,重装Windows后,保存的GRUBMBR(MasterBootRecord,主引导记录)会被Windows系统的bootloaderNTLDR覆盖,导致Linux系统无法开机。1、如果要恢复双系统启动,先用上面的方法进入rescue模式,执行chroot命令如下:sh-3.1#chroot/mnt/sysimage2、将根目录切换到root硬盘系统目录,然后执行grub-install命令重新安装GRUB:sh-3.1#grub-install/dev/hda"/dev/hda"为硬盘名称。如果您使用SCSI硬盘或在第二个IDE硬盘上安装Linux,则应相应地调整此设置。3、然后依次执行exit命令退出chroot模式和rescue模式(执行两次exit命令):sh-3.1#exit系统重启后,将恢复GRUB引导的双系统引导。案例二:系统配置文件丢失修复系统在开机期间,一个很重要的过程就是init进程读取它的配置文件/etc/inittab,启动系统的基本服务程序和默认运行级别的服务程序来完成系统引导,如果/etc/inittab被错误删除或修改,Linux将无法正常启动,如图7所示。此时只有rescue模式可以解决此类问题。/etc/inittab文件丢失开机报错示例1.备份文件恢复方式进入rescue模式,执行chroot命令后,如果有该文件的备份(强烈建议系统重要数据目录,如为/etc,/boot等做一个备份),直接把备份文件copy回去,退出重启即可。如果是配置文件修改错误,比如典型的/boot/grub/grub.conf和/etc/passwd文件修改错误,也可以直接修改恢复。假设有一个备份文件/etc/inittab.bak,在救援模式下执行:sh-3.1#chroot/mnt/sysimagesh-3.1#cp/etc/inittab.bak/etc/inittab2。如果没有备份文件恢复方法某些配置文件丢失或软件被误删除,没有备份。您可以通过重新安装软件包来恢复它。首先找出/etc/inittab属于哪个RPM包(即使文件丢失,因为有RPM数据库,还是可以找到结果的):sh-3.1#chroot/mnt/sysimagesh-3.1#rpm-qf/etc/inittabinitscripts-8.45.3-1退出chroot模式:sh-3.1#exit挂载存放RPM包的安装光盘(救援模式下,光盘一般挂载在/mnt/source目录下):sh-3.1#mount/dev/hdc/mnt/sourceFedora系统的RPM包存放在CD的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。rpmwhererpm命令的选项“--replacepkgs”表示覆盖安装。执行完成后,文件已经恢复。如果只想解压RPM包中的/etc/inittab文件进行恢复,可以在进入救援模式后执行命令:sh-3.1#rpm2cpio/mnt/source/Fedora/RPMS/initscripts-8.45.3-1.i386。转数|cpio-idv./etc/inittabsh-3.1#cpetc/inittab/mnt/sysimage/etc注意,执行该命令时,文件不能直接恢复到/etc目录,只能解压到当前directory,和恢复后的文件名所在路径,必须写完整的绝对路径。文件解压成功后,复制到根分区所在的/mnt/sysimage目录下对应位置。救援模式是维护Linux的有力武器。本文以以上两个例子来说明其应用方法,希望能给读者一些启发。解决Linux系统启动失败,需要充分了解Linux的启动过程,才能对故障进行有效的判断和处理。