Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

什么是sosreport?如何在 RHEL 4.6 及以后的版本中创建sosreport?

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux 4.6 或更新版本
  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 7

Issue

Resolution

Azure 虚拟客户机

什么是 sosreport:

sosreport 命令是一个工具,用来收集RHEL系统上的配置信息、系统信息和诊断信息。比如:正在运行的内核版本、已加载的模块,以及系统和服务的配置文件。这个命令还会执行一些额外的程序,来获得更详尽信息,并会把这些信息保存到结果文档中。

当红帽技术支持工程师对一个 Red Hat Enterprise Linux 服务请求进行初始分析时,通常会从 sosreport 开始。


如何运行 sosreport:

sos 软件包已被安装,就可以使用以下命令运行 sosreport:

注意: sosreport 需要 root 权限运行。
* 如果出现 "command not found" 错误,请检查 sos 软件包是否已被安装且没有错误。

# sosreport

在 RHEL 6 上,这个命令大约需要几分钟来完成,其他老版本可能需要更长时间。根据本地设置,以及在以下情况下使用的选项,这个命令可能会需要更多时间才能完成运行。如果对 sosreport 的运行时间有所疑虑,请联系红帽技术支持以获取帮助。

当运行完成后,sosreport 会在 /tmp (RHEL6 及更老版本)或 /var/tmp (RHEL7 及更新的版本)目录下生成一个压缩文件。不同版本会使用不同的压缩格式(gzbz2xz)。您一般需要将这个文件提交给技术支持工程师(一般以附件形式上传到问题单上)。

这个存档文件的大小取决于系统配置和启用的 sosreport 可选功能(比如,如果指定了通用模块的 "all_logs" 选项,sosreport 将会收集所有 syslog 日志文件,这将大大增加存档文件的大小)。

如果需要向一个已存在的问题单添加 sosreport,或其它文件,可以使用 redhat-support-tool 命令行工具,Red Hat Portal UI,或通过使用 FTP 的其它一些方式 。

如果所收集的 sosreport 文件过大,可将其上传到 Red Hat ftp dropbox.redhat.com site

要避免交互式地输入用户和账号信息,可以使用 --batch 选项以批处理的形式运行。这种情况下,用户信息会从系统的 RHN 配置文件中获得:

# sosreport --batch

sosreport 命令有一个模块化结构,用户可以在命令行指定模块选项来启用/禁用模块。要列出可以使用的模块(插件),请运行以下命令:

# sosreport -l

要临时关闭某个模块:

将要关闭的模块用逗号分隔的方式列出,在 -n/--skip-plugins 选项中指定。

例如,要临时禁用 kvmamd 模块(因为有问题):

# sosreport -n kvm,amd

每个模块可能会提供额外的选项,可以通过 -k 选项进行指定。比如,在 RHEL 4 和 5 中,sos rpm 模块默认收集 "rpm -Va" 的输出。因为这会消耗大量时间,可以使用以下方法禁用:

# sosreport -k rpm.rpmva=off

在 RHN Proxy Server 中运行 sosreport
要在 RHN Proxy Server 上收集更详尽的信息,请使用以下命令:

# sosreport -o rhn

备注:

1. Red Hat Enterprise Linux 4.5 以及更早版本中包括老的 sysreport 命令创建诊断信息文件。您可以把系统更新为使用包括在更新版本中的 sos 软件包,但是在需要的时候,仍然可以向红帽上传 sysreport 的信息 What is a sysreport and how to run it in Red Hat Enterprise Linux?

2. Red Hat Enterprise Linux 4 和 5 中的 sos 软件包也包括 sysreport 命令。它是一个软链接,用以向下兼容:

# ls -l /usr/sbin/sysreport
lrwxrwxrwx 1 root root 19 Nov  3  2008 /usr/sbin/sysreport -> /usr/sbin/sosreport

如需使用原始的 sysreport 脚本,使用 sysreport.legacy 命令:

# sysreport.legacy

这个工具程序会收集与硬件和 Red Hat Linux 系统设置相关的详细信息。这些收集到的信息会被看做为保密信息,红帽将只会在对您的系统进行诊断时使用这些信息。


安装 sosreport:

为了运行 sosreport,需要先安装 sos 软件包。这个软件包是默认安装组的一部分,大多数系统会自动安装这个软件包。您可以使用以下命令检查 sos 软件包是否已被安装以及是否有错误:

