跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Desktop 文档 / 管理指南 / 查错 / 常见问题及其解决方案
适用范围 SUSE Linux Enterprise Desktop 15 SP6

42 常见问题及其解决方案

本章将描述一系列可能发生的问题及其解决方法。即使本章未列出与您的问题完全相符的情况,也可能提供了足够相似的情况,供您参考来找到解决问题的方法。

42.1 查找和收集信息

Linux 会较为详细地报告事件。当您的系统发生问题时,可以查看几个位置。它们大多数都是 Linux 系统的标准日志,有一些是与 SUSE Linux Enterprise Desktop 系统相关的日志。多数日志文件可以用 YaST(杂项 ›  启动日志)查看。

使用 YaST 可以收集支持团队所需的所有系统信息。使用其他 › 支持,然后选择问题类别。当所有信息都被集合后,将其附加在您的支持请求。

将出现最常检查的日志文件的列表,并附有其典型用途说明。包含 ~ 的路径表示当前用户的主目录。

表 42.1︰ 日志文件

日志文件

说明

~/.xsession-errors

来自当前运行的桌面应用程序的消息。

/var/log/apparmor/

来自 AppArmor 的日志文件,详细信息请参见第 V 部分 “通过 AppArmor 限制特权”

/var/log/audit/audit.log

来自审计的日志文件,用来跟踪对系统的文件、目录或资源的任何访问,并跟踪系统调用。有关详细信息,请参见第 VI 部分 “Linux 审计框架”

/var/log/mail.*

来自邮件系统的消息。

/var/log/NetworkManager

来自 NetworkManager 的日志文件通过网络连接收集问题

/var/log/samba/

包含 Samba 服务器及客户端日志消息的目录。

/var/log/warn

所有来自内核与系统日志守护程序的消息为警告或更高级别。

/var/log/wtmp

包含当前计算机会话的用户登录记录的二进制文件。可以使用 last 来查看。

/var/log/Xorg.*.log

来自 X Window 系统的启动和运行时日志文件。在调试失败的 X 启动时,该日志很有用。

/var/log/YaST2/

包含 YaST 操作及其结果的目录。

/var/log/zypper.log

Zypper 的日志文件。

除了日志文件外,您的计算机还可提供关于运行中的系统的信息。请参见表 42.2: /proc 文件系统的系统信息

表 42.2︰ /proc 文件系统的系统信息

文件

说明

/proc/cpuinfo

包含处理器信息,包括处理器类型、制造商、型号和性能。

/proc/dma

显示当前使用的 DMA 通道。

/proc/interrupts

显示正在使用的中断和已使用的中断数量。

/proc/iomem

显示 I/O(输入/输出)内存的状态。

/proc/ioports

显示当时正在使用的 I/O 端口。

/proc/meminfo

显示内存状态。

/proc/modules

显示各个模块。

/proc/mounts

显示当前挂载的设备。

/proc/partitions

显示所有硬盘的分区。

/proc/version

显示当前的 Linux 版本。

除了 /proc 文件系统外,Linux 内核还可通过 sysfs 模块(内存中文件系统)导出信息。该模块表示了内核对象及其属性以及关系。有关 sysfs 的更多信息,请参见第 29 章 “ 使用 udev 进行动态内核设备管理 中 udev 的环境。表 42.3 包含 /sys 下最常见目录的概览。

表 42.3︰ /sys 文件系统的系统信息

文件

说明

/sys/block

包含系统中发现的每个块设备的子目录。通常多数是磁盘类设备。

/sys/bus

包含每个物理总线类型的子目录。

/sys/class

包含组合为功能型设备(如图形、网络、打印机等)的子目录

/sys/device

包含全局设备层次结构。

Linux 自带了几个用于系统分析和监控的工具。请参见第 2 章 “系统监控实用程序以选择在系统诊断中使用的最重要的工具。

以下包含的每个情景都以一个描述问题的标题开头,后跟一两段内容,提供建议的解决方案、解决方案详细信息的参考,以及对其他可能相关的情景的交叉引用。

42.2 引导问题

引导问题是指系统不能正确引导时出现的情况(不能引导到预期的目标和登录屏幕)。

42.2.1 GRUB 2 引导加载程序无法加载

如果硬件运行正常,则可能是由于引导加载程序已损坏而使 Linux 无法在计算机上启动。在这种情况下,需要修复引导加载程序。为此,您需要按第 42.5.2 节 “使用救援系统”中所述启动救援系统,然后根据第 42.5.2.4 节 “修改和重新安装引导加载程序”中的说明操作。

