考点 16.01 排错策略
当你遇到问题时要冷静对待。如果你已经通读了本书,并具有一定经验,请不必紧张,你能很快查找到问题的原因。
如果你不能确定问题是如何产生的,首先尝试简单的解决方法。它能够占用较少的时间,并对你的系统影响最小。
如果你想了解的更详细,记住下面7个基本步骤(就像维基百科)。它们能帮你应付 Red Hat考试中的排错和系统维护部分。如果你有经验,可以直接跳到解决问题的那一步。
-------------------------------------------------
关于考试
排错和系统维护
如 Red Hat 考试指导()中提到的, RHCE 和RHCT 考试都要考到排错和系统维护。要获得 RHCE,你需要完成第一个小时考试的 RHCT部分。考试内容有如下几类:
*在不同级别启动系统,以完成排错和系统维护。
*诊断并更正错误的网络配置。
*诊断并更正主机名解析问题。
*配置 X Windows 系统和桌面环境。
*在已安装的系统上添加分区、文件系统和交换分区。
*使用命令行工具分析问题和配置系统。
要获得 RHCE,你至少需要完成 RHCE考试80%的内容。考试内容有如下几类:
*利用提供的第一张安装盘,进入急救(救援)模式。
*诊断和更正引导分区、模块和文件系统错误导致的启动失败。
*诊断和更正网络服务问题(见下面“安装与配置”的服务列表)。(在此提到的是 RHCE考试的“安装与配置”部分)
*添加、移除和更改逻辑卷
*诊断和更正由于SELinux 造成的网络服务问题。
举个例子。如果有5道 RHCT问题和5道 RHCE 问题。要通过这部分 RHCE考试你需要完成所有的 RHCT问题和至少3道RHCE 问题。
关于网络服务,你会遇到书中所描述的一个或多个服务的问题,包括 Apache、Samba、NFS、FTP、Squid、sendmail、Postfix、Dovecot、SSH、DNS和NTP。
-------------------------------------------------
1、确定问题
了解发生了什么。查看错误信息。如果可以,分析日志文件或其他消息。如果你读了这本书并进行了实验,你可能很快就找到问题的所在。
2、收集信息和资源
分析你的系统。这要求你检查相关的配置文件以确定服务的正常运行和安全,或其他的系统特征的工作情况。如果你有经验的话,你会找到这部分引起问题的错误所在。
3、做个假设
如果你仍未找到问题所在,猜一下。记住 Red Hat考试的时间是有限的,因此如果情况允许,你可以忽略它。(要获得 RHCE,你必须完成 RHCT级别的所有排错和系统维护问题。)
4、进行实验和采集数据
在实验前,备份所有你可能要改动的东西。例如,如果你认为问题是由 Samba的配置文件引起的,备份你的 /etc/samba/smb.conf 文件,以防止你的假设错误。
5、分析数据
这和第一步几乎相同。如果你还没有解决问题,你需要再通过相关错误消息和日志文件分析哪里出了问题。
6、从数据得出结论,进行新的假设
大多时候,你需要恢复你在第4步所做的备份,然后重复2-4步骤。
7、发布结果
一旦你解决了问题,确定在重启后问题不会再次出现。例如,如果你记录了一个 Samba错误,你可能要发布它,以确定在下次 Linux系统启动后 Samba 进程正常启动。
通常两个地方的错误会造成启动失败,即启动引导文件和 init 配置文件, /boot/grub/grub.conf 和 /etc/inittab。例如,定义了错误的 root 分区(/)会造成内核引导失败。其它配置错误也会造成 Linux启动事的内核错误。一旦你改动了这些文件,唯一的充分验证的办法就是重启 Linux。
考试预览
作为 Red Hat Enterprise Linux 系统管理员,你需要知道如何修正于启动过程相关的配置文件。处于这个原因,考试中会有一些题目考察你排错和分析的技巧。
下面的案例与解决方案列出了在启动过程中你可能遇到的问题和解决办法。 这些是远远不够的。这些解决方法,在我的计算机上是起作用的,我已经配置过了。但是造成问题的原因是多种的。在 Red Hat考试中,这种解决方法也许就不可行。要知道为什么,需要你多做实验。
要想获得更多的经验,你需要尝试不同的场景(记住:不要在生产计算机上做这些事)。如果你已经熟悉 linux rescue 环境了,尝试其他场景。这些场景我在 RHEL5下测试过,但在 RHEL3 或 RHEL4 下可能会出现问题。
第一个场景,对 grub.conf 改名,这将导致无法引导。重启看一下你的系统。使用 linux rescue 环境启动到 RHEL 修复你的系统。
第二个场景,覆盖 MBR;在 SATA/SCSI驱动下,使用一下命令(如果你的系统使用 IDE/PATA驱动,用 hda 替代 sda):
# dd if=/dev/zero of=/dev/sda bs=446 count=1
第三个场景,用 /sbin/mount.nfs 覆盖 /bin/mount 命令然后重启。
第四个场景,覆盖 /bin/init 命令。
第五个场景,基于遗失 /etc/inittab;你可能会看见一些大的错误(或注释掉一些关键命令)。
第六个场景,信息显示如,发生原因是我将运行级别设为3,并注释掉 /etc/inittab 中的 mingetty 命令行。
Starting smartd; [ OK ]
INIT; no more processes left in this runlevel
第七个场景,将 /boot/grub/grub.conf 中的 root指令写错,你会看到如下信息:
root (hd1, 0)
Filesystem type unknown, partition type 0xfd
kernel /vmlinuz-2.6.18-0.1.1.e15 ro root=/dev/VolGroup00/LogVo100 rhgb quit
Error 17: Cannot mount selected partition
Press any key to continue ...
有时,你进入默认启动级别会出现问题。无需担心,这里有两种办法启动到不同级别。你可以从 GRUB 配置菜单进入,或启动进行 linux rescue 环境。
------------------------------------
案例 <--------------------> 解决办法
1、当启动时,你看见 grub> 提示
你可能在启动程序读取启动文件 grub.conf 时遇到了问题。文件丢失或不正确。对于这种情况你需要根据 /usr/share/doc/grub-verisonnum 目录下的 menu.lst 文件重新建立 grub.conf 文件。
2、当你启动系统时遇到这样的消息,如 "Missing operating system" 或 "Operating System Not Found."。
你的主引导分区(MBR)可能被覆盖了,你需要使用 grub-install 命令重新在 MBR 上加载 GRUB。(如果是在实验外,我相信MBR所有东西都会被擦除。)
3、在启动过程中,你看见"Could not start the X server (graphical environment) due to some internal error" 的信息。
问题可能在于 /tmp 或 /home 分区被写满或没有挂载上。如果这些目录没有挂载,mount 命令可能出了问题,使用 mount RPM 包重新安装它。
4、你看见 "exec of init (/sbin/init) failed!!!" 错误
你的 init 命令可能受损。使用 SysVinit RPM 包重新安装。
5、你看见如下消息:"INIT: No inittab file found"
很明显是 /etc/inittab 出了问题。如果是这样,RHEL5 会提示你"Enter runlevel"。如果是 /etc/inittab丢失,键如 s 回看见 bash 提示。
6、你看到类似下面的消息:
INIT; no more processes left in this runlevel
你可能没有启动任何字符或图形接口,在当前级别;跟踪 /etc/inittab 的启动。
7、你看到如下消息:(注意前面提到的)
root (hd1, 0)
Filesystem type unknown, partition type 0xfd
kernel /vmlinuz-2.6.18-0.1.1.e15 ro root=/dev/VolGroup00/LogVo100 rhgb quit
Error 17: Cannot mount selected partition
Press any key to continue ...
RHEL 在读取 grub.conf 文件时遇到了问题。启动 linux rescue 环境,检查这个文件,以及 /boot 目录。
------------------------------------
从不同级别启动
简短来说,你可以从 GRUB 菜单选择进入不同启动级别。这是 RHCT 排错和系统维护所要求掌握的,也是 Linux系统管理员的基本技能。启动级别描述如下:
启动级别<----->描述
0 停止系统
1 激活 SELinux;允许 /etc/rc.sysinit,检查并挂载文件系统;运行 /etc/rc1.d 目录下的所有脚本
s 或 single 单用户模式;激活 SELinux;运行 /etc/rc.sysinit,检查并挂载文件系统
emergency 紧急启动模式;激活 SELinux;仅挂载 root(/)文件系统
init=/bin/sh 紧急启动模式;仅挂载 root(/)文件系统
2 没有网络的多用户模式;不包括 NFS 相关功能,以及 automount 或 CUPS
3 带网络的多用户模式;启动进行字符登录界面
4 通常未被使用;默认设置等同于级别3
5 带 X Windows的多用户模式;启动进入图形登录界面
6 重启系统
在 Red Hat 考试指导中提到“RHCT 需要能够从不同级别启动系统以完成排错和系统维护”。这意味着,在启动提示符下,你要能在不同级别启动 Linux。这两点非常有用。如果你默认启动级别是5,你的系统通常启动进入图形界面。如果你的图形界面启动有问题,你可以在级别3启动 Linux系统到字符界面下。
另一个帮助你诊断 Linux系统的选项是 单用户模式(sigle-user mode)。这适用于你的系统只能找到 root分区(/)。你的系统可以找到正确的根分区并开始启动过程,但是却因为其他的错误,如:进程损坏、配置文件错误而无法进入更高的运行级别。当你进入 单用户模式时,类似于下面章节提到的 linux rescue 环境。其他运行级别用于其他特殊情况。
要进入不同启动级别,首先假设你使用 RHEL 默认引导程序 GRUB。这时,按下 p 输入 GRUB 密码(如果有的话)。键入 a 修改内核选项。你会看见类似如下的输出:
grub append> ro root=LABEL=/ rhgb quiet
在命令末尾添加一条:
grub append> ro root=LABEL=/ single
grub append> ro root=LABEL=/ init=/bin/sh
grub append> ro root=LABEL=/ emergency
grub append> ro root=LABEL=/ 1
你可以使用这种方法进入其他运行级别。例如,启动到运行级别 3,你可以更改内核参数,添加命令如下:
grub append> ro root=LABEL=/ 3
在工作中
这一启动加载器和启动加载程序是可以替换的。在本书中,我们通常使用这款,如 Red Hat 文档所指导的。当然,这款启动加载程序在 Red Hat 文档中是相同的。
当你启动进入运行级别 1 ,进入系统是不需要密码的。在下面章节中,你就会发现,在这个级别下运行的系统于 linux rescue 模式是很类似的。很多你通常用到的命令和工具将不再可用。你需要挂载额外的硬盘和分区并在运行一些命令时使用完全路径。
当你解决问题后,重新启动系统。另外,你可以键入 exit 启动在 /etc/inittab 中的默认运行级别,可能是级别 3或5。
在工作中
在运行级别 1 下,任何用户都可以更改 root 密码。你肯定不会希望其他人将你的计算机重启进入这一级别,并更改你的 root 密码。因此,将你的计算机置于一个安全的地点很重要。你也可以设置 GRUB 密码或甚至 BISO 密码来保证物理的访问,以防止你的计算机以单用户模式启动。
Linus Rescue 环境
简单来说,你可以使用 linux rescue 环境启动任何不能启动的系统。使用第一张安装盘,在 boot: 提示符键入 linux rescue。开始的一些步骤类似安装 RHEL5。如果 linux rescue 检测到你的系统,它可能会将你的系统作为子目录挂载到 /mnt/sysimage 目录下,模式为读写或只读。如果你的文件系统没有挂载上,你可以打开一个命令提示符,继续排错。
当你在安装的启动提示符下键入 linux rescue,进入启动步骤,安装程序会安装一个小型的 root 文件系统。要进入 linux rescue 启动模式,首先你要将系统设为从 CD-ROM 启动。
图------略
考试预览
Red Hat 考试指导的 RHCE 部分,要求你能够利用 RHEL 第一张安装盘进入 linux rescue 环境。
遵循如下步骤:
1、利用 RHEL5 安装盘启动系统。
2、在 boot: 提示符下键入 linux rescue。你的系统会从第一张安装盘上启动一个基本的Linux。
3、按提示选择合适的语言。
4、按提示选择合适的键盘。
5、你会看见如下提示消息:
Running anaconda, the Red Hat Enterprise Linux rescue mode - please wait...
6、你可能会被问道是否启动本地系统的网卡。如果你需要获得网络安装资源或从网络安装其他包选择 YES;否则选 NO 并进入第8步。
7、你会看到一个本地网卡的网络配置窗口。如果你的考试中有指定静态地址,遵循介绍;否则尝试从本地网络的 DHCP 处获得地址。如果你已经配置了静态地址,你会看见其他界面提示你键入网关、主辅DNS地址。
8、为 rescue 环境选择3个选项中的一个。通常选择第一个选项(Continue),以读写方式挂载你的 RHEL 系统。(Read-Only)挂载只读系统。选择(Skip)会不挂载 RHEL 系统。在以下章节我们会详细谈到这3个选项。
9、如果成功,你会看见一条消息,提示你系统已经挂载到 /mnt/sysimage 下。选择(OK),你会看见下面的提示符,你进入 root 特权模式。
sh-3.1#
标准 linux rescue 环境
当你选择 (Continue)选项,你将进入标准的 linux rescue 环境。这个救援文件为搜索你的 root (/)文件系统。如果找到,你的 root (/)目录会挂载到 /mnt/sysimage 下。你所有的其他文件系统作为根的子目录被挂载;例如,你的 /boot 目录在 /mnt/sysimage/boot 下面。
可能并不是所有的文件系统都会挂载上。你可能看见下面的错误消息:
An error occurred trying to mount some or all of your filesystem
这提示由于某些原因 /etc/fstab 下的文件系统至少有一个没有被挂载上。如果 linux rescue 环境没有问题,你看见消息,提示你系统已被挂载上。
图-----略
选择 OK,你会看见下面的提示符:
Your system is mounted under the /mnt/sysimage directory.When finished please exit from the shell and your system will reboot.
sh-3.1#
你可以使用 chroot /mnt/sysimage 命令。这时你可以修复任何损坏的文件或文件系统。首先检查没有挂载的文件系统,使用 df 命令。输出类似如下:
sh-3.1# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda7 9920592 4091804 5316720 44% /mnt/sysimage
/dev/sda1 101086 11653 84214 13% /mnt/sysimage/boot
tmpfs 1024000 364 1023636 1% /dev/shm
比较输出结果与 /mnt/sysimage/etc/fstab 配置文件。如果一些文件系统没有挂载,可能是 fstab 文件配置错误造成的。另外,分区的标签也可能会与 fstab 文件中的不匹配。例如,查找标签为 /dev/sda1 的相关内容,运行下列命令:
# e2label /dev/sda1
它会返回挂载分区的文件系统的名字,如 /boot
有时一些没有挂载的文件系统需要作一些清理,记住下面的命令,用了清理 /dev/sda1 分区"
# fsck /dev/sdb1
fsck 命令仅用于未挂载的文件系统。例如,如果你得到如下提示消息:
WARNING!!! Running e2fsck on a mounted filesystem may causeSEVERE filesystem damage.
使用 umount /mnt/sysimage/boot 命令将目标文件系统卸载掉。如果你在上面选择了(Skip),请看下面的 "没有挂载的 linux rescue 环境" 章节。
另外,你可能看见下面的消息:
fsck.ext2: Device or resource busy while trying to open /dev/hda2filesystem mounted or opened exclusively by another program?
这意味着 /dev/hda2 可能是逻辑磁盘卷的一部分(第8章有描述)。对于这种情况,你需要在运行 fsck 命令前重新看一下 /mnt/sysimage/etc/fstab 文件,以确定合适的逻辑卷。
在工作中
不要让 ext2 文件系统的相关消息打扰你,当它们被挂载为 ext3 时就会出现这些提示。
记住,上面的一些信息相当重要。如果你要恢复原来的文件系统结构,使用如下命令:
# chroot /mnt/sysimage
当你使用救援光盘时,你的 root(/)目录被挂载到 /mnt/sysimage 下。这条命令会重置你的 root(/)分区,这样你就不要再到 /mnt/sysimage 子目录下面了。
在工作中
通常来说,不需要运行 sync 命令。如果要运行它,确定不要将未确定数据写入硬盘。
只读 linux rescue 环境
当你选择 (Read-Only)选项时,你会得到一个基本的提示符。正常模式与只读模式的区别其实很小。救援系统会试图将一切命令运行于正常模式,除非所以的文件系统被挂载为只读(一些救援系统文件依然会挂载为读写模式)。
这适用于你拥有很大数量的文件系统;它可以帮你挑选出哪些不工作的,和哪些对于覆盖关键配置文件来说风险较小的。
未挂载的 linux rescue 环境
当你选择 (Skip)选项,救援环境不会搜索任何已安装的 Linux。内核会建立一个基于 RAM 的root 镜像,你可以使用 root shell:
When finished, please exit from the shell and your system will reboot.
sh-3.1#
在这一点上,你可以使用一套基本的命令。您可以安装文件,创建目录,移动文件,并使用编辑,如vi。由于没有安装物理驱动器,你可以使用 fdisk 和fsck命令使用各种硬盘和分区。其他一些基本命令也是可以的。
对于这种救援环境,最大的困难是你只工作于一个小型的 Linux 操作系统。在这种情况下,许多命令并不象你平时使用的那样。如果你的 root 分区没有完全的毁坏,你可以将 root 分区挂载到内存中,并使用上面的命令。
不过你可能需要一些帮助来确定你系统上的根分区 。是可以使用 fdisk -l /dev/hda 来查看第一块 IDE硬盘的分区列表。你可以建立一个新的目录,如在 /mnt/sysimage 下挂载 /dev/hda2 分区。命令如下:
# mkdir /mnt/sysimage
# mount /dev/hda2 /mnt/sysimage
# ls /mnt/sysimage
如果你能确定将标准跟分区(/)挂载到了 /mnt/sysimage 目录下,你可以运行 chroot /mnt/sysimage 命令。这样,你就有可能使用所有命令,并修复挂载分区上的配置文件。
在工作中
如果你在救援模式下挂载了分区,并对这些分区上的文件作出了更改,记得使用 sync 命令。它将你的文件写到磁盘上,防止在按下电源按钮后信息丢失。另外,使用 umount 命令也会使数据写入磁盘。
阅读(1650) | 评论(1) | 转发(0) |