# rpm -qa | grep sos
sos-3.2-35.el7_2.3.noarch << sos package is installed
# rpm -V sos << run verification on installed package
#

如果软件包没有被安装,在运行相关命令时会出现与以下类似的信息:

# sosreport
-bash: sosreport: command not found

如果出现这种情况,需要使用以下方法手工安装包括了 sosreport 命令的 sos 软件包:
Red Hat Enterprise Linux 5 以及更新版本

如果系统已使用 RHSM 注册,使用 yum 命令:

# yum install sos

如果系统还没有通过 RHSM 注册,sos 软件包可以从 RHN 网站下载,或通过安装 CD/DVD 获得。使用 rpm 命令可以在任何版本的 Red Hat Enterprise Linux 上进行安装:

 # rpm -Uvh sos-<version>.noarch.rpm

Red Hat Enterprise Linux 4 Update 6 或更新版本

如果系统通过 RHSM 进行了注册,使用 up2date 命令安装sos

# up2date sos

如何应对 sosreport 挂起:{#soshang}

  • 如果运行于 RHEL5,把 sosreport 进程设置为后台运行 (ctrl-z),任何再使用它的 PID 终止它。否则,您可以会遇到 KCS#55275 中的问题

  • 如果 sosreport 因为设备的 "No space left on device" 错误而失败

    • 检查包括 /tmp 的文件系统有足够的空间
    # df -h /tmp
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/vg_ren-lv_root
                           50G   49G    1M  99% /
    
    • 增加存储空间,或使用以下方式指定另外一个目录
    # sosreport --tmp-dir /path/to/another/volume
    
  • sosreport 可能会因为一个特定的插件而挂起

找出哪个插件导致挂起。

  1. 增加输出信息 sosreport -vvvv
  2. 使用 strace 进行分析

当找到导致挂起的插件后,排除它。

使用以下命令显示所有插件:

sosreport -l

例如,排除 filesys 插件

sosreport -n filesys
  • 或者,运行以下脚本手工创建一个系统报告。请注意,这个方法可能只会包括标准 sosreport 中的部分内容。

    #!/bin/bash
    host="$(hostname)"
    
    sos_dir="/tmp/${host}_hungsos"
    mkdir $sos_dir
    cd $sos_dir
    chkconfig --list > chkconfig
    date > date
    df > df
    dmesg > dmesg
    dmidecode > dmidecode  
    fdisk -l > fdisk  
    free > free  
    hostname --fqdn > hostname  
    ifconfig > ifconfig  
    lsmod > lsmod  
    lspci > lspci  
    cat /proc/mounts > mount  
    netstat -tlpn > netstat  
    ps auxww > ps  
    rpm -qa > rpm-qa  
    rpm -Va > rpm-Va     #this command may take a while to run  
    ulimit -a > ulimit  
    uname -a > uname  
    uptime > uptime  
    cat /proc/meminfo > meminfo  
    cat /proc/cpuinfo > cpuinfo  
    mkdir etc  
    cd etc  
    cp /etc/fstab .
    cp /etc/cluster/cluster.conf .
    cp /etc/security/limits.conf .  
    cp /etc/redhat-release .  
    cp /etc/sysctl.conf .  
    cp /etc/modprobe.conf .  
    mkdir sysconfig/network-scripts -p  
    cd sysconfig  
    cp /etc/sysconfig/* . -R  
    cd $sos_dir
    mkdir var/log -p  
    cp /var/log/message* var/log -R  
    cd /tmp  
    tar -cvjf ${host}_hungsos.tar.bz2 $sos_dir
    

参考信息:How to gather data from a Red Hat Enterprise Linux system for troubleshooting if the sosreport process goes to hung state?

通过 rescue 模式收集 sosreport

如果系统无法正常启动,可以通过 rescue 环境收集 sosreport 以用于故障排除。

请参阅:How to generate sosreport from the rescue environment?

在另外的位置创建 sosreport

如果 /tmp 下没有足够的空间,可以强制在另外的位置创建 sosreport。

请参阅:How do I make sosreport write to an alternative location?

手工收集 sosreport

如果因为某些原因无法生成 sosreport,请参阅以下信息手工收集文件:

Sosreport fails. What data should I provide in its place?


sosreport 的副作用:{#side-effect}

  • Component
  • sos

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.