另外,您可以按以下方式使用救援系统来修复引导加载程序。从安装媒体引导计算机。在引导屏幕中,选择更多 › 引导 Linux 系统。使用默认内核选项选择包含已安装的系统和内核的磁盘。

系统引导后,启动 YaST 并切换到系统 › 引导加载程序。确保启用了将通用引导代码写入主引导记录选项,然后单击确定。如此会通过重写来修复损坏的引导加载程序,或者安装缺失的引导加载程序。

其他导致计算机无法引导的原因可能与 BIOS 相关:

BIOS 设置

检查与硬盘相关的 BIOS 设置。如果在当前的 BIOS 设置中找不到硬盘本身,GRUB 2 可能就不能启动。

BIOS 引导顺序

请检查您的系统引导顺序中是否包含硬盘。如果未启用硬盘选项,即使系统正确安装,在访问所需的硬盘时仍可能无法引导。

42.2.2 不显示登录或提示界面

这种情况通常在内核更新失败后发生,称为 kernel panic,原因是该过程中最后阶段有时可以在系统控制台上的错误类型。如果实际上计算机刚刚在软件更新后重引导,则当前目标是使用旧的经过验证的 Linux 版本内核和关联文件重引导。引导过程中,可以在 GRUB 引导加载程序屏幕中通过以下方式来实现此目的:

  1. 用重置按钮重引导计算机,或关闭它之后再打开。

  2. 当 GRUB 2 引导屏幕显示时,选择高级选项这一项,然后从菜单中选择之前的内核。计算机将使用内核的前一个版本及其关联文件引导。

  3. 在引导过程完成后,使用 YaST 的引导加载程序模块去除新安装的内核,并根据需要将默认引导项设置为原先的内核。有关详细信息,请参见 第 18.3 节 “使用 YaST 配置引导加载程序”。不过,这可能并不是必须要进行的操作,因为回滚过程中自动更新工具通常会为您修改它。

  4. 重引导。

如果这样不能修复问题,请使用安装媒体引导计算机。计算机引导之后,继续至步骤 3

42.2.3 无图形登录

如果计算机能够启动,但是无法引导进入图形登录管理器,则问题可能出在默认的 systemd 目标选项或 X Window 系统的配置上。要检查当前的 systemd 默认目标,请运行命令 sudo systemctl get-default。如果返回的值为 not graphical.target,请运行命令 sudo systemctl isolate graphical.target。如果图形登录屏幕已启动,请登录并启动 YaST ›  系统 ›  服务管理器,然后将默认系统目标设置为图形界面。此后,系统应该能够引导进入图形登录屏幕。

如果即使已引导或者切换到图形目标,图形登录屏幕也不启动,则说明您的桌面或 X Window 软件可能未正确配置或者已损坏。检查 /var/log/Xorg.*.log 中的日志文件,以了解 X 服务器尝试启动时发出的详细消息。如果桌面在启动期间发生错误,可能会在系统日记中记录错误消息,您可以使用命令 journalctl 查询该日志(有关详细信息,请参见第 21 章 “journalctl:查询 systemd 日记)。如果这些错误消息指出问题出在 X 服务器中的配置上,请尝试修正这些问题。如果图形系统仍无法启动,请考虑重安装图形桌面。

42.2.4 无法挂载 Btrfs 根分区

如果 btrfs 根分区已损坏,请尝试以下选项:

  • 使用 -o recovery 选项挂载该分区。

  • 如果不起使用,请在您的根分区上运行 btrfs-zero-log

42.2.5 强制检查根分区

如果根分区被破坏,请在引导提示符处使用 forcefsck 参数:这样会将选项 -f (force) 传递给 fsck 命令。

42.2.6 禁用交换以启用引导

当某个交换设备不可用且系统在引导期间无法启用该设备时,引导可能会失败。通过将以下选项追加到内核命令行,来尝试禁用所有交换设备:

systemd.device_wants_unit=off systemd.mask=swap.target

您也可以尝试禁用特定的交换设备:

systemd.mask=dev-sda1.swap

42.2.7 GRUB 2 在双引导系统上重引导时失败

如果 GRUB 2 在重引导期间失败,请禁用 BIOS 中的 Fast Boot 设置。

42.3 登录问题

例如,当系统拒绝接受用户名和口令,或虽然接受但随后无法启动图形桌面、发生错误或转到命令行时,就会出现登录问题。

