17. 常见错误信息

问:Modprobe 无法定位模块,XXX,以及类似信息
问:未知终端类型 linux 及类似
问:INET: 警告:调用了旧式 ioctl...!
问:ld: 无法识别的选项 '-m486'
问:GCC 提示,内部编译器错误
问:Make 提示,错误 139。
问:Shell-Init: 登录时权限被拒绝
问:没有 Utmp 条目。登录时您必须执行 ...
问:警告--bdflush 未运行
问:警告:已发出过时的路由请求
问:EXT2-fs: 警告:正在挂载未检查的文件系统
问:EXT2-fs 警告:已达到最大计数
问:EXT2-fs 警告:已达到检查时间
问:df 提示,无法读取已挂载文件系统的表
问:fdisk 提示,“分区 X 具有不同的物理/逻辑...
问:fdisk: 分区 1 未在柱面边界开始
问:fdisk 提示分区 n 具有奇数个扇区
问:Mtools 工具提示无法初始化驱动器 X
问:启动开始时:内存紧张
问:系统日志提示,end_request: I/O 错误,....
问:你不存在。走开。
问:操作不允许。
问:问:程序名: 加载共享库时出错:lib xxx..so. x:无法打开共享对象文件:没有该文件或目录。
问: init: Id "x" 重生过快:已禁用 5 分钟
问:FTP 服务器提示:“421 服务不可用,远程服务器已关闭连接。”

问:Modprobe 无法定位模块,XXX,以及类似信息

答:这些类型的消息通常发生在启动或关机时。如果 modprobe、insmod 或 rmmod 抱怨无法找到模块,请将以下内容添加到/etc/modules.conf/etc/modutils/aliases文件,以您系统上存在的为准。

 $ alias <module-name> off 

并使用错误消息中出现的模块名称。

[J.H.M. Dassen]

问:未知终端类型linux及类似

答:在早期的内核中,默认控制台终端类型已从console更改为linux. 您必须编辑/etc/termcap以更改读取行

 console|con80x25: 

更改为

 linux|console|con80x25: 

(可能还有一个附加的dumb在那里 - 如果是这样,应该删除它。)

要使编辑器工作,您可能需要键入

 $ TERM=console 

(对于 bashksh),或

 $ setenv TERM console 

对于 cshtcsh

某些程序使用/usr/lib/terminfo而不是/etc/termcap. 对于这些程序,您应该升级 terminfo 包,它是 ncurses 的一部分。

X 终端显示也是如此。如果您的发行版将TERM设置为类似xterm-24-color的奇怪值,您可以简单地从命令行将其重置为通用值

 $ TERM="xterm"; export TERM 

问:INET: 警告:调用了旧式 ioctl...!

答:您正在尝试使用旧的网络配置实用程序。新的实用程序可以在 ftp://ftp.linux.org.uk/pub/linux/Networking/PROGRAMS/NetTools/ 找到(只有源代码,恐怕是这样)。

请注意,它们不能像旧式程序那样使用。有关如何正确设置旧式网络程序的说明,请参阅 NET-2 HOWTO。更好的是,请参阅 NET-3 HOWTO 并升级您的网络软件。

问:ld: 无法识别的选项 '-m486'

答:您有一个旧版本的 ld。安装一个包含更新的 ld 的较新 binutils 包。在 tsx-11.mit.edu 中的/pub/linux/packages/GCC/查找binutils-2.6.0.2.bin.tar.gz.

问:GCC 提示,内部编译器错误。.

答:如果故障是可重复的(即,它总是发生在同一文件中的同一位置 - 即使在重新启动并重试后,使用稳定的内核),您已经发现了 GCC 中的一个错误。有关如何报告错误的详细信息,请参阅 GCC Info 文档(在 Emacs 中键入 F1-i,然后从菜单中选择 GCC)。但请确保您拥有最新版本。

请注意,这可能不是 Linux 特有的问题。除非您正在编译许多其他 Linux 用户也编译的程序,否则您不应将您的错误报告发布到任何 comp.os.linux 组。

如果问题不可重复,您可能遇到内存损坏。请参阅 Make 提示,错误 139。 的答案。

问:Make 提示,错误 139。

答:您的编译器 (GCC) 核心已转储。您可能有一个损坏的、有错误的或旧版本的 GCC - 获取最新版本或 EGCS。或者,您可能正在耗尽交换空间。请参阅 为什么机器在 GCC / X / ... 下运行非常缓慢?

