GNU/Linux 初学者通用故障排除指南GNU/Linux 初学者通用故障排除指南GNU/Linux 初学者通用故障排除指南GNU/Linux 初学者通用故障排除指南
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

GNU/Linux 初学者通用故障排除指南

硬件问题排查

当内核启动时,它会加载必要的硬件驱动程序和模块以及包含硬件故障详细信息的所有消息。但消息向上滚动的速度太快,无法很好地了解潜在的硬件问题。然而,内核引导过程中显示的消息被保存到内核环形缓冲区中。

当系统启动时,使用dmesg命令将这些消息写入msg.txt文件中。

ubuntu@ubuntu:~$ dmesg > /tmp/msg.txt

ubuntu@ubuntu:~$ less /tmp/kernel_msg.txt

保存的消息可以稍后查看或发送给某人来调试问题。

读取这些消息的另一种方法是检查 /var/log/dmesg 或 /var/log/messages 文件(如果存在)。

一些支持 systemd 的 Linux 系统将这些消息存储在 systemd 日志中。使用journalctl命令检查内核消息:

ubuntu@ubuntu:~$ journalctl -k | less

检查指示硬件功能故障或无法加载驱动程序的消息。

GRUB 救援

GRUB 是由发行版安装的软件程序,用于启动基于内核的操作系统。目前,所有Linux发行版都使用GRUB2版本。有时,BIOS启动GRUB2时可能会遇到没有“正在运行的文件系统”或“未知文件系统”的问题。

该错误表明 GRUB 无法找到正确的操作系统来加载 grub.cfg 文件并将其定位在错误的分区中。当用户在 Linux 操作系统和 BIOS 以错误的顺序识别磁盘之后安装 Windows 时,就会发生这种情况,因为 Windows 在主引导记录 (MBR) 上启动其引导加载程序。

错误如下所示:

error: unknown filesystem.

grub rescue > _

在本节中,我们将讨论从 Grub Rescue 恢复发行版的两种方法:

方法一

在 grub 救援终端中输入 ls 命令列出所有驱动器和可用分区。

grub> ls

(hd0),(hd0,msdos1)(hd0,msdos2)

选择包含已安装发行版的分区。一般是从第一个分区启动;如果不是,则输出一条错误消息。执行以下命令,在grub2目录下搜索grub配置文件:

grub > ls (hd0,msdos1)/

grub > ls (hd0,msdos1)/grub2

device.map fonts grub.cfg grub.cfg.1590068449.rpmsave grubenv i386-pc locale

输入set root=(hd0,msdos1)来启动系统。现在使用set prefix命令定义grub2目录的路径。键入insmod normal命令重新启动系统。重启后,打开终端更新GRUB。

ubuntu@ubuntu:~$ sudo update-grub

最后一步是在 MBR(主引导记录)上安装 GRUB,因为 Windows 在 MBR 上启动其引导加载程序。此步骤需要将根分区/dev/sda1挂载到/mnt目录下。

ubuntu@ubuntu:~$ sudo mount /dev/sda1 /mnt

ubuntu@ubuntu:~$ sudo grub-install --root-directory=/mnt/ /dev/sda

系统可能无法通过 insmod normal 命令启动,这可能是由于缺少 grub.conf 文件的糟糕文件系统造成的。该问题需要用户通过发行版的实时 USB/CD 启动进入系统。让我们讨论另一种拯救 GRUB2 的理想技术。

方法二

Boot-Repair 是一个图形工具,可为 GRUB 问题提供理想的解决方案。通过实时可移动 USB/CD 启动至桌面。确保设备已连接到互联网,然后按 Ctrl+Alt+T 打开终端。现在安装启动修复工具:

ubuntu@ubuntu:~$ sudo add-apt-repository -y ppa:yannubuntu/boot-repair

ubuntu@ubuntu:~$ sudo apt-get update

ubuntu@ubuntu:~$ sudo apt-get install -y boot-repair && boot-repair

按照建议的选项修复系统。引导修复应用所有更改后重新启动系统。操作系统将正常启动。

网络故障排除

对于普通用户来说,只要用户插入以太网电缆或提供 Wi-Fi 网络的登录凭据,网络连接就会自动发生。然而,网络管理和故障排除对于任何系统管理员来说都是至关重要的任务。因此,Linux 提供了命令行工具来处理管理和连接问题。