42.3.1 有效的用户名和口令组合失败

如果系统配置为使用网络身份验证或目录服务,但无法从为其配置的服务器上检索到结果,通常就会发生此问题。root 用户是仍能登录这些计算机的唯一本地用户。以下是计算机看似运行良好却无法正确处理登录的常见原因:

  • 网络出现故障。有关此问题的进一步说明,请转到第 42.4 节 “网络问题”

  • DNS 在当时不起作用(这使得 GNOME 不起作用,并使系统无法向安全服务器发出经验证的请求)。如果计算机对于任何操作都需要较长时间来响应,就表示处于这种情况。有关该主题的详细信息,请参见第 42.4 节 “网络问题”

  • 如果将系统配置为使用 Kerberos,则系统的本地时间与 Kerberos 服务器时间之间的差异可能超过了可接受的值(通常为 300 秒)。如果 NTP(网络时间协议)未正确地起作用,或者本地 NTP 服务器不起作用,则 Kerberos 身份验证将不再工作,因为该身份验证依赖于整个网络的通用时钟同步。

  • 系统的身份验证配置不正确。请对相关的 PAM 配置文件进行检查以确定是否存在指令输入错误或排序错误。有关 PAM 的其他背景信息及相关配置文件的语法,请参见第 2 章 “通过 PAM 进行身份验证

  • 主分区是加密的。有关该主题的详细信息,请参见第 42.3.3 节 “登录至加密的主分区失败”

在不涉及外部网络问题的情况下,解决方案是以 root 身份登录并修复配置。如果无法登录正在运行的系统,请按过程 18.3 “进入救援模式”中所述重引导系统并进入救援模式。

42.3.2 有效的用户名和口令不被接受

这是到目前为止用户最常遇到的问题,因为有许多原因可能引起该问题。登录失败可由多种原因造成,取决于您是使用本地用户管理和身份验证,还是使用网络身份验证。

本地用户管理失败可由以下原因造成:

  • 用户可能输入了错误的口令。

  • 用户包含桌面配置文件的主目录已损坏或被写保护。

  • X Window 系统可能无法验证此特定用户,尤其是在安装当前 Linux 发行套件之前,该用户的主目录已用于其他 Linux 发行套件的情况下。

要找到本地登录失败的原因,请执行如下操作:

  1. 在尝试调试整个身份验证机制之前,请检查用户所记的口令是否正确。如果用户记错了口令,请使用“YaST 用户管理”模块更改其口令。注意 Caps Lock 键,如果需要请解锁。

  2. root 身份登录,并使用 journalctl -e 检查系统日记,找出登录过程和 PAM 的错误消息。

  3. 尝试从控制台登录(使用 CtrlAltF1)。如果成功了,则问题不在 PAM 上,因为可以在该计算机上身份验证此用户。尝试找出与 X Window 系统或 GNOME 桌面相关的任何问题。有关详细信息,请参见第 42.3.4 节 “GNOME 桌面有问题”

  4. 如果用户的主目录被其他 Linux 产品所使用,请将该用户主目录中的 Xauthority 文件删除。使用控制台登录(通过 CtrlAltF1),然后以此用户身份运行 rm .Xauthority。这样应该可以消除该用户的 X 身份验证问题。然后再次尝试图形登录。

  5. 如果桌面由于配置文件损坏而无法启动,请参见第 42.3.4 节 “GNOME 桌面有问题”

下面列出了在特定的计算机上对特定用户进行的网络身份验证可能失败的常见原因:

  • 用户可能输入了错误的口令。

  • 用户名存在于计算机的本地身份验证文件中,但同时网络身份验证系统也提供了该用户名,从而引起冲突。

  • 主目录存在,但已损坏或不可用。该目录可能处于写保护状态或位于此刻无法访问的服务器上。

  • 用户无权登录到身份验证系统中的该特定主机。

  • 计算机出于某种原因更改了主机名,而用户无权登录到该主机。

  • 计算机无法访问包含该用户信息的身份验证服务器或目录服务器。

  • X Window 系统可能无法验证此特定用户,尤其是在安装当前 Linux 发行套件之前,该用户的主目录已用于其他 Linux 发行套件的情况下。