如果这不能解决问题,您可能遇到了内存或磁盘损坏的问题。检查您的 SIMM 和缓存的时钟频率、等待状态和刷新时序是否正确(硬件手册有时也是错误的)。如果是这样,您可能有一些边缘 SIMM,或者主板或硬盘或控制器出现故障。

Linux 是一个非常好的内存测试器 - 比基于 MS-DOS 的内存测试程序好得多。

据报道,一些克隆 x87 数学协处理器可能会导致问题。尝试使用数学仿真编译内核(请参阅 如何升级/重新编译内核)。在 LILO 提示符下使用no387内核命令行标志,强制内核使用数学仿真,或者它可以工作,仍然可以使用 '387,但数学仿真已编译在内,但主要未使用。

有关此问题的更多信息,请访问 Web 上的 http://www.bitwizard.nl/sig11/

问:Shell-Init: 登录时权限被拒绝

答:您的根目录和直到您的主目录的所有目录都必须对所有人可读和可执行。有关如何解决此问题的信息,请参阅 chmod 的手册页或 Unix 书籍。

问:没有 Utmp 条目。登录时您必须执行 ...

答:您的/var/run/utmp搞砸了。您应该在您的

 /var/run/utmp

/etc/rc.local/etc/rc.d/*中拥有。请参阅 如果我搞砸了系统并且无法登录,我该如何修复它?。请注意,utmp也可能在/var/adm//etc/在一些较旧的系统上找到。

问:警告--bdflush 未运行

答:现代内核使用更好的策略来写入缓存的磁盘块。除了内核更改之外,这还涉及用一个更微妙的守护程序(实际上是一对)替换旧的 update 程序,该程序过去每 30 秒写入所有内容,该守护程序称为 bdflush。获取bdflush-n.n.tar.gz来自与内核源代码相同的位置(请参阅 如何升级/重新编译内核)并编译并安装它。bdflush 应该在通常的启动时文件系统检查之前启动。它也可以与旧内核一起正常工作,因此无需保留旧的 update

问:警告:已发出过时的路由请求

答:这没什么可担心的。该消息意味着您的 route 版本与内核相比有点过时。您可以通过从与内核源代码相同的位置获取新版本的 route 来消除该消息。请参阅 如何升级/重新编译内核

问:EXT2-fs: 警告:正在挂载未检查的文件系统

答:您需要使用 -a 选项运行 e2fsck (或fsck -t ext2如果您有 fsck 前端程序),以清除dirty标志,然后在每次关机期间干净地卸载分区。

最简单的方法是获取最新的 fsckumountshutdown 命令,这些命令在 Rik Faith 的util-linux软件包中可用(请参阅 Linux FTP 存档在哪里?)。您必须确保您的/etc/rc*/脚本正确使用它们。

注意:不要尝试检查已读/写挂载的文件系统。这包括根分区,如果您在

 VFS: mounted root ... read-only 

启动时看不到。您必须安排首先以只读方式挂载根文件系统,必要时检查它,然后以读/写方式重新挂载它。几乎所有发行版都这样做。如果您的发行版没有这样做,请阅读随附的文档util-linux以了解如何执行此操作。

请注意,您需要指定 -n 选项到 mount,这样它就不会尝试更新/etc/mtab,因为根文件系统仍然是只读的,否则会导致失败。

问:EXT2-fs 警告:已达到最大计数

答:当内核挂载一个标记为干净的文件系统,但其“自检查以来的挂载次数”计数器已达到预定义值时,会发出此消息。解决方案是从常用站点获取最新版本的 ext2fs 实用程序(e2fsprogs-0.5b.tar.gz在撰写本文时)。请参阅 Linux FTP 存档在哪里?

可以使用此软件包中的 tune2fs 程序检查和更改最大挂载次数值。

问:EXT2-fs 警告:已达到检查时间

答:1.0 及更高版本的内核支持基于自上次检查以来的经过时间和挂载次数来检查文件系统。获取最新版本的 ext2fs 实用程序。请参阅 EXT2-fs 警告:已达到最大计数

问:df 提示,无法读取已挂载文件系统的表。.