在本节中,我们将讨论传出和传入网络连接问题,并介绍 Linux 工具以方便地提供解决方案。

传出连接

Linux 提供 IP 命令作为全面的网络实用程序来配置网络并解决连接问题。它操纵所有的网络对象,如IP地址、路由和链接等。

开始之前,请使用IP命令查看工作网络接口。

ubuntu@ubuntu:~$ ip addr show

如果没有可用的接口,请检查硬件是否被禁用。但是,如果它已启动并且仍然连接到主机,请使用 route 命令检查主机。

ubuntu@ubuntu:~$ route

默认线路代表机器通过工作接口卡访问的默认网关(路由器)。 Linux 提供 ping 实用程序来测试设备和路由器之间的连接。

ubuntu@ubuntu:~$ ping -c 5 <gateway>

该错误表明路由器物理上未连接或已关闭。但是,如果 ping 成功,请尝试访问路由器之外的地址,例如全球 Google DNS 服务器 8.8.8.8。

ubuntu@ubuntu:~$ ping -c 5 8.8.8.8

成功的 ping 表明问题出在主机名到地址的解析上。系统使用的 DNS 服务器是在网络接口启动时手动添加或从 DHCP 服务器自动添加的。从 /etc/resolve.conf 文件检查 DNS 服务器的详细信息(名称和 IP 地址)。

nameserver 192.168.11.12

nameserver 192.168.11.253

我们可以按如下方式解决主机名问题:

服务器可能已关闭或用户被分配了错误的 DNS 服务器地址。记下 resolve.conf 文件中的名称服务器地址,并检查是否可以通过 ping 命令访问它。

ubuntu@ubuntu:~$ ping -c 3 192.168.11.253

使用域信息探索器 (DIG) 实用程序检查 DNS 是否正常工作。即检查DNS服务器地址192.168.11.253是否将主机名解析为IP地址。

ubuntu@ubuntu:~$ dig @115.186.188.3 www.google.com

纠正 DNS 服务器有点棘手。如果网络管理器负责管理连接任务,它将覆盖 /etc/resolve.conf 文件中的名称服务器条目。 cd 进入 /etc/sysconfig/network-scripts 目录,在 ifcfg 文件中添加以下行来解决该问题。

ubuntu@ubuntu:~$ sudo vim /etc/sysconfig/network-scripts/ifcfg

PEERDNS=no

DNS1=<DNS_server_IP_add>

如果是单独的网络服务,请将 PEERDNS=no 行添加到resolve.conf 文件中。

传入连接

对于配置为 Apache 服务器的 Linux 系统,Web 服务器需要由客户端访问。如果客户端无法通过 Web 浏览器访问服务器,您可以从服务器外部使用上述 ping、dig 或 traceroute 命令来跟踪问题。排除传入连接故障的其他一些方法包括:

使用nmap通过服务器上的开放端口检查服务的可用性。使用带有主机名/IP 地址的 nmap 命令来检查开放端口。

ubuntu@ubuntu:~$ nmap <IP_address>

打开端口 80/443 STATE 表明网络连接良好。如果不是,则防火墙不会接受来自这些端口的数据包。而且,它没有被过滤,并且状态是关闭的,这意味着该服务没有正确配置,或者它没有监听80/443端口。

如果系统使用ufw并设置为默认防火墙策略,它将阻止每个传入连接。设置防火墙以允许客户端访问 tcp 80/443 端口:

ubuntu@ubuntu:~$ sudo ufw allow 80

ubuntu@ubuntu:~$ sudo ufw allow 443

如果它仍然阻止传入连接,请使用 sudo ufw status 命令查找被拒绝的主机并通过以下命令访问它们。

ubuntu@ubuntu:~$ sudo ufw allow from <ip_address>

如果启用了对 80/443 端口的访问,则所有传入网络都可以访问服务器。是时候检查服务器状态了:

ubuntu@ubuntu:~$ sudo systemctl status httpd

最后,检查服务器是否正在侦听合适的接口和端口。因此,对于像 httpd 这样监听接口请求的服务。编辑主配置文件以使服务能够在端口 80 上侦听特定地址或所有地址。