要通过网络身份验证找到登录问题的原因,请执行以下步骤:

  1. 在尝试调试整个身份验证机制之前,请检查用户所记的口令是否正确。

  2. 确定计算机在身份验证时要依赖的目录服务器,并确保计算机在正常运行且与其他计算机正常通讯。

  3. 确定该用户的用户名和口令在其他计算机上是否有效,以确保存在该用户的身份验证数据且已正确分发。

  4. 确定其他用户是否可以登录到该故障计算机。如果其他用户可以顺利登录,或者 root 可以登录,请登录并使用 journalctl -e > 文件检查系统日记。找到与登录尝试相对应的时间戳记,然后确定 PAM 是否生成了任何错误消息。

  5. 尝试从控制台登录(使用 CtrlAltF1)。如果成功,则问题不在用户主目录中的 PAM 或目录服务器上,因为可以在该计算机上验证此用户。尝试找出与 X Window 系统或 GNOME 桌面相关的任何问题。有关详细信息,请参见第 42.3.4 节 “GNOME 桌面有问题”

  6. 如果用户的主目录被其他 Linux 产品所使用,请将该用户主目录中的 Xauthority 文件删除。使用控制台登录(通过 CtrlAltF1),然后以此用户身份运行 rm .Xauthority。这样应该可以消除该用户的 X 身份验证问题。然后再次尝试图形登录。

  7. 如果桌面由于配置文件损坏而无法启动,请参见第 42.3.4 节 “GNOME 桌面有问题”

42.3.3 登录至加密的主分区失败

对于便携式计算机建议使用加密的主分区。如果无法登录到您的便携式计算机,原因可能是您的分区无法解锁。

在引导时,需要输入通行口令来解锁加密的分区。如果不输入它,引导进程继续,但保持分区锁定。

要解锁您的加密分区,请如下操作:

  1. CtrlAltF1 切换到文本控制台。

  2. root 用户身份登录。

  3. 用以下步骤重启动解锁进程:

    # systemctl restart home.mount
  4. 输入您的通行口令以解锁加密的分区。

  5. AltF7 退出文本控制台并切换回登录屏幕。

  6. 如常登录。

42.3.4 GNOME 桌面有问题

如果您遇到 GNOME 桌面问题,可以使用几种方法对行为异常的图形桌面环境进行查错。下面所述的建议过程提供了修复损坏的 GNOME 桌面的最安全选项。

过程 42.1︰ GNOME 查错
  1. 启动 YaST 并切换到安全和用户

  2. 打开用户和组管理对话框并单击添加

  3. 填写必填字段,然后单击确定以创建新用户。

  4. 注销并以新用户身份登录。这将为您提供一个全新的 GNOME 环境。

  5. 将旧用户帐户的 ~/.local/~/.config/ 目录中的单个子目录复制到新用户帐户的相应目录。

    每次复制操作之后,注销并以新用户身份再次登录,以检查 GNOME 是否仍正常工作。

  6. 重复上一步,直到找到破坏 GNOME 的配置文件。

  7. 以旧用户身份登录,并将有问题的配置文件移到其他位置。注销并以旧用户身份再次登录。

  8. 删除之前创建的用户。

42.4 网络问题

系统的许多问题尽管症状看起来不同,但可能都与网络有关。例如,系统不允许用户登录可能是因为网络有问题。本节介绍一个简单的核对表,您可以使用它来确定任何所遇到的网络问题的原因。

过程 42.2︰ 如何识别网络问题