答:您的/etc/mtab/etc/fstab文件可能存在问题。如果您有一个相对较新版本的 mount,/etc/mtab应该在启动时清空或删除(在/etc/rc.d/*中拥有),使用类似

 $ rm -f /etc/mtab*

一些旧的 Linux 发行版在/etc/mtab中为根分区创建了一个条目/etc/rc*通过使用 rdev。这是不正确的 - 较新版本的 mount 会自动执行此操作。

一些旧的发行版在/etc/fstab中也有一行看起来像

/dev/sdb1 /root ext2 defaults

的条目/root应该简单地读取/.

问:fdisk 提示,“分区 X 具有不同的物理/逻辑..."

答:如果分区号(上面的 X)是 1,则这是与fdisk: 分区 1 未在柱面边界开始.

相同的问题如果分区在编号大于 1024 的柱面上开始或结束,这是因为分区表中的标准 DOS 磁盘几何信息格式无法处理超过 10 位的柱面号。您应该查看 如何让 Linux 与我的磁盘一起工作?

问:fdisk: 分区 1 未在柱面边界开始

答:许多 Linux 系统附带的 fdisk 版本创建的分区未能通过其自身的有效性检查。不幸的是,如果您已经安装了系统,除了将数据复制到分区外,您对此无能为力,删除并重新制作它,然后将数据复制回去。

您可以通过从 Rik Faith 的 util-linux 软件包(在所有常用的 FTP 站点上可用)获取最新版本的 fdisk 来避免此问题。或者,如果您正在创建新的分区 1,该分区从第一个柱面开始,您可以执行以下操作以获得 fdisk 喜欢的分区。

  • 以正常方式创建分区 1。p列表将产生不匹配的抱怨。

  • 键入 u 以设置扇区模式,然后再次执行 p。从End列复制数字。

  • 删除分区 1。

  • 在仍处于扇区模式时,重新创建分区 1。将第一个扇区设置为与每磁道扇区数匹配。这是 p 输出的第一行中的扇区号。将最后一个扇区设置为您在上一步中写下的值。

  • 键入 u 以重置柱面模式并继续处理其他分区。

    忽略有关未分配扇区的消息。它们指的是第一个磁道上除主引导记录之外的扇区,如果您从磁道 2 开始第一个分区,则不会使用它们。

问:fdisk 提示分区 n 具有奇数个扇区

答:PC 磁盘分区方案以 512 字节扇区工作,但 Linux 使用 1K 块。如果您有一个具有奇数个扇区的分区,则最后一个扇区将被浪费。忽略该消息。

问:Mtools 工具提示无法初始化驱动器 X

答:这意味着 mtools 在访问驱动器时遇到问题。这可能是由于以下几个原因造成的。

通常,这是由于软盘驱动器设备(/dev/fd0*/dev/fd1*)的权限不正确。运行 mtools 的用户必须具有适当的访问权限。有关详细信息,请参阅 chmod 的手册页。

大多数随 Linux 系统分发的 mtools 版本(不是标准的 GNU 版本)使用文件/etc/mtools的内容来确定要使用的设备和密度,而不是将此信息编译到二进制文件中。此文件中的错误通常会导致问题。通常没有关于此的文档。

有关访问 MS-DOS 文件(尤其是硬盘分区上的文件)的最简单方法,请参阅如何访问 DOS 分区或软盘上的文件?注意:您永远不应使用 mtools 访问 msdosfs 挂载分区或磁盘上的文件!

问:启动开始时内存紧张

答:这意味着您有一个超大内核,这意味着 Linux 必须执行一些特殊的内存管理魔法才能从 BIOS 启动自身。它与机器中的物理内存量无关。忽略该消息,或编译一个仅包含您需要的驱动程序和功能的内核。请参阅 如何升级/重新编译内核

问:系统日志提示,end_request: I/O 错误, ....

答:此错误消息以及类似消息几乎总是表明硬盘驱动器存在硬件错误。

这通常表明硬盘驱动器存在缺陷。避免进一步数据丢失的唯一方法是完全关闭系统。您还必须确保驱动器上的任何数据都已备份,并将其恢复到非缺陷硬盘驱动器。

此错误消息也可能表明与驱动器的连接不良,尤其是在自制系统上。如果您安装 IDE 驱动器,始终使用新的扁平电缆。对于 SCSI 驱动器来说,这可能也是一个好主意。

在一个实例中,此错误似乎也与系统板和机箱之间的接地不良相吻合。在将责任归咎于硬盘驱动器本身之前,请确保所有电气连接都清洁且牢固。

