本章描述了一系列潜在问题及其解决方案。即使您的状况未精确列出,也可能有一个足够相似的情况,可以为解决您的问题提供提示。
Linux 以详细的方式报告信息。当您遇到系统问题时,有几个地方可以查看。其中大多数是 Linux 系统的标准配置,并且有几个与 openSUSE Leap 系统相关。大多数日志文件都可以使用 YaST 查看( › )。
YaST 提供了收集支持团队所需的所有系统信息的功能。使用 › ,然后选择问题类别。在收集所有信息后,将其附加到您的支持请求中。
以下是通常会检查的日志文件列表,以及它们典型用途的描述。包含 ~ 的路径指的是当前用户的主目录。
|
日志文件 |
描述 |
|---|---|
|
|
来自当前运行的桌面应用程序的消息。 |
|
|
来自 AppArmor 的日志文件,请参阅 “安全和加固指南” 以获取详细信息。 |
|
|
来自 Audit 的日志文件,用于跟踪对系统文件、目录或资源的任何访问,并跟踪系统调用。请参阅 “安全和加固指南” 以获取详细信息。 |
|
|
来自邮件系统的消息。 |
|
|
来自 NetworkManager 的日志文件,用于收集网络连接问题。 |
|
|
包含 Samba 服务器和客户端日志消息的目录。 |
|
|
来自内核和系统日志守护程序的所有消息,级别为“警告”或更高。 |
|
|
二进制文件,包含当前机器会话的用户登录记录。使用 |
|
|
X Window 系统的启动和运行时日志文件。对于调试失败的 X 启动非常有用。 |
|
|
包含 YaST 操作及其结果的目录。 |
|
|
Zypper 的日志文件。 |
除了日志文件之外,您的机器还为您提供有关正在运行的系统的信息。请参阅 表 21.2:使用 /proc 文件系统的系统信息
/proc 文件系统的系统信息 #|
文件 |
描述 |
|---|---|
|
|
包含处理器信息,包括其类型、制造商、型号和性能。 |
|
|
显示当前正在使用的 DMA 通道。 |
|
|
显示哪些中断正在使用,以及每个中断的使用次数。 |
|
|
显示 I/O(输入/输出)内存的状态。 |
|
|
显示当前正在使用的 I/O 端口。 |
|
|
显示内存状态。 |
|
|
显示各个模块。 |
|
|
显示当前挂载的设备。 |
|
|
显示所有硬盘的分区情况。 |
|
|
显示当前 Linux 版本。 |
除了 /proc 文件系统之外,Linux 内核还使用 sysfs 模块导出信息,这是一个内存文件系统。该模块表示内核对象、其属性和关系。有关 sysfs 的更多信息,请参阅 “参考” 中的 udev 上下文,第 16 章“使用 udev 进行动态内核设备管理”。 表 21.3 包含 /sys 下最常见目录的概述。
/sys 文件系统的系统信息 #|
文件 |
描述 |
|---|---|
|
|
包含系统中发现的每个块设备的子目录。通常,这些主要是磁盘类型设备。 |
|
|
包含每个物理总线类型的子目录。 |
|
|
包含按功能类型分组的子目录的设备(如图形、网络、打印机等)。 |
|
|
包含全局设备层次结构。 |
Linux 带有用于系统分析和监视的几个工具。请参阅 “系统分析和调优指南”,第 2 章“系统监视实用程序”,了解在系统诊断中使用的最重要的工具选择。
以下每个场景都以描述问题的标题开头,然后是提供建议解决方案、有关更详细解决方案的可用参考以及与其他相关场景的交叉引用的段落或两个段落。
启动问题是指您的系统无法正确启动(未启动到预期的目标和登录屏幕)的情况。
如果硬件正常工作,则启动加载程序可能已损坏,Linux 无法在机器上启动。在这种情况下,需要修复启动加载程序。为此,您需要启动救援系统,如 第 21.5.2 节,“使用救援系统” 所述,并按照 第 21.5.2.4 节,“修改和重新安装启动加载程序” 中的说明进行操作。
或者,您可以使用救援系统修复启动加载程序,如下所示。从安装介质启动机器。在启动屏幕上,选择 › 。选择包含已安装系统的磁盘和内核,并使用默认内核选项。
系统启动后,启动 YaST 并切换到 › 。确保选中 选项,然后单击 。这将通过覆盖它来修复损坏的启动加载程序,或者在它丢失时安装启动加载程序。
机器无法启动的另一个原因是 BIOS 相关。
检查您的 BIOS 是否引用了您的硬盘。如果硬盘本身无法使用当前的 BIOS 设置找到,GRUB 2 可能根本不会启动。
检查您的系统的启动顺序是否包含硬盘。如果未启用硬盘选项,您的系统可能会正确安装,但在需要访问硬盘时无法启动。
此行为通常发生在失败的内核升级之后,被称为 内核恐慌,因为系统控制台上的错误类型有时可以在过程的最后阶段看到。如果机器刚刚在软件更新后重新启动,则立即目标是使用旧的、经过验证的 Linux 内核和相关文件重新启动它。这可以在 GRUB 2 启动加载程序屏幕的启动过程中完成,如下所示
使用复位按钮重新启动计算机,或将其关闭并再次打开。
当 GRUB 2 启动屏幕可见时,选择 条目,并从菜单中选择以前的内核。机器将使用先前版本的内核及其相关文件启动。
完成启动过程后,删除新安装的内核,如果需要,使用 YaST 模块将默认启动条目设置为旧内核。有关更多信息,请参阅 “参考” 中的 第 12 章“启动加载程序 GRUB 2”,第 12.3 节“使用 YaST 配置启动加载程序”。但是,这没有必要,因为自动更新工具通常会在回滚过程中为您修改它。
重新启动。
如果这不能解决问题,请使用安装介质启动计算机。机器启动后,继续执行 步骤 3。
如果机器启动,但未启动到图形登录管理器,请预计存在默认 systemd 目标的选择或 X Window 系统配置的问题。要检查当前的 systemd 默认目标,请运行命令 sudo systemctl get-default。如果返回的值 不是 graphical.target,请运行命令 sudo systemctl isolate graphical.target。如果图形登录屏幕启动,请登录并启动 › › ,并将 设置为 。从现在开始,系统应启动到图形登录屏幕。
即使启动或切换到图形目标后,图形登录屏幕仍未启动,您的桌面或 X Window 软件可能配置错误或已损坏。检查 /var/log/Xorg.*.log 中的日志文件,以获取 X 服务器尝试启动时的详细消息。如果桌面启动失败,它可能会将错误消息记录到系统日志中,可以使用命令 journalctl 查询(有关更多信息,请参阅 “参考” 中的 第 11 章“journalctl:查询 systemd 日志”)。如果这些错误消息提示 X 服务器中的配置问题,请尝试修复这些问题。如果图形系统仍然无法启动,请考虑重新安装图形桌面。
如果 btrfs 根分区已损坏,请尝试以下选项
使用 -o recovery 选项挂载分区。
如果失败,请在根分区上运行 btrfs-zero-log。
当交换设备不可用并且系统无法在启动期间启用它时,启动可能会失败。尝试禁用所有交换设备,方法是将以下选项附加到内核命令行
systemd.device_wants_unit=off systemd.mask=swap.target
您还可以尝试禁用特定的交换设备
systemd.mask=dev-sda1.swap
登录问题是指您的系统拒绝接受用户名和密码,或者接受它们但无法启动图形桌面、产生错误或降至命令行,例如。
这通常发生在系统配置为使用网络身份验证或目录服务,并且无法从其配置的服务器检索结果时。 root 用户是仍然可以登录到这些机器的唯一本地用户。以下是机器似乎功能正常但无法正确处理登录的常见原因
网络无法工作。有关进一步的说明,请参阅 第 21.4 节,“网络问题”。
DNS 当前无法工作(这会阻止 GNOME 正常工作,并且系统无法向安全服务器发出经过验证的请求)。表明这种情况的一个迹象是机器对任何操作的响应时间很长。有关此主题的更多信息,请参阅 第 21.4 节,“网络问题”。
如果系统配置为使用 Kerberos,则系统的本地时间可能已漂移超过与 Kerberos 服务器时间允许的偏差(通常为 300 秒)。如果 NTP(网络时间协议)无法正常工作或本地 NTP 服务器无法正常工作,Kerberos 身份验证将停止工作,因为它依赖于网络上常见的时钟同步。
系统的身份验证配置有误。请检查涉及的 PAM 配置文件中是否存在拼写错误或指令顺序错误。有关 PAM 和涉及的配置文件语法的更多背景信息,请参阅 “安全和加固指南”一书,第 2 章“使用 PAM 进行身份验证”。
主分区已加密。有关此主题的更多信息,请参阅 第 21.3.3 节,“登录到加密的主分区失败”。
在不涉及外部网络问题的情况下,解决方案是以 root 用户身份登录并修复配置。如果您无法登录到正在运行的系统,请按照 “参考”一书,第 12 章“引导加载程序 GRUB 2”,第 12.5 节“救援模式”,进入救援模式 中的说明将其重新启动到救援模式。
这是用户遇到的最常见的问题,因为导致此问题的原因有很多。根据您是使用本地用户管理和身份验证还是网络身份验证,登录失败的原因不同。
本地用户管理可能因以下原因而失败
用户可能输入了错误的密码。
包含桌面配置文件的主目录已损坏或受写入保护。
X Window 系统在验证特定用户时可能存在问题,尤其是在用户的主目录之前已用于另一个 Linux 发行版的情况下。
要确定本地登录失败的原因,请按以下步骤操作
在开始调试整个身份验证机制之前,请检查用户是否正确记住了他们的密码。如果用户可能没有正确记住他们的密码,请使用 YaST 用户管理模块更改用户的密码。注意 Caps Lock 键并根据需要解锁它。
以 root 用户身份登录,并使用 journalctl -e 检查系统日志,查找登录过程和 PAM 的错误消息。
尝试从控制台登录(使用 Ctrl–Alt–F1)。如果成功,则不能将责任归咎于 PAM,因为可以验证此用户在此机器上。尝试定位 X Window 系统或 GNOME 桌面中的任何问题。有关更多信息,请参阅 第 21.3.4 节,“GNOME 桌面存在问题”。
如果用户的家目录之前已用于另一个 Linux 发行版,请删除用户家目录中的 Xauthority 文件。使用控制台登录通过 Ctrl–Alt–F1 并以该用户身份运行 rm .Xauthority。这应该可以消除该用户的 X 身份验证问题。再次尝试图形登录。
如果桌面无法启动,因为配置文件已损坏,请按照 第 21.3.4 节,“GNOME 桌面存在问题” 中的说明进行操作。
在下文中,列出了特定用户网络身份验证可能在特定机器上失败的常见原因
用户可能输入了错误的密码。
用户名存在于机器的本地身份验证文件中,也由网络身份验证系统提供,从而导致冲突。
主目录存在但已损坏或不可用。也许它受到写入保护或位于当前无法访问的服务器上。
用户没有权限登录到身份验证系统中的特定主机。
出于某种原因,机器已更改主机名,并且用户没有权限登录到该主机。
机器无法访问包含该用户信息的身份验证服务器或目录服务器。
X Window 系统在验证特定用户时可能存在问题,尤其是在用户的主目录之前已用于另一个 Linux 发行版的情况下。
要确定使用网络身份验证登录失败的原因,请按以下步骤操作
在开始调试整个身份验证机制之前,请检查用户是否正确记住了他们的密码。
确定机器依赖于哪个目录服务器进行身份验证,并确保其已启动并正在与其他机器正确通信。
确定用户的用户名和密码在其他机器上是否有效,以确保他们的身份验证数据存在并已正确分发。
查看是否可以有其他用户登录到出现故障的机器。如果另一个用户可以毫不费力地登录,或者 root 可以登录,请登录并使用 journalctl -e > 文件检查系统日志。找到与登录尝试相对应的时间戳,并确定 PAM 是否生成了任何错误消息。
尝试从控制台登录(使用 Ctrl–Alt–F1)。如果成功,则问题不在于 PAM 或托管用户主目录的目录服务器,因为可以验证此用户在此机器上。尝试定位 X Window 系统或 GNOME 桌面中的任何问题。有关更多信息,请参阅 第 21.3.4 节,“GNOME 桌面存在问题”。
如果用户的家目录之前已用于另一个 Linux 发行版,请删除用户家目录中的 Xauthority 文件。使用控制台登录通过 Ctrl–Alt–F1 并以该用户身份运行 rm .Xauthority。这应该可以消除该用户的 X 身份验证问题。再次尝试图形登录。
如果桌面无法启动,因为配置文件已损坏,请按照 第 21.3.4 节,“GNOME 桌面存在问题” 中的说明进行操作。
建议对笔记本电脑使用加密的主分区。如果您无法登录到笔记本电脑,原因可能是您的分区无法解锁。
在启动时,您需要输入密码才能解锁加密分区。如果您没有输入它,启动过程将继续,使分区保持锁定状态。
要解锁加密分区,请按以下步骤操作
使用 Ctrl–Alt–F1 切换到文本控制台。
成为 root 用户。
使用以下命令再次启动解锁过程
# systemctl restart home.mount输入您的密码以解锁加密分区。
退出文本控制台,并使用 Alt–F7 切换回登录屏幕。
像往常一样登录。
如果您遇到 GNOME 桌面问题,有几种方法可以对出现故障的图形桌面环境进行故障排除。下面描述的推荐过程提供了修复损坏的 GNOME 桌面的最安全选项。
启动 YaST 并切换到 。
打开 对话框,然后单击 。
填写必填字段,然后单击 以创建新用户。
注销并以新用户身份登录。这将为您提供一个全新的 GNOME 环境。
将单个子目录从旧用户帐户的 ~/.local/ 和 ~/.config/ 目录复制到新用户帐户的相应目录。
在每次复制操作后注销并再次以新用户身份登录,以检查 GNOME 是否仍然可以正常工作。
重复上一步,直到找到破坏 GNOME 的配置文件。
以旧用户身份登录,并将违规的配置文件移动到其他位置。注销并再次以旧用户身份登录。
删除之前创建的用户。
您系统的许多问题可能与网络相关,尽管症状各不相同。例如,系统不允许用户登录的原因可能是网络问题。本节介绍一个简单的检查清单,您可以应用它来识别遇到的任何网络问题的根本原因。
在检查机器的网络连接时,请按以下步骤操作
如果您使用以太网连接,请首先检查硬件。确保您的网络电缆已正确插入您的计算机和路由器(或集线器等)。以太网连接器旁边的控制灯通常都处于活动状态。
如果连接失败,请检查您的网络电缆是否适用于其他机器。如果可以,则您的网卡导致故障。如果您的网络设置中包含集线器或交换机,它们也可能存在故障。
如果使用无线连接,请检查其他机器是否可以建立无线链路。如果不能,请联系无线网络管理员。
在检查了基本的网络连接后,尝试找出哪个服务没有响应。收集设置中所有网络服务器的地址信息。要么在适当的 YaST 模块中查找它们,要么询问您的系统管理员。以下列表给出了设置中涉及的典型网络服务器以及故障的症状。
损坏或功能失调的名称服务会以多种方式影响网络的运行。如果本地机器依赖于任何网络服务器进行身份验证,并且由于名称解析问题而无法找到这些服务器,则用户甚至无法登录。由损坏的名称服务器管理的网络中的机器将无法“看到”彼此并进行通信。
功能失调或损坏的 NTP 服务可能会影响 Kerberos 身份验证和 X 服务器功能。
如果任何应用程序需要存储在 NFS 挂载目录中的数据,如果此服务关闭或配置错误,则它将无法启动或正常运行。在最坏的情况下,如果包含 .gconf 子目录的用户个人桌面配置无法找到,因为 NFS 服务器出现故障,则用户的个人桌面配置将无法启动。
如果任何应用程序需要存储在故障 Samba 服务器上的目录中的数据,则它将无法启动或正常运行。
如果您的 openSUSE Leap 系统依赖于故障 NIS 服务器来提供用户数据,则用户无法登录到此机器。
如果您的 openSUSE Leap 系统依赖于故障 LDAP 服务器来提供用户数据,则用户无法登录到此机器。
身份验证不起作用,登录到任何机器都失败。
用户无法打印。
检查网络服务器是否正在运行以及您的网络设置是否允许您建立连接
下面描述的调试过程仅适用于不涉及任何内部路由的简单网络服务器/客户端设置。它假定服务器和客户端都位于无需额外路由的同一子网中。
使用 ping IP_ADDRESS/HOSTNAME(替换为服务器的主机名或 IP 地址)检查它们中的每一个是否已启动并响应网络。如果此命令成功,则表示您正在查找的主机已启动并正在运行,并且您的网络的名称服务已配置正确。
如果 ping 失败并显示 目标主机不可达,则您的系统或所需服务器未正确配置或已关闭。通过从另一台机器运行 ping IP 地址 或 YOUR_HOSTNAME 来检查您的系统是否可达。如果您可以从另一台机器访问您的机器,则服务器未运行或未正确配置。
如果 ping 命令失败并显示 未知主机,则表明名称服务配置不正确或使用的主机名不正确。有关此问题的进一步检查,请参阅 步骤 4.b。如果 ping 命令仍然失败,则可能是您的网卡配置不正确或您的网络硬件出现故障。
使用 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 处理,请启用 DHCP 以更改主机名和名称服务信息,方法是在 YaST 网络设置模块(主机名/DNS 选项卡)中选择 (可以全局为任何接口设置,也可以为每个接口设置)和 。
/etc/nsswitch.conf此文件告诉 Linux 在哪里查找名称服务信息。它应该如下所示
... hosts: files dns networks: files dns ...
dns 条目至关重要。它告诉 Linux 使用外部名称服务器。通常,这些条目由 YaST 自动管理,但最好检查一下。
如果主机上的所有相关条目都正确,请让您的系统管理员检查 DNS 服务器配置,以获取正确的区域信息。 有关 DNS 的详细信息,请参阅 “参考”手册,第 19 章“域名系统”。 如果您已确保主机和 DNS 服务器的 DNS 配置正确,请继续检查您的网络和网络设备的配置。
如果您的系统无法建立与网络服务器的连接,并且您已将名称服务问题排除在可能的故障原因列表中,请检查您的网卡配置。
使用命令 ip addr show NETWORK_DEVICE 检查该设备是否已正确配置。确保配置了带有子网掩码 (/MASK) 的 inet address。IP 地址中的错误或网络掩码中缺少一位将导致您的网络配置无法使用。如有必要,也对服务器执行此检查。
如果名称服务和网络硬件配置正确且正在运行,但某些外部网络连接仍然出现长时间超时或完全失败,请使用 traceroute FULLY_QUALIFIED_DOMAIN_NAME(以 root 用户身份执行)来跟踪这些请求的网络路由。此命令列出您的机器在到达目的地时经过的任何网关(跃点)。它列出每个跃点的响应时间以及该跃点是否可达。结合使用 traceroute 和 ping 命令来找到故障原因,并告知管理员。
当您确定网络问题的根源后,您可以自行解决(如果问题位于您的机器上),或者告知您的网络管理员您的发现,以便他们重新配置服务或修复必要的系统。
如果您在使用网络连接时遇到问题,请按照 过程 21.2,“如何识别网络问题” 中所述的方法缩小问题范围。如果 NetworkManager 看上去有问题,请按照以下步骤获取提供故障提示的日志。
打开 shell 并以 root 用户身份登录。
重启 NetworkManager
>sudosystemctl restart NetworkManager
以普通用户打开一个网页,例如 https://opensuse.net.cn,以查看您是否可以连接。
收集 /var/log/NetworkManager 中的有关 NetworkManager 状态的任何信息。
有关 NetworkManager 的更多信息,请参阅 “参考”手册,第 28 章“使用 NetworkManager”。
数据问题是指机器可能无法正确启动,但无论如何,很明显系统上的数据已损坏,并且需要恢复系统状态。这些情况需要备份您的关键数据,以便您可以从系统故障之前恢复系统状态。
有时您需要从整个分区甚至硬盘备份。Linux 带有 dd 工具,它可以创建您磁盘的精确副本。结合使用 gzip 可以节省空间。
以用户 root 的身份启动 Shell。
选择您的源设备。通常,这类似于 /dev/sda(标记为 SOURCE)。
确定要存储镜像的位置(标记为 BACKUP_PATH)。它必须与您的源设备不同。换句话说:如果您从 /dev/sda 备份,则您的镜像文件不能存储在 /dev/sda 下。
运行命令以创建压缩的镜像文件
# dd if=/dev/SOURCE | gzip > /BACKUP_PATH/image.gz使用以下命令恢复硬盘
# gzip -dc /BACKUP_PATH/image.gz | dd of=/dev/SOURCE如果您只需要备份一个分区,请将 SOURCE 占位符替换为您的相应分区。在这种情况下,您的镜像文件可以位于同一硬盘上,但位于不同的分区上。
有几个原因可能导致系统无法启动并正常运行。系统崩溃后的损坏的文件系统、损坏的配置文件或损坏的引导加载程序配置是最常见的原因。
为了帮助您解决这些情况,openSUSE Leap 包含一个救援系统,您可以启动它。救援系统是一个小的 Linux 系统,可以加载到 RAM 磁盘中并作为根文件系统挂载,从而允许您从外部访问您的 Linux 分区。使用救援系统,您可以恢复或修改系统的任何重要方面。
操作任何类型的配置文件。
检查文件系统是否存在缺陷并启动自动修复过程。
以 “change root” 环境访问已安装的系统。
检查、修改和重新安装引导加载程序配置。
从安装不正确的设备驱动程序或无法使用的内核中恢复。
使用 parted 命令调整分区大小。有关此工具的更多信息,请访问 GNU Parted 网站 https://gnu.ac.cn/software/parted/parted.html。
救援系统可以从各种来源和位置加载。最简单的方法是从原始安装介质启动救援系统。
将安装介质插入您的 DVD 驱动器。
重新启动系统。
在启动屏幕上,按 F4 并选择 。然后从主菜单中选择 。
在 Rescue: 提示符下输入 root。不需要密码。
如果您的硬件设置不包含 DVD 驱动器,您可以从网络源启动救援系统。以下示例适用于远程启动场景——如果使用其他启动介质(例如 DVD),请相应地修改 info 文件并像正常安装一样启动。
输入您的 PXE 启动配置,并添加 install=PROTOCOL://INSTSOURCE 和 rescue=1 行。如果您需要启动修复系统,请使用 repair=1 代替。与正常安装一样,PROTOCOL 代表任何受支持的网络协议(NFS、HTTP、FTP 等),INSTSOURCE 代表您的网络安装源的路径。
使用 “Wake on LAN” 启动系统。
在 Rescue: 提示符下输入 root。不需要密码。
进入救援系统后,可以使用 Alt–F1 到 Alt–F6 访问虚拟控制台。
Shell 和其他有用的实用程序(例如 mount 程序)位于 /bin 目录中。 /sbin 目录包含重要的文件和网络实用程序,用于查看和修复文件系统。此目录还包含用于系统维护的最重要的二进制文件,例如 fdisk、mkfs、mkswap、mount 和 shutdown、ip 和 ss 用于维护网络。目录 /usr/bin 包含 vi 编辑器、find、less 和 SSH。
要查看系统消息,可以使用命令 dmesg 或使用 journalctl 查看系统日志。
作为一个可以使用救援系统修复的配置示例,假设您有一个损坏的配置文件,该配置文件阻止系统正确启动。您可以使用救援系统修复它。
要操作配置文件,请按以下步骤操作
使用上述方法之一启动救援系统。
要将位于 /dev/sda6 下的根文件系统挂载到救援系统,请使用以下命令
>sudomount /dev/sda6 /mnt
现在系统的所有目录都位于 /mnt 下
更改目录到挂载的根文件系统
>sudocd /mnt
在 vi 编辑器中打开有问题 的配置文件。调整并保存配置。
从救援系统卸载根文件系统
>sudoumount /mnt
重新启动机器。
通常,无法在正在运行的系统上修复文件系统。如果您遇到严重问题,您甚至可能无法挂载根文件系统,并且系统启动可能会以 “内核崩溃” 结束。在这种情况下,唯一的方法是从外部修复系统。该系统包含 fsck 实用程序,可以检查和修复多种文件系统类型,例如 ext2、ext3、ext4、msdos 和 vfat。使用 -t 选项指定要检查的文件系统。
以下命令检查 /etc/fstab 规范中找到的所有 ext4 文件系统
>sudofsck -t ext4 -A
对于 Btrfs,您可以使用 btrfsprogs 包中的 btrfs check 命令。
在以下位置找到有关 Btrfs 文件系统的相关主题
存储管理指南包括 https://documentation.suse.com/sles/html/SLES-all/cha-filesystems.html#sec-filesystems-major-btrfs 和 https://documentation.suse.com/sles/html/SLES-all/cha-resize-fs.html#sec-resize-fs-btrfs 部分。
以下文章介绍了如何从 Btrfs 错误中恢复 https://www.suse.com/support/kb/doc/?id=000018769。
以下文章包含指向多个 Btrfs 相关主题的链接 https://www.suse.com/support/kb/doc/?id=000018779。
man 8 btrfs-check man 页面详细介绍了 btrfs check 命令的所有选项。
如果您需要从救援系统访问已安装的系统,您需要在 change root 环境中执行此操作。例如,要修改引导加载程序配置,或执行硬件配置实用程序。
要基于已安装的系统设置 change root 环境,请按以下步骤操作
如果您正在使用 LVM 设置(有关更多常规详细信息,请参阅 “参考”手册,第 5 章“”,第 5.3 节“LVM 配置”),请导入所有现有的卷组,以便找到并挂载设备
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将已安装系统中的根分区挂载
>sudomount /dev/sda2 /mnt
挂载 /proc、/dev 和 /sys 分区
>sudomount -t proc none /mnt/proc>sudomount --rbind /dev /mnt/dev>sudomount --rbind /sys /mnt/sys
现在您可以 “change root” 进入新环境,保留 bash shell
> chroot /mnt /bin/bash最后,从已安装的系统挂载剩余的分区
> mount -a现在您可以使用已安装的系统。重新启动系统之前,使用 umount -a 卸载分区,并使用 exit 退出 “change root” 环境。
虽然您拥有对已安装系统文件和应用程序的完全访问权限,但存在一些限制。正在运行的内核是与救援系统一起启动的内核,而不是与 change root 环境一起启动的内核。它仅支持必要的硬件,并且除非内核版本相同,否则无法从已安装的系统中添加内核模块。始终使用 uname -r 检查当前运行(救援)内核的版本,然后在 change root 环境中的 /lib/modules 目录中查找是否存在匹配的子目录。如果存在,您可以使用已安装的模块,否则您需要在其他介质(例如闪存盘)上提供其正确版本。通常,救援内核版本与已安装的内核版本不同——那么您就无法简单地访问声卡,例如。也不可能启动图形用户界面。
另请注意,当您使用 Alt–F1 到 Alt–F6 切换控制台时,您将离开 “change root” 环境。
有时系统无法启动,因为引导加载程序配置已损坏。例如,启动例程无法在没有可用的引导加载程序的情况下将物理驱动器转换为 Linux 文件系统中的实际位置。
要检查引导加载程序配置并重新安装引导加载程序,请按以下步骤操作
按照第 21.5.2.3 节,“访问已安装的系统”中描述的必要步骤访问已安装的系统。
检查 GRUB 2 引导加载程序是否已安装在系统上。如果未安装,请安装软件包 grub2 并运行
>sudogrub2-install /dev/sda
检查以下文件是否根据 “参考”手册,第 12 章“引导加载程序 GRUB 2” 中概述的 GRUB 2 配置原则正确配置,并在必要时应用修复。
/etc/default/grub
/boot/grub2/device.map
/boot/grub2/grub.cfg(此文件是生成的,请勿编辑)
/etc/sysconfig/bootloader
使用以下命令序列重新安装引导加载程序
>sudogrub2-mkconfig -o /boot/grub2/grub.cfg
卸载分区,退出 “change root” 环境,并重新启动系统
> umount -a
exit
reboot内核更新可能会引入新的错误,从而影响系统的运行。例如,系统中某个硬件的驱动程序可能存在缺陷,这会阻止您访问和使用它。在这种情况下,还原到上一个可用的内核(如果系统上可用),或从安装介质安装原始内核。
为了防止在有缺陷的内核更新后无法启动,请使用内核多版本功能,并告诉 libzypp 您希望在更新后保留哪些内核。
例如,要始终保留最后两个内核和当前运行的内核,请添加
multiversion.kernels = latest,latest-1,running
到 /etc/zypp/zypp.conf 文件。有关更多信息,请参阅 “参考”手册,第 6 章“安装多个内核版本”。
类似的情况是,当您需要重新安装或更新不支持 openSUSE Leap 的设备的损坏驱动程序时。例如,当硬件供应商使用特定的设备(例如硬件 RAID 控制器)时,该设备需要二进制驱动程序才能被操作系统识别。供应商通常会发布驱动程序更新磁盘 (DUD),其中包含已修复或更新的所需驱动程序的版本。
在两种情况下,您都需要以救援模式访问已安装的系统并修复与内核相关的问题,否则系统可能无法正确启动
从 openSUSE Leap 安装介质启动。
如果您正在从有缺陷的内核更新后恢复,请跳过此步骤。如果您需要使用驱动程序更新磁盘 (DUD),请在启动菜单出现后按 F6 加载驱动程序更新,并选择驱动程序更新的路径或 URL,然后使用 确认。
从启动菜单中选择 并按 Enter。如果您选择使用 DUD,系统将要求您指定存储驱动程序更新的位置。
在 Rescue: 提示符下输入 root。不需要密码。
手动挂载目标系统并 “change root” 到新环境。有关更多信息,请参阅第 21.5.2.3 节,“访问已安装的系统”。
如果使用 DUD,请安装/重新安装/更新有缺陷的设备驱动程序包。务必确保已安装的内核版本与您正在安装的驱动程序的版本完全匹配。
如果正在修复有缺陷的内核更新安装,可以使用以下过程从安装介质安装原始内核。
使用 hwinfo --cdrom 识别您的 DVD 设备,并使用 mount /dev/sr0 /mnt 挂载它。
导航到 DVD 上存储内核文件的目录,例如 cd /mnt/suse/x86_64/。
使用 rpm -i 命令安装所需的 kernel-*、kernel-*-base 和 kernel-*-extra 包。
如果需要,请更新配置文件并重新初始化引导加载程序。有关更多信息,请参阅 第 21.5.2.4 节,“修改和重新安装引导加载程序”。
从系统驱动器中移除任何可引导介质并重新启动。