应用与硬件问题排查指南
1. 应用问题分析
1.1 发现应用问题根源
若应用出现问题,可借助相关信息找出原因并记录理论推测。例如,某应用问题是由于使用
/tmp/*.*
文件通配符作为
rm -ir
命令参数导致。若
/tmp/
目录设置了粘性位,账户只能删除自己拥有的该目录下的文件。要解决此问题,可将
activity.sh
应用中的
rm -ir /tmp/*.*
行改为
rm -i /tmp/activity.txt
。
1.2 版本管理
应用程序和操作系统通常会不断更新,以提升性能或增加功能。为跟踪应用更新,会采用版本管理技术,即通过编号管理多个应用更新。不同版本的应用有不同编号,通常新版本编号更高。例如,Linux 内核 2.6.0 版本于 2003 年 12 月发布,当前版本可在
www.kernel.org
查看,编号比 2.6.0 更高。利用版本管理可判断应用更新或补丁是否发布,有助于解决应用软件问题。
1.3 更新问题处理
- 检查更新 :若应用出现问题,可检查是否有新软件更新。若应用可通过仓库获取,可使用特定的包管理工具检查新版本。
- 测试更新 :可搭建测试系统,在更新生产应用前进行全面测试,并确保有良好的备份。
-
问题排查
:若应用在更新后出现问题,可查看发行版的包管理历史信息。如在使用 RPM 的系统中,使用超级用户权限执行
rpm -q package-name --last查看包的最新更新历史;在 Debian 系统中,检查/var/log/apt/history.log文件。然后使用相应的包管理工具卸载导致问题的包或库。 -
自动更新设置
:在现代 Ubuntu 发行版中,配置了无人值守升级,可自动进行软件安全升级。若要关闭,可将
/etc/apt/apt.conf.d/10periodic文件中的APT::Periodic::Update-Package-Lists指令从 1 改为 0,通过man unattended-upgrade了解更多信息。 -
依赖检查
:当一个软件包依赖其他包或库才能正常运行时,称为依赖关系。若依赖关系被破坏,即出现未满足的依赖,可能导致软件包损坏。在 Debian 包管理系统中,使用
apt-get check命令检查;在 Red Hat 包管理系统中,若使用rpm安装程序出现问题,可执行rpm -aV查看损坏的软件包。
1.4 补丁管理
补丁是对特定应用或系统服务的程序更改或配置文件更新,可解决严重问题或修复安全漏洞,通常在正常软件更新周期之外发布。内核补丁发布有所不同,它是一个特殊的源代码包,仅包含对主要内核源代码发布所做的更改。只需下载补丁源代码包,使用 Linux 的
patch
命令将补丁更新应用到系统中现有的内核源代码文件,然后重新编译内核。通常,包管理器会在更新系统软件包时处理这些操作。
1.5 处理库问题
应用功能常被拆分为单独的库文件(共享库),多个使用相同功能的应用可共享这些库文件。若应用在软件升级后出现问题,可能与最近升级的共享库有关。可通过在命令行输入
ldd program-name
检查程序使用的库,并将输出重定向到另一个文件。使用
grep
命令搜索包管理日志文件,确定应用的某个库是否最近更新。示例如下:
$ which ssh
/usr/bin/ssh
$
$ ldd /usr/bin/ssh > lib.txt
$
$ cat lib.txt
[…]
libk5crypto.so.3 […]
[…]
$
$ grep -B 2 -A 2 libk5crypto /var/log/apt/history.log
Start-Date: 2019-01-22 13:37:45
Commandline: /usr/bin/unattended-upgrade
Upgrade: libk5crypto3:amd64 (1.16-2build1, 1.16-2ubuntu0.1)
End-Date: 2019-01-22 13:37:49
若应用在库升级后不久出现问题,可检查该库是否有新的升级或补丁。若没有,可能需要卸载并安装早期版本。
1.6 环境变量问题探索
若新安装的应用无法执行,可检查
PATH
环境变量,它决定了 Bash shell 未直接处理的程序搜索目录。可使用
echo $PATH
查看变量内容:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
若需为所有用户修改此参数,可在
/etc/profile.d/
目录创建一个 Bash 脚本文件,使用
.sh
文件扩展名,文件必须由
root
拥有并属于
root
组,将其他(世界)权限设置为
r
,以便所有用户可读。根据发行版不同,脚本会在用户登录系统或启动新 shell 时被
/etc/profile
或
/etc/bashrc
文件读取。若仅特定用户需要修改,可在其
~/.profile
、
~/.bash_profile
或
~/.bash_login
文件中进行修改。
1.7 GCC 兼容性问题
在 Linux 中,最常用的编译程序工具是 GNU 编译器集合(GCC)。若使用 GCC 编译应用时出现问题,可能有以下原因:
- GCC 使用的系统 C 库可能不符合 ISO C 标准。
- GNU C 与非 ISO 版本的 C 存在一些显著的不兼容性。
- GCC 使用的系统头文件修正版本可能导致问题。
此外,可能使用的是较旧版本的
gcc
,需要进行更新。例如,若系统发行版是 CentOS 7 且使用
gcc v4.4.*
,则需要升级 GCC 包。可在其官网
https://gcc.gnu.org
查找详细文档,包括常见问题解答和其他有用信息。
1.8 仓库问题排查
当遇到关于包无法找到、更新或安装的奇怪错误消息时,首先要检查网络连接,因为网络未连接常导致此类问题。此外,各种包仓库可能会损坏。
- 在使用 Debian 包管理器(如 Ubuntu)的系统中,若出现无法下载仓库信息的消息,可使用
apt-get clean
命令清理数据库和临时下载文件,然后使用
apt-get update
尝试更新本地仓库。
- 在使用 Red Hat 包管理器(如 Rocky Linux)的系统中,可根据发行版使用
yum clean all
或
zypper clean -a
命令,然后使用
yum check-update
或
zypper refresh
命令更新本地仓库。
- 若要从非标准仓库安装或更新包,可能需要在系统中启用该仓库。在 Red Hat 包管理系统中,使用
yum repolist
或
zypper repos
命令查看已启用的仓库列表;在 Debian 包管理系统中,执行
grep -v "#" /etc/apt/sources.list
查看。在添加额外的非标准仓库之前,备份仓库文件,如
/etc/apt/sources.list
、
/etc/yum.repos.d/*.*
、
/etc/zypp/repos.d/*.*
。手动编辑
sources.list
文件可添加并启用新仓库;使用 YUM 时,使用
yum-config-manager --add-repo repository-url
命令;使用
zypper
时,还需要指定仓库名称别名,即
zypper addrepo repository-url alias
。
1.9 SELinux 上下文违规处理
应用问题可能由系统的 Linux 内核安全模块(如 SELinux)引起。不正确的策略配置可能触发违规,导致应用无法正常工作。
-
日志检查
:首先使用
sealert
命令检查审计日志文件,若该工具不可用,可通过
setroubleshoot
包安装。
-
文件上下文查看与修改
:使用
ls -Z
命令查看文件的 SELinux 上下文。若文件或其父目录需要更改上下文,可使用
chcon
实用程序修改,使用
semanage
命令使其永久生效,使用
restorecon
修复标签,需使用这三个命令才能解决问题。
-
模式切换
:使用超级用户权限执行
setenforce permissive
命令可临时将 SELinux 模式从强制模式切换到宽容模式,这样可在不实际阻止访问的情况下进行上下文更改并查看是否触发违规。设置好正确的 SELinux 策略后,使用
setenforce enforcing
命令将其恢复到强制模式。
-
布尔值设置
:受 SELinux 限制的应用需要设置适当的布尔值以允许适当的访问。使用
getsebool
命令查看应用的布尔值,若需要更改,使用超级用户权限和
setsebool
命令。
-
入侵检测
:若日志或日记文件中出现大量 SELinux 上下文违规,且过去没有应用问题,可能系统存在入侵者,可使用入侵检测工具确认。
1.10 防火墙阻塞问题
若应用在网络上出现问题且无网络问题,可检查本地和远程系统的防火墙。应用更新或防火墙修改可能触发此类问题。
1.10.1 解除 ACL 限制
防火墙 ACL 通过审查网络数据包的控制信息和其他网络数据来识别数据包。在排查与防火墙相关的应用问题时,需要收集应用数据包来回传输的以下信息:
- 源地址或主机名
- 目标地址或主机名
- 使用的网络协议
- 使用的入站端口
- 使用的出站端口
同时,需要了解源和目标系统使用的防火墙应用。收集这些信息后,可审查双方的防火墙设置,判断 ACL 是否过于严格。例如,若应用主机系统使用
firewalld
,可使用
firewall-cmd --get-default-zone
命令快速检查当前默认区域:
$ firewall-cmd --get-default-zone
drop
若系统的
firewalld
默认设置为
drop
区域,意味着所有传入网络数据包将被丢弃,仅允许出站网络连接。若应用需要从其他系统接收数据或连接,则此防火墙 ACL 设置过于严格。
1.10.2 解除端口阻塞
若应用依赖其他系统服务(守护进程),需检查与服务端口相关的规则。阻塞外部服务所需的端口会对应用产生不利影响。若应用设计使用的端口不是知名服务专用端口,也需进行检查。例如,若系统提供公共 Web 服务,需要允许与 HTTPS 协议端口 443 相关的入站和出站数据包。若系统使用
iptables
防火墙软件,可使用
iptables -L
命令查看当前 ACL 规则。若数据包过滤器通过特定规则或策略阻塞端口 443,可使用类似以下命令修改链以打开端口 443:
$ iptables -A INPUT -p tcp --dport 443 -j ACCEPT
同时,还需修改
OUTPUT
链规则,以允许 Web 服务器建立连接。若应用允许 HTTP 流量,还必须修改端口 80 的规则。在排查应用问题时,可查看防火墙日志文件条目,必要时可增加日志记录的信息量,如 UFW 防火墙有
full
设置可记录所有信息。
1.10.3 解除协议阻塞
除端口外,还需注意应用使用的各种协议,如 UDP、TCP 和 ICMP。若应用使用其他系统服务,也需了解其使用的协议,可通过
/etc/services
文件获取帮助。例如,若应用与本地网络上的 DNS 缓存服务器配合工作,DNS 协议使用端口 53,可使用以下命令检查
/etc/services
文件中其使用的传输协议:
$ grep 53 /etc/services
domain 53/tcp # Domain Name Server
domain 53/udp
[…]
由于 DNS 使用 TCP 和 UDP 两种传输协议监听请求,需在 DNS 服务器系统上为这两种协议解除端口 53 的阻塞,并允许入站和出站数据包。
硬件问题排查工具
1.11.1 dmidecode 实用程序
在使用
dmidecode
命令前,需要了解分布式管理任务组(DMTF)及其标准。DMTF 是一个非营利组织,旨在通过标准简化网络可访问技术(如服务器)的管理。它创建了桌面管理接口(DMI)和系统管理 BIOS(SMBIOS)标准。DMI 规范由四个组件组成,提供计算机硬件及其他有用数据的信息;SMBIOS 标准包含用于读取计算机 BIOS 生成的管理信息的数据结构。这两个标准相互作用,被硬件制造商广泛采用。
在 Linux 系统中,使用这些标准需要一台符合 DMI/SMBIOS 的计算机和一个软件接口来访问其数据结构,
dmidecode
实用程序就是这个软件接口。它默认从
sysfs
文件系统的
/sys/firmware/dmi/tables/
目录中的表中提取信息。可使用以下命令检查系统中这些表是否存在:
# ls /sys/firmware/dmi/tables
DMI smbios_entry_point
dmidecode
命令的
-h
选项可描述在硬件故障排除过程中可使用的各种选项。提取表信息时需使用超级用户权限,但获取帮助时无需。例如:
$ dmidecode -h
Usage: dmidecode [OPTIONS]
Options are:
-d, --dev-mem FILE Read memory from device FILE (default: /dev/mem)
-h, --help Display this help text and exit
-q, --quiet Less verbose output
-s, --string KEYWORD Only display the value of the given DMI string
-t, --type TYPE Only display the entries of given type
-u, --dump Do not decode the entries
--dump-bin FILE Dump the DMI data to a binary file
--from-dump FILE Read the DMI data from a binary file
--no-sysfs Do not attempt to read DMI data from sysfs files
-V, --version Display the version and exit
在各种选项中,最有用的是
-t
或
--type
开关,它允许通过提供参数(数字或关键字)从 DMI/SMBIOS 表中提取指定信息。关键字参数可以是以下之一:
- baseboard
- bios
- cache
- chassis
- connector
- memory
- processor
- slot
- system
若表中不包含所需信息,只会收到关于实用程序尝试提取数据的位置以及可能支持的 DMI 和/或 SMBIOS 标准版本的消息。例如:
# dmidecode -t memory
# dmidecode 3.0
Getting SMBIOS data from sysfs.
SMBIOS 2.5 present.
#
# dmidecode -t system
# dmidecode 3.0
Getting SMBIOS data from sysfs.
SMBIOS 2.5 present.
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: innotek GmbH
Product Name: VirtualBox
Version: 1.2
Serial Number: 0
UUID: 3909BE96-5CA6-4801-8236-D6113BB5D2CF
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Virtual Machine
需要注意的是,若使用虚拟化 Linux 系统,
dmidecode
实用程序提供的信息可能不可靠,且不应仅依赖该实用程序获取硬件信息,其手册页也指出 DMI 表中的信息往往不准确、不完整或错误。
1.11.2 lshw 实用程序
系统中的硬件信息存储在
/proc/
目录的各种文件中,
lshw
实用程序可帮助获取这些信息,它通常默认安装在大多数发行版中或可在标准仓库中获取。它可提供系统的处理器、内存、网卡、USB 控制器、磁盘等数据。
lshw
有两个有用的选项:
-
-short
:以漂亮的表格格式显示硬件数据。例如:
# lshw -short
H/W path Device Class Description
=====================================================
system VirtualBox
/0 bus VirtualBox
/0/0 memory 128KiB BIOS
/0/1 memory 4GiB System memory
/0/2 processor Intel(R) Core(TM) […]
/0/100 bridge 440FX - 82441FX PMC [Natoma]
/0/100/1 bridge 82371SB PIIX3 ISA [Natoma/Triton II]
/0/100/1.1 scsi1 storage 82371AB/EB/MB PIIX4 IDE
/0/100/1.1/0.0.0 /dev/cdrom disk CD-ROM
/0/100/2 display VirtualBox Graphics Adapter
/0/100/3 enp0s3 network 82540EM Gigabit Ethernet Controller
/0/100/4 generic VirtualBox Guest Service
/0/100/5 multimedia 82801AA AC'97 Audio Controller
/0/100/6 bus KeyLargo/Intrepid USB
/0/100/6/1 usb1 bus OHCI PCI host controller
/0/100/7 bridge 82371AB/EB/MB PIIX4 ACPI
/0/100/8 enp0s8 network 82540EM Gigabit Ethernet Controller
/0/100/d scsi2 storage 82801HM/HEM (ICH8M/ICH8M-E) SATA […]
/0/100/d/0 /dev/sda disk 16GB VBOX HARDDISK
/0/100/d/0/1 volume 1GiB Linux filesystem partition
/0/100/d/0/2 /dev/sda2 volume 13GiB Linux LVM Physical Volume
partition
[…]
/0/4 input PnP device PNP0f03
/1 virbr0-nic network Ethernet interface
[…]
-
-businfo:显示与 SCSI、USB、IDE 和 PCI 设备相关的信息。
此外,还可使用
-class
选项获取特定硬件组件的详细信息,不同的类可在
lshw -short
命令的输出中查看。
综上所述,在处理应用和硬件问题时,可按照以下流程图进行排查:
graph TD;
A[应用或硬件出现问题] --> B{问题类型};
B -->|应用问题| C[分析应用依赖];
C --> D[检查版本和更新];
D --> E[处理更新问题];
E --> F[检查库和环境变量];
F --> G[解决 GCC 兼容性和仓库问题];
G --> H[处理 SELinux 和防火墙问题];
B -->|硬件问题| I[使用硬件命令排查];
I --> J[了解 dmidecode 实用程序];
J --> K[使用 lshw 实用程序];
通过以上方法和工具,可更有效地排查和解决应用与硬件问题,确保系统的稳定运行。
2. 硬件问题排查深入探讨
2.1 硬件问题排查流程
当遇到硬件问题时,可按照以下步骤进行排查,形成一个较为系统的排查流程,以下是详细的步骤说明:
1.
初步观察
:查看硬件设备的外观是否有损坏、松动的迹象,例如线缆是否插好、设备是否有明显的物理损伤等。
2.
使用硬件命令
:运用如
lspci
、
lsusb
、
lsdev
、
dmidecode
和
lshw
等命令获取硬件信息,通过这些信息判断硬件是否正常工作。
3.
分析信息
:仔细分析命令输出的信息,查看是否有异常提示,如设备未识别、驱动加载失败等。
4.
尝试修复
:根据分析结果,尝试进行相应的修复操作,如重新插拔设备、更新驱动程序等。
5.
测试验证
:修复后,对硬件进行测试,检查问题是否解决。
以下是这个流程的 mermaid 格式流程图:
graph LR;
A[发现硬件问题] --> B[初步观察];
B --> C[使用硬件命令];
C --> D[分析信息];
D --> E{是否有异常};
E -->|是| F[尝试修复];
E -->|否| G[重新检查];
F --> H[测试验证];
H --> I{问题是否解决};
I -->|是| J[结束排查];
I -->|否| D;
2.2 常见硬件问题及解决方法
| 问题类型 | 表现现象 | 可能原因 | 解决方法 |
|---|---|---|---|
| 设备未识别 | 系统无法检测到硬件设备 | 设备连接松动、驱动缺失、硬件故障 | 重新插拔设备、更新驱动程序、更换硬件 |
| 性能下降 | 系统运行缓慢、响应时间长 | 硬件过热、资源不足、驱动不兼容 | 清理散热设备、升级硬件、更新驱动 |
| 硬件冲突 | 多个硬件设备无法同时正常工作 | 设备驱动冲突、资源分配冲突 | 更新驱动程序、调整资源分配 |
2.3 硬件信息获取工具对比
| 工具名称 | 功能特点 | 适用场景 |
|---|---|---|
lspci
| 显示 PCI 总线设备信息 | 排查 PCI 设备相关问题 |
lsusb
| 显示 USB 设备信息 | 排查 USB 设备相关问题 |
lsdev
| 显示系统设备信息 | 全面了解系统设备情况 |
dmidecode
| 获取 DMI/SMBIOS 信息 | 了解硬件的详细配置信息 |
lshw
| 提供系统硬件的详细数据 | 全面排查硬件问题 |
2.4 硬件维护建议
为了减少硬件问题的发生,延长硬件设备的使用寿命,可遵循以下硬件维护建议:
1.
定期清理
:定期清理硬件设备的灰尘,特别是散热设备,保持良好的散热性能。
2.
合理使用
:避免过度使用硬件设备,防止硬件过热和老化。
3.
及时更新
:及时更新硬件驱动程序,确保硬件与系统的兼容性。
4.
数据备份
:定期备份重要数据,以防硬件故障导致数据丢失。
2.5 综合案例分析
假设遇到一个系统运行缓慢的问题,我们可以按照前面提到的方法进行排查:
1.
初步观察
:发现电脑风扇声音较大,可能存在散热问题。
2.
使用硬件命令
:使用
lshw
命令查看硬件信息,发现 CPU 温度较高。
3.
分析信息
:结合初步观察和命令输出,判断是散热问题导致 CPU 性能下降。
4.
尝试修复
:打开电脑机箱,清理 CPU 散热器上的灰尘,并重新涂抹散热硅脂。
5.
测试验证
:重启电脑后,系统运行速度明显提升,问题解决。
2.6 总结与注意事项
在排查应用与硬件问题时,需要综合运用各种方法和工具,形成一个系统的排查思路。同时,要注意以下几点:
1.
谨慎操作
:在进行硬件操作时,要小心谨慎,避免造成硬件损坏。
2.
备份数据
:在进行任何可能影响数据的操作前,一定要备份重要数据。
3.
参考资料
:遇到复杂问题时,可参考相关的技术文档和论坛,获取更多的解决思路。
通过以上对应用和硬件问题排查的全面介绍,希望能帮助大家更高效地解决实际遇到的问题,保障系统的稳定运行。在实际操作中,要根据具体情况灵活运用各种方法和工具,不断积累经验,提升自己的问题排查和解决能力。
超级会员免费看
2159

被折叠的 条评论
为什么被折叠?