在检查计算机的网络连接时,请执行如下操作:

  1. 如果使用的是以太网连接,请首先检查硬件。确保您的网络电缆已正确插入计算机和路由器(或集线器等)。以太网连接器旁边的控制灯通常应全部激活。

    如果连接失败,请检查网线在别的计算机上是否正常。如果正常,则可能是网卡引起了该问题。如果您的网络设置中有集线器或交换机,它们也可能有故障。

  2. 如果使用的是无线连接,请检查是否可与其他计算机建立此无线链接。如果没有,请联系无线网络的管理员。

  3. 完成对基本网络连通性的检查后,请尝试找出没有响应的服务。收集设置中所需的所有网络服务器的地址信息。在相应的 YaST 模块中查找这些信息,或者询问您的系统管理员。下面列出了设置中涉及的典型网络服务器及其服务中断时系统出现的症状。

    DNS(名称服务)

    名称服务中断或发生故障会在许多方面影响网络运行。如果本地计算机依赖于任一网络服务器进行身份验证,而这些服务器由于名称解析问题而无法找到,则用户甚至还不能登录。网络中由中断的名称服务管理的计算机将无法看到彼此且不能通信。

    NTP(时间服务)

    NTP 服务发生故障或中断可能会影响 Kerberos 身份验证和 X 服务器功能。

    NFS(文件服务)

    如果任何应用程序所需的数据存储在 NFS 挂载目录中,则一旦此服务停止或配置错误,应用程序便无法启动或正常运行。最坏的情况是,如果由于 NFS 服务器发生故障导致找不到包含 .gconf 子目录的用户主目录,则该用户的个人桌面配置将无法起作用。

    Samba(文件服务)

    如果任何应用程序需要的数据存储在有故障的 Samba 服务器上的某个目录中,它便无法启动或正常运行。

    NIS(用户管理)

    如果您的 SUSE Linux Enterprise Desktop 系统依赖有故障的 NIS 服务器提供用户数据,用户将无法登录此计算机。

    LDAP(用户管理)

    如果您的 SUSE Linux Enterprise Desktop 系统依赖有故障的 LDAP 服务器提供用户数据,用户将无法登录此计算机。

    Kerberos(身份验证)

    身份验证无法进行,也无法登录任何计算机。

    CUPS(网络打印)

    用户无法打印。

  4. 请检查网络服务器是否正在运行并且您的网络设置是否允许您建立连接:

    重要
    重要:限制

    下面介绍的调试步骤只适用于简单的网络服务器/客户端设置,不涉及任何内部路由。假设服务器和客户端都是同一子网的成员,不需要额外的路由。

    1. 使用 ping IP_ADDRESS/HOSTNAME(替换为服务器的主机名或 IP 地址)来检查各台服务器是否正在运行,且能够对网络作出响应。如果此命令成功,表示您所查找的主机在正常运行,并且网络的名称服务配置正确。

      如果 ping 命令失败,同时显示消息 destination host unreachable,则表明您的系统或期望的服务器未正确配置或已宕机。从另一台计算机运行 ping IP addressYOUR_HOSTNAME,检查是否可连接您的系统。如果可以从其他计算机访问您的计算机,则表明该服务器未运行或未正确配置。

      如果 ping 命令失败且返回 unknown host,则表示名称服务未正确配置或使用的主机名不正确。要对该问题进行进一步的检查,请参见步骤 4.b。如果 ping 命令仍然失败,则可能网卡未正确配置或网络硬件存在故障。

    2. 使用 host HOSTNAME 来检查您尝试连接的服务器的主机名是否正确转译为 IP 地址,反之亦然。如果此命令返回了该主机的 IP 地址,则名称服务已在正常运行。如果 host 命令失败,请检查您主机上所有与名称和地址解析相关的网络配置文件:

      /var/run/netconfig/resolv.conf

      此文件用于对当前使用的名称服务器和域进行跟踪。它是 /run/netconfig/resolv.conf 的符号链接,YaST 或 DHCP 通常会自动对其进行调整。请确保此文件采用以下结构,并且所有的网络地址和域名都正确无误:

      search FULLY_QUALIFIED_DOMAIN_NAME
      nameserver IPADDRESS_OF_NAMESERVER

      此文件中可以包含多个名称服务器地址,但是其中必须至少有一个能够对您的主机提供正确的名称解析。如果需要,请使用 YaST 的“网络设置”模块(“主机名/DNS”选项卡)调整此文件。

      如果您的网络连接是通过 DHCP 处理的,请在 YaST 的“网络设置”模块(“主机名/DNS”选项卡)中选择通过 DHCP 设置主机名(可针对所有接口全局设置,也可以逐个接口设置)和通过 DHCP 更新名称服务器和搜索列表,以允许 DHCP 更改主机名和名称服务信息。

      /etc/nsswitch.conf

      此文件告诉 Linux 到何处查找名称服务信息。它应显示为:

       ...
      hosts: files dns
      networks: files dns
      ...

      dns 项是必不可少的。它告诉 Linux 要使用外部名称服务器。通常这些项是 YaST 自动管理的,但最好谨慎地检查。

      如果主机上的所有相关条目均正确,请让系统管理员检查 DNS 服务器配置,以确定时区信息是否正确。如果确信主机和 DNS 服务器的 DNS 配置正确,请检查网络和网络设备的配置。

    3. 如果系统无法与网络服务器建立连接,并且已排除了名称服务出现问题的可能,则请检查网卡的配置。

      使用 ip addr show NETWORK_DEVICE 命令可检查此设备是否已正确配置。确保已正确配置带网络掩码 (/MASK) 的 inet address。如果 IP 地址中出现错误或网络掩码中缺少一位,将使您的网络配置无法使用。如有必要,也在服务器上执行该检查。

    4. 如果名称服务和网络硬件均配置正确且正在运行,但某些外部网络连接仍然长时间超时或完全失败,请使用 traceroute FULLY_QUALIFIED_DOMAIN_NAME 命令(以 root 身份执行)来跟踪这些请求所经过的网络路由。此命令将列出某一请求从您的计算机传递到其目标所经过的所有网关(跳跃)。其中列出了每个跃点的响应时间以及此跃点是否可访问。请将 traceroute 和 ping 结合使用以确定故障原因并通知管理员。