[Peter Moulder, Theodore Ts'o]

问:你不存在。走开。

答:这不是病毒感染。它来自 writetalkwall 等程序,如果您的调用 UID 与有效用户不对应(可能是由于/etc/passwd已损坏),或者如果您使用的会话(伪终端,特别是)未在utmp文件中正确注册(可能是因为您以有趣的方式调用了它)。

问:操作不允许。.

答:一个或多个文件或目录的属性位设置不正确。例如,如果设置了I位,您将无法使用 chmod 更改文件权限。

解决方案是使用 lsattr 显示文件和目录属性,并使用 chattr 设置和取消设置它们。这些程序的文档包含在其手册页中。

[Paul Campbell]

问:程序名:加载共享库时出错:lib xxx..so. x:无法打开共享对象文件:没有该文件或目录。

答:当您尝试运行的程序使用共享库时,出现这样的消息通常意味着以下两种情况之一:程序要么是在具有与您的机器不同的库集或库路径的机器上编译的;要么您已经升级了库,但没有升级程序。

与动态库链接的可执行程序,期望它需要的每个库文件的完整路径名。共享库也是如此,如果它们依赖于其他库。这是为了使共享对象依赖关系尽可能明确,也是作为一种安全措施。

在为系统上的库重新编译可执行文件(从长远来看,这可能是最理想的替代方案)之前 - 您可以尝试使用命令确定可执行文件需要哪些库ldd 程序名。输出将是系统上程序需要运行的共享库列表,以及缺少的库。然后,您可以添加库软件包,或者如果库已经存在于不同的目录中,您可以创建一个符号链接,以便程序可以找到它。例如,如果程序需要 /usr/lib/libncurses.so.2,而您的机器具有 /lib/libncurses.so.2,您可以创建一个链接,程序期望在该位置找到该库;例如

 # cd /usr/lib &amp;&amp; ln -s /lib/libncurses.so.2 . 

但是,您应该注意,创建这样的库链接应被视为安全风险,并且您创建的其他链接将与未来的升级不兼容。这仅仅是向后兼容性的快速修复。

此外,可能需要一些猜测才能确定程序期望在哪个系统库目录中找到共享库文件,因为ldd不会列出它找不到的库的路径。程序很可能会告诉运行时链接器,/lib/ld.so,在/lib, /usr/lib, /usr/local/lib/usr/X11R6/lib中查找共享库,如果它是 X 客户端。但这并不意味着库不能安装在其他地方。在继续之前,了解原始库配置的一些想法会有所帮助。

还要确保运行ldconfig在创建符号链接之后,以便ld.so具有系统库的更新视图。您还应该确保所有库目录都列在/etc/ld.so.conf中,也许在LD_LIBRARY_PATH环境变量中。

问:init: Id "x" 重生过快:已禁用 5 分钟.

答:在大多数发行版中,这意味着系统默认启动到运行级别 5,该级别应该通过 xdmkdmgdm 或任何其他程序重生(在退出后再次启动)图形登录,并且系统无法找到该程序。

然而,Id也可能表明另一个程序(如 mingetty)的缺失或配置错误,如果 init 尝试在 2 分钟内重生自身超过 10 次。

Id "x" 是/etc/inittab文件

 # Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

中最左列的数字。注释掉有问题的行,然后修复错误的程序并在命令行上进行测试,将使您能够看到任何转到标准错误输出(控制台)的错误消息,如果错误没有转到系统日志文件。取消注释该行并使用kill -SIGHUP 1telinit q 重新启动 init,以使 init 重新初始化并重新读取/etc/inittab文件。

但是,某些系统在启动时会重写/etc/inittab。在这种情况下,请参阅init手册页,和/或/etc/sysconfig/init.

中的设置。有关详细信息,请参阅 init/etc/inittab手册页。

[Carl King]

问:FTP 服务器提示:“421 服务不可用,远程服务器已关闭连接。”

答:如果 FTP 服务器不允许登录,则可能是配置正确,但问题可能是授权用户登录。当前发行版中的 FTP 服务器通常使用可插拔身份验证模块库授权用户,在这种情况下,应该有一个授权文件/etc/pam.d/ftp。通用授权文件如下所示。(第一行“auth”上的换行符是为了便于阅读。该条目实际上是一个单行的长行)。

 #%PAM-1.0
 auth                required /lib/security/pam_listfile.so item=user
                     sense=deny file=/etc/ftpusers onerr=succeed
 auth                required /lib/security/pam_pwdb.so shadow nullok
 auth                required /lib/security/pam_shells.so
 account             required /lib/security/pam_pwdb.so
 session             required /lib/security/pam_pwdb.so

另外,请确保/etc/ftpusers文件,或第一个“auth”行中命名的任何用户文件配置正确。

顺便说一句,上面的示例ftp文件实际上是ftpd/ftp.pam.sample文件来自ftpd-BSD-0.3.1.tar.gz软件包。非常感谢 David A. Madore 提供的这个非常需要的端口。