修复Linux启动故障

2017-11-23 09:27:54
网络安全和信息化 2017年3期
关键词:配置文件内核命令

引言:在Linux运行过程中,有时会因为误操导致系统无法启动。Linux自带的救援模式,就可以解决此类故障。救援模式其实是微型的操作系统,可以对系统进行各种修复,还可以对Linux进行只读数据的冷备份操作。救援模式只是在内存中运行,不会对真实系统的数据造成影响。本文就以常见的故障为例,介绍救援模式的使用方法。

快速恢复引导程序

当Linux的引导程序出现问题后,就会导致系统无法正常启动。为此,可以以Linux光盘来引导,在欢迎界面中(如图1)选 择“Resure installed system”项,进入救援模式。当硬件初始化完成后,在向导界面中选择语言版本,键盘布局,救援模式的介质(这里 为“Local CD/DVD”)等参数,之后救援模式会询问是否启用网络模式,这里选择“No”。在救援模式介绍画面中点击“Continue”按钮,系统开始查找本地存储设备,之后会提示系统已经被挂载到“/mnt/sysimage”目录上。点击回车,选 择“Shell Start shell”项,在Shell中执 行“chroot /mnt/sysimage/”命令,完成后会重新打开一个 Shell,在其中执行“df-h”命令,可以查看真实的系统分区情况。执行“grubinstall /dev/sda”命 令,执行引导程序的修复操作。当出现“Installation finished. No error reported”内容时,说明修复操作已经成功。连续执行两次“exit”命令,返回向导界面,选择“Reboot”项重启系统,之后系统就可以顺利启动了。

修复受损的MBR信息

如果MBR主引导记录受损的话,系统是无法启动的。因为在系统启动时,会从读取引导设备的第一个扇区,其中保存在主引导记录,分区表等信息。为此,在系统处于正常状态时,可以执行“dd if=/dev/zero of =/dev/sda bs=446 count=1”命令,将MBR信息备份为独立的文件,进入“/tmp”目录,可以看到备份的“MBR”文件,可以将该文件复制到网络中的其他主机(假设IP为“172.16.1.101”)的根目录下保存,便于之后出现问题后进行修复。当本机出现MBR损坏故障后,可以按照上述方法进入救援模式。

图1 进入救援模式

图2 设置网络参数

图3选择所需的救援模式

所不同的是,在“Setup Networking” 窗口中 点击“Yes”按 钮,选 择 所需的网卡,在“Enable network interface”窗 口(如 图 2)中 选 择“Enable IPv4 Support” 和“Manual Configuration”项,为 该网卡设置IP地址(例如“172.16.1.100/24”),其 余设置保持默认,点击OK按钮保存配置。当网络设置完成后,点击“Continue”按钮,按照上述方法打开Shell界面,执行“ifconfig”命令,可以看到该Shell环境的网络配置情况。执行“scp 172.16.0.101:/root/MBR .”命令,输入其root账户密码,将保存在目标主机上的“MBR”复制过来。执行“dd if=MBR of =/dev/sda”命令,恢复目标磁盘上的MBR信息。之后按照上述方法重启,就可以正常使用系统了。当然,如果事先没有备份MBR的话,可以使用第三方的工具(例如“Diskgenius”等),来搜索并修复磁盘。

恢复“fstab”文件,正常挂载分区信息

在“/etc/fstab”文 件中存放了和文件系统相关的信息,在启动时Linux会读取该文件,来自动挂载所有的分区,如果该文件丢失或者配置出错的话,就会导致系统无法启动。按照上述方法进入救援模式,在“Rescue”窗口(如图3)中点击“Continue”按钮,按照上述方法打开Shell界面,系统自动将所有分区挂载到“/mnt/sysimage”目录下。执行“fdisk -l”命令,查看系统分区情况。因为对应的分区其实并没有损坏,所以可以查看到系统分区的完整信息。因为每个分区对应的名称标识不会显示,所以可以使用“e2label”命令,对其逐一查看。例如执行“e2label/dev/sda1”,“e2label /dev/sda2”,“e2label /dev/sda3”等命令,来查看对应的分区名称标识信息。

这样,就可以得到所有分区的挂载点信息。“fstab”文件存放在系统根目录下,所以需要挂载原来系统的根分区。假设跟分区对一个的设备名为“/dev/sda2”,执行“mkdir tmp”,“mount /dev/sda2 /tmp”,“df”等命令,可以将跟分区所有文件挂载到“/tmp”目录下。之后执行“vi /tmp/etc/fstab”命令,对“fstab”文件进行编辑,依次输入“Label=/ / ext3 default 1 1”,“Label=/boot /boot ext3 default 1 2”,“Label=/home /home ext3 default 1 2”等内容,来重新构建该文件。可以找一台同样配置的Linux主机,来查看正常的“fstab”文件内容,并据此执行上述编辑操作。之后退出Shell环境,重启系统即可。

修复配置文件,顺利引导系统启动

我们知道,Linux的启动配置信息保存在“/Boot/Grub/Grub.conf”文件中,其中包含启动菜单,启动分区,内核文件位置等参数。如果该文件丢失或者误删除的话,系统自然无法启动。按照上述方法进入救援模式,选择“shell Start shell”项,在Shell中执行“chroot/mnt/sysimage”和“df”命令,可以查看分区信息。执行“grub-install /dev/sda”命令,对Grub进行修复操作。之后进入“/boot/grub”目录,看到虽然修复了Grub,但是其配置文件并不存在。