ubuntu@ubuntu:~$ sudo cd /etc/httpd/conf/httpd.conf
Listen 80
Listen 192.168.11.10:80

排除系统负载故障

Linux 附带了许多实用程序,可以监视系统活动并找出没有明显原因的问题。也就是说,系统工作一切正常,但开始变慢并开始崩溃应用程序。这些不同的 Linux 实用程序可帮助找出消耗内存资源并耗尽计算机磁盘空间、处理器和网络带宽的进程。

系统不稳定背后的一些原因包括容量有限,即内存、磁盘空间、网络容量和处理能力不足,以及应用程序配置错误。然而,这些实用程序提供了管理、操纵和解决此类问题的方法。让我们解决内存有限和 CPU 消耗过多的问题。

内存使用情况

运行带有大写字母 M 的 top 命令,以按内存使用情况对进程详细信息进行分类。命令输出生成一般信息,然后是 RAM、交换空间和 CPU 消耗。如果系统出现内存不足 (OOM) 空间,请查找以下内容:

  • 注意 Mem 行中的可用空间:它必须为零或接近零。

  • 检查已使用的交换空间:它必须非零或不断增长。

  • 由于top命令每5秒重新显示一次信息,因此寻找内存泄漏的进程,即检查RES内存是否继续增长。

  • 当交换空间耗尽时,内核开始终止进程。

解决此类问题的可能方法是:

杀死进程

Kill 命令发送终止信号来结束进程。解决内存不足问题最常用的信号是 SIGKILL 和 SIGTERM。然而,不同的进程对信号的响应不同。

例如,记下 PID 并使用 kill 命令发送 SIGTERM 信号。

ubuntu@ubuntu:~$ kill -15 PID

SIGTERM/-15 信号旨在终止进程,但有时它不会杀死进程。因此,这可能需要 SIGKILL/-9 信号来立即终止进程。

ubuntu@ubuntu:~$ kill -SIGKILL PID

删除页面缓存

要暂时清理内存,请删除不活动的缓存页面。删除缓存页面,将一些内存页面写入磁盘,因为系统可能希望稍后检索它,同时丢弃其余页面。

让 top 命令在终端中运行并在另一个终端中运行给定的命令以查看 MEM 行更改:

ubuntu@ubuntu:~$ echo 3 > /proc/sys/vm/drop_caches

使用 Alt+SysRq 击键

内存耗尽有时会导致 GUI 或 shell 完全无响应。这种情况需要在无响应的系统上使用 Alt+SysRq 按键。这样内核就会在任何其他进程之前处理其请求。

运行以下命令检查是否已启用:

ubuntu@ubuntu:~$ cat /proc/sys/kernel/sysrq

076

“0”值表示未启用击键。要启用此击键,请转至 /etc/sysctl.conf 文件并设置 kernel.sysrq=1。或者使用以下命令设置 kernel.sysrq=1。

ubuntu@ubuntu:~$ sudo echo "1" >/proc/sys/kernel/sysrq

在大多数键盘中,SysRq 是“PrtSc”键。

在基于文本的界面中按 Alt+SysRq+f 可终止 OOM 分数最高的进程。继续按这些按键,直到系统恢复到正常可用状态。

CPU负载

上述技术还可以检查并修复消耗过多 CPU 资源并剥夺系统功能的进程。然而,Linux 提供了另一种方法来限制系统进程消耗 CPU 资源。

重新调整流程

使用 top 命令生成所有详细信息并记下请求更多 CPU 资源的进程 ID (PID)。键入以下命令,将优秀值设置在 -20 到 19 之间,即值越高,进程对 CPU 的访问越低。

ubuntu@ubuntu:~$ nice +18 PID

或者注意 PID 的 NI(nice)值。对于较低的 NI 值,请通过使用 renice 命令撤销优秀值来降低该特定进程的 CPU 访问权限:

ubuntu@ubuntu:~$ renice -n +18 PID

结论

本文涵盖了所有必要的 Linux 实用程序,使初学者能够解决与系统负载、硬件问题、GRUB 和网络相关的 Linux 问题。

©2015-2025 艾丽卡 support@alaica.com