确定了网络故障的原因后,就可以自行解决(如果问题出在您自己的机器上),或告诉网络系统管理员您的发现,以便其重新配置服务或修复必要的系统。

42.4.1 NetworkManager 问题

如果网络连接有问题,请按过程 42.2 “如何识别网络问题” 中所述缩小范围。如果 NetworkManager 看上去有问题,请执行以下步骤,以获取相关的日志来找出 NetworkManager 为何失败的线索:

  1. 打开外壳,并以 root 身份登录。

  2. 重启动 NetworkManager:

    > sudo systemctl restart NetworkManager
  3. 以普通用户身份打开一个网页,例如 https://www.opensuse.org,看看是否可以连接。

  4. 收集 /var/log/NetworkManager 中有关 NetworkManager 状态的任何信息。

有关 NetworkManager 的更多信息,请参考第 31 章 “使用 NetworkManager

42.5 数据问题

数据问题是指无论计算机是否能够正确引导,有一点是明确的,即系统上的数据损坏并且系统需要恢复。这些情况下需要对关键数据进行备份,以便您能够在系统出现故障时恢复故障前的状态。

42.5.1 管理分区映像

有时您需要从整个分区甚至硬盘来执行备份。Linux 附带了 dd 工具,该工具可用于创建磁盘的精确副本。与 gzip 一起使用可节省空间。

过程 42.3︰ 备份和恢复硬盘
  1. root 用户身份启动外壳。

  2. 选择源设备。名称通常类似于 /dev/sda(标记为 SOURCE)。

  3. 确定要把您的映像存储在何处(标记为 BACKUP_PATH)。它不能与您的源设备相同。换句话说:如果从 /dev/sda 创建备份,则映像文件不得存储在 /dev/sda 下。

  4. 运行以下命令创建压缩映像文件:

    # dd if=/dev/SOURCE | gzip > /BACKUP_PATH/image.gz
  5. 用以下命令恢复硬盘:

    # gzip -dc /BACKUP_PATH/image.gz | dd of=/dev/SOURCE

如果只需备份某个分区,请将 SOURCE 占位符替换为相应的分区。在这种情况下,映像文件可以位于同一硬盘上不同的分区中。

42.5.2 使用救援系统

有多种原因会造成系统无法正常启动和运行。系统崩溃后造成文件系统损坏、配置文件损坏或引导加载程序配置损坏是最常见的原因。

为了帮助您解决这些状况,SUSE Linux Enterprise Desktop 提供了一套您可以引导的救援系统。该救援系统是一个小型 Linux 系统,可以加载到一个 RAM 磁盘并以根文件系统的形式挂载,使您可以从外部访问 Linux 分区。使用该救援系统,可以恢复或修改系统中任何一个重要的方面:

  • 操作任意类型的配置文件。

  • 检查文件系统中的缺陷和启动自动修复进程。

  • 访问更改根环境下的已安装系统。

  • 检查、修改和重新安装引导加载程序配置。

  • 从安装有误的设备驱动程序或不可用内核恢复。

  • 使用 parted 命令调整分区大小。在 GNU Parted 网站 https://www.gnu.org/software/parted/parted.html 上可以找到有关该工具的更多信息。

该救援系统可以从各种来源和位置进行加载。最简单的选择是从原始安装媒体上引导该救援系统。

  1. 将安装媒体插入 DVD 驱动器中。

  2. 重新启动系统。

  3. 在引导屏幕上按 F4 并选择 DVD-ROM。然后从主屏幕选择救援系统

  4. Rescue: 提示符处输入 root。无需口令。