执 行“vimgrub.conf”命令,在编辑界面中依次输入“default=0”,“timeout=5”,“title Red Hat Linux”,“root(hd0,0)”,“kernel/vmlinuz-2.6.32-220.e16.x86_64 ro root=/dev/sda2”,“initrd /initramfs-2.6.32.e16.x86_64.img”等行,之后保存该文件。这样,就通过手工的方式重建了“Grub.conf”文件,其中的系统核心文件以及驱动压缩包名称较长,可以进入“/boot”目录,来查看其具体的名称。之后推出Shell并重启,在“GNU GRUB”启动界面中选择上述“RedHat Linux”项,可以顺利启动系统。

重设密码,保证顺利登录系统

对于Root用户来说,一旦忘记密码,就无法正常登录系统。利用救援模式,可以轻松重设密码。按照上述方式进入救援环境,按照上述方法,将系统挂载到“/mnt/sysimage”目录下。在Shell环境中执行“password root”命令,根据提示依次输入新的密码,当出现“all authentication tokens updated successfully”字样时,说明密码修改成功。之后按照上述方法重启系统,就可以以新的密码登录系统了。

找回丢失的系统内核

内核文件是Linux的核心数据,进 入“/boot”目录,可以查看内核文件“vmlinuz-2.6.32-220.e16.x86_64”等重要文件。如果内核文件丢失或者受损,系统是无法正常启动的。按照上述方法进入救援模式,选择“shell Start shell”项,在Shell中查看“/boot”分区,如果其中没有Grub文件的话,需要按照上面谈到的方法,先对Grub进行修复。对于内核文件的修复,可以利用“rpm”命令来实现。例如,执行“rpm –qa vmlinuz-2.6.32-220.e16.x86_64”命令,查看到其来自于“kernel-2.6.32-220.e16.x86_64”包。当然,不同版本的Linux的内核文件名称可能不同。执行“rpm–qf initramfs-2.6.32.e16.x86_64.img”命令,查看到其也来自于上述安装包。当然,在“/boot”分区还有别的重要文件,可以从其他正常运行的Linux主机上查看其具体名称。例如,执 行“rpm –qf System.map-2.6.32-220.e16.x86_64”命令,查看到其来自于上述安装包。因此,只要将内核文件重装一遍,就可以解决上述问题。

执 行“mount /dev/cdrom /media/”命令,将光驱挂载到指定的位置。进入“/media/Packages” 目录,将“kernel-2.6.32-220.e16.x86_64.rpm” 包复制过来。之后执行“rpm –ivh kernel-2.6.32-220.e16.x86_64 --force”命令,强制安装该包,耐心等候一段时间后,内核即可修复完成。之后按照上述方法重启系统,如果出现“grub>”提示符,可以依次执行“root(hd0,0)”,“ kernel/vmlinuz-2.6.32-220.e16.x86_64 ro root=/dev/sda2”, initrd /initramfs-2.6.32.e16.x86_64.img”,“boot” 等 命令,就可以顺利启动系统了。

当然,如果系统内核文件存放在网络中的某台FTP服务器上,也可以在救援模式中配置好IP等网络参数,之后在Shell环境中执行“ftp server1”命令,假设FTTP服务器的名称为“server1”,之后按照提示输入FTP的用户名和密码,当出现“ftp>”提示符后,利用“cd /pub/packages/”命令,切换到存储内核文件的目录中,假设其保存在“/pub/packages/”目录中。之后使用“mget kernel-2.*.e16.x86_64.rpm”之类的命令,将Linux的内置文件保存到本地。最后,执行“quit”命令,退出FTP操作环境。利用上述命令,对下载的RPM包进行解压安装即可,执行“ls /boot”命令,可以查看内核文件信息。

重要配置文件的修复方法

对 于Linux来 说,在“/etc”目录及其下的“init”,“rc”等子目录 下还 存 在“inittab”, “rc.sysinit”,“start-ttys.conf”,“prefdm.conf”,“rc.local”等配置文件,在其中保存了系统和用户配置的相关信息。但这些配置文件丢失或受损后,对系统的正常启动也会造成很大的影响。按照上述方法进入救援模式,在Shell中执行“rpm-qa /etc/inittab”,“ rpm-qa /etc/rc.sysinit”,“ rpm -qa /etc/init/start-ttys.conf”等命令,可以看到其都来自于名为“initscripts-9.03.27-1.e16.x86_64.rpm”的 包,按照上述方法挂载光驱,将在光盘中的“Packages”目录中找到该包,将其复制出来。执行“”rpm –ivh –force initscripts-9.03.27-1.e16.x86_64.rpm命令,执行强制安装操作,这样,就将这些配置文件恢复过来。

猜你喜欢
配置文件内核命令
万物皆可IP的时代,我们当夯实的IP内核是什么?
现代装饰(2022年4期)2022-08-31 01:41:24
提示用户配置文件错误 这样解决
只听主人的命令
强化『高新』内核 打造农业『硅谷』
今日农业(2021年9期)2021-07-28 07:08:36
搭建简单的Kubernetes集群
互不干涉混用Chromium Edge
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
忘记ESXi主机root密码怎么办
移防命令下达后