如果硬件设置不包含 DVD 驱动器,可以从网络源引导该救援系统。以下示例适用于远程引导的情形,如果使用其他引导媒体(例如 DVD),请相应地修改 info 文件,并按照正常的安装方式进行引导。

  1. 进入 PXE 引导设置的配置中,添加下面的行:install=PROTOCOL://INSTSOURCErescue=1。但如果需要启动修复系统,请使用 repair=1。如同正常的安装一样,PROTOCOL 代表任何支持的网络协议(NFS、HTTP、FTP 等),INSTSOURCE 代表网络安装源的路径。

  2. 使用网络唤醒引导系统(如Section 14.5, “Using wake-on-LAN for remote wakeups”中所述)。

  3. Rescue: 提示符处输入 root。无需口令。

进入该救援系统后,可通过 AltF1AltF6 键来访问虚拟控制台。

/bin 目录中提供了一个外壳和其他有用的实用程序,如 mount 程序。/sbin 目录包含重要文件和用于查看及修复文件系统的网络实用程序。此目录还包含用于系统维护的最重要的二进制文件(如 fdiskmkfsmkswapmount),以及用于维护网络的 shutdownipss。目录 /usr/bin 包含 vi 编辑器、find、less 和 SSH。

要查看系统消息,请使用命令 dmesg,或使用 journalctl 查看系统日志。

42.5.2.1 检查和操作配置文件

举一个可以通过该救援系统修复配置的例子,假设有一个被损坏的配置文件,使该系统无法正常引导。您可以通过救援系统修复该配置文件。

要操作配置文件,请执行以下步骤:

  1. 用上述方法之一启动救援系统。

  2. 要将位于 /dev/sda6 下的根文件系统挂载到救援系统中,请使用如下命令:

    > sudo mount /dev/sda6 /mnt

    系统的所有目录现在均位于 /mnt

  3. 将目录切换为所挂载的根文件系统:

    > sudo cd /mnt
  4. 在 vi 编辑器中打开有问题的配置文件。调整并保存配置。

  5. 从救援系统中卸载根文件系统:

    > sudo umount /mnt
  6. 重引导计算机。

42.5.2.2 修复和检查文件系统

通常,不能在正在运行的系统上修复文件系统。如果遇到严重问题,您甚至都无法挂载根文件系统,系统引导可能以显示 kernel panic 结束。在这种情况下,唯一的方法是从外部修复系统。系统包含用于检查和修复多种文件系统类型(例如 ext2ext3ext4msdosvfat)的 fsck 实用程序。使用 -t 选项指定要检查的文件系统。

以下命令会检查在 /etc/fstab 规范中找到的所有 ext4 文件系统:

> sudo fsck -t ext4 -A
提示
提示

对于 Btrfs,您可以使用 btrfsprogs 软件包中的 btrfs check 命令。

在以下位置查找有关 Btrfs 文件系统的主题:

42.5.2.3 访问已安装系统

如果需要从救援系统访问已安装系统,需要在更改根环境中执行此操作。例如,修改引导加载程序配置或执行硬件配置实用程序。

要设置基于已安装系统的更改根环境,请执行以下步骤:

  1. 提示
    提示:导入 LVM 卷组

    如果您使用的是 LVM 设置(有关更多一般性细节,请参见Section 7.3, “LVM configuration”),请导入所有现有的卷组,以便能够查找和挂载设备:

    rootvgimport -a

    运行 lsblk 以检查哪个节点对应于根分区。在本例中,该节点为 /dev/sda2

    > lsblk
    NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    sda           8:0    0 149,1G  0 disk
    ├─sda1        8:1    0     2G  0 part  [SWAP]
    ├─sda2        8:2    0    20G  0 part  /
    └─sda3        8:3    0   127G  0 part
      └─cr_home 254:0    0   127G  0 crypt /home
  2. 从安装的系统挂载根分区:

    > sudo mount /dev/sda2 /mnt
  3. 挂载 /proc/dev/sys 分区:

    > sudo mount -t proc none /mnt/proc
    > sudo mount --rbind /dev /mnt/dev
    > sudo mount --rbind /sys /mnt/sys
  4. 现在可以更改根分区为新的环境,并保留 bash 外壳:

    > chroot /mnt /bin/bash
  5. 最后,挂载已安装系统的剩余分区:

    > mount -a
  6. 现在可以访问已安装系统了。在重引导系统之前,请使用 umount -a 卸载分区,并使用 exit 退出更改根环境。

警告
警告:限制

尽管对已安装系统的文件和应用程序有完全访问权,但仍有一些限制。运行的内核是用救援系统引导的那个,不是用更改根环境引导的那个。它仅支持关键硬件,如果内核版本不完全相同,则无法从已安装系统中添加内核模块。始终使用 uname -r 检查当前正在运行的(救援)内核版本,然后确定更改根环境中的 /lib/modules 目录下是否有匹配的子目录。如果是,可以使用已安装模块;否则,需要在其他媒体(例如闪盘)上提供模块的正确版本。很多时候,救援内核版本与已安装模块不同,这样您完全无法访问声卡等。也不可能启动图形用户界面。

还应注意,在使用 AltF1 - AltF6 键切换控制台时,要退出更改根环境。

42.5.2.4 修改和重新安装引导加载程序

有时,系统无法引导是因为引导加载程序配置已损坏。例如,如果没有正常工作的引导加载程序,启动例程将无法将物理驱动器转化为 Linux 文件系统中的实际位置。

要检查引导加载程序配置并重新安装引导加载程序,请执行以下步骤:

  1. 第 42.5.2.3 节 “访问已安装系统” 中所述执行必要的步骤以访问已安装系统。

  2. 检查系统上是否已安装 GRUB 2 引导加载程序。如果未安装,请安装 grub2 软件包并运行以下命令

    > sudo grub2-install /dev/sda
  3. 根据第 18 章 “引导加载程序 GRUB 2中所述的 GRUB 2 配置原则,检查下列文件是否正确配置,并根据需要应用修复。

    • /etc/default/grub

    • /boot/grub2/device.map

    • /boot/grub2/grub.cfg(此文件是系统生成的,不要编辑)

    • /etc/sysconfig/bootloader

  4. 使用以下命令序列重新安装引导加载程序:

    > sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  5. 卸载分区,注销更改根目录环境并重引导该系统:

    > umount -a
    exit
    reboot

42.5.2.5 修复内核安装

内核更新会产生新的 bug,这样会影响系统运行。例如,系统某个硬件的驱动程序有故障,您就无法访问和使用该硬件。在这种情况下,需还原到上一个工作内核(如果在系统上可用),或从安装媒体安装原始内核。

提示
提示:如何在更新后保留最后几个内核

为了防止内核更新出现故障后无法进行引导,请使用内核多版本功能,并告知 libzypp 在更新后保留哪些内核。

例如,要始终保留最后两个内核和当前正在运行的内核,请将

multiversion.kernels = latest,latest-1,running

/etc/zypp/zypp.conf 文件。有关更多信息,请参见第 27 章 “安装多个内核版本

类似的情况是,当您需要重新安装或更新已损坏而不受 SUSE Linux Enterprise Desktop 支持的设备驱动程序时。例如,当硬件供应商使用特定设备时,比如硬件 RAID 控制器,它需要一个二进制驱动程序才能被操作系统识别。供应商通常会发布含有固定版或更新版必要驱动程序的驱动程序更新磁盘 (DUD)。

这两种情况下,您都需要以救援模式访问已安装系统,并修复内核相关问题,否则系统可能无法正确引导:

  1. SUSE Linux Enterprise Desktop 安装媒体引导。

  2. 如果您正在从内核更新故障中恢复,请跳过此步骤。如果需要使用驱动程序更新磁盘 (DUD),请在出现引导菜单后按 F6 加载驱动程序更新,并选择驱动程序更新的路径或 URL,然后确认

  3. 从引导菜单中选择救援系统,并按 Enter。如果选择使用 DUD,将要求您指定存储驱动程序更新的位置。

  4. Rescue: 提示符处输入 root。无需口令。

  5. 手动将目标系统和更改根挂载新环境。有关详细信息,请参见第 42.5.2.3 节 “访问已安装系统”

  6. 如果使用的是 DUD,请安装/重新安装/更新有故障的设备驱动程序软件包。始终确保已安装的内核版本与您正在安装的驱动程序版本完全相同。

    如果要修复有故障的内核更新安装,可以从安装媒体使用以下过程安装原始内核。

    1. 使用 hwinfo --cdrom 识别 DVD 设备,并使用 mount /dev/sr0 /mnt 挂载该设备。

    2. 导航到 DVD 上存储内核文件的目录,例如 cd /mnt/suse/x86_64/

    3. 使用 rpm -i 命令根据您的偏好安装所需的 kernel-*kernel-*-basekernel-*-extra 软件包。

  7. 更新配置文件,必要时可重初始化引导加载程序。有关详细信息,请参见第 42.5.2.4 节 “修改和重新安装引导加载程序”

  8. 从系统驱动器中删除所有可引导的媒体,然后重引导。