Skip to content

Commit f7dcd98

Browse files
committed
ops/debug: More about pstore
1 parent 62b3549 commit f7dcd98

1 file changed

Lines changed: 28 additions & 4 deletions

File tree

docs/ops/debug.md

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ icon: material/bug
131131

132132
## 服务状态与日志 {#status-and-logs}
133133

134+
### 日志简介 {#logs-intro}
135+
134136
当出现异常,登录系统后,第一件事情可能是检查当前系统的服务状态。
135137
`systemctl --failed` 可以列出当前失败的服务。
136138
如果显示大量服务失败,那么说明可能遇到了比较严重的问题,例如磁盘已满等。
@@ -185,14 +187,36 @@ logrotate 会定期(一般是每天,或者文件足够大的时候,请参
185187

186188
### Kernel panic 与 pstore {#kernel-panic-and-pstore}
187189

188-
当内核遇到不可恢复的致命错误时,就会发生「内核恐慌」,即 kernel panic。
190+
当内核遇到不可恢复的致命错误时,就会发生「内核恐慌」,即 kernel panic,表示内核崩溃,无法继续操作
189191
默认情况下,kernel panic 的时候会打印出报错信息,然后需要人工重启。
190192
然而,对于实验室炼丹炉或者不易远程操作的服务器等一些场景来说,管理员可能更希望服务能够尽快恢复,此时可以通过设置 `kernel.panic` 这一项 sysctl 参数实现在 panic 自动重启,但这也使得管理员无法及时地在终端上看到重启前最后的 panic 信息。
191193

192194
**pstore**(Persistent Storage)是一个内核特性,用于在系统崩溃时保存报错信息,以供后续分析。
193-
pstore 有多种存储后端,包括一小段专门划分的内存区域(通常大小为 10 KiB)、ACPI ERST 表以及 UEFI 变量存储区域等。
195+
pstore 有多种存储后端,包括一小段专门划分的内存区域(被称为 [ramoops](https://docs.kernel.org/admin-guide/ramoops.html)通常大小为 10 KiB)、ACPI ERST 表以及 UEFI 变量存储区域等。
194196
这些不同的存储后端通常能够提供合计 64 KiB 的存储空间,足够保存数百行 dmesg。
195-
默认情况下,Linux 会在 `/sys/fs/pstore` 的位置挂载 pstore 文件系统,管理员可以通过此目录查看 pstore 中存储的日志。
197+
默认情况下,Linux 会在 `/sys/fs/pstore` 的位置挂载 pstore 文件系统,管理员可以通过此目录查看 pstore 中存储的日志。可以查看 `/sys/module/pstore/parameters/backend` 的内容,确认当前 pstore 的存储后端。
198+
199+
!!! tip "ACPI ERST"
200+
201+
可以使用以下命令验证硬件是否支持 ACPI ERST:
202+
203+
```shell
204+
ls /sys/firmware/acpi/tables/ | grep ERST
205+
```
206+
207+
!!! note "UEFI 变量存储可能不会被默认启用"
208+
209+
UEFI 变量存储区域的空间是有限的,并且非常不幸的是,UEFI 固件的编写者不少都没有恰当处理**变量存储区域被写满**的情况。这意味着,一旦这种情况发生,那么**系统就可能变砖,无法正常启动**。因此内核提供了 `CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE` 选项,如果它被启用,那么内核就不会默认使用 UEFI 变量存储区域作为 pstore 的存储后端。
210+
211+
视内核与发行版配置,可以使用 `zcat /proc/config.gz | grep PSTORE` 或 `cat /boot/config-$(uname -r) | grep PSTORE` 来检查当前内核是否启用了 pstore 以及相关配置情况。
212+
213+
!!! note "ramoops 能够保留数据吗?"
214+
215+
pstore 的 ramoops 后端无法突破物理规律——如果机器断电重启了,那么(易失性)内存里的数据就自然没了。在不断电重启的情况下,内存是否会被清空取决于硬件实现。
216+
217+
!!! tip "kdump"
218+
219+
如果无法使用 pstore,kdump 机制也可以作为替代方案。kdump 需要在启动时占用一块内存空间存储备用内核等信息。在 kernel panic 时,kernel 会 kexec 到备用内核上,备用内核此时就可以获取到内核的 coredump、dmesg 等信息。Debian 可以使用上文提到的 `kdump-tools` 包来配置 kdump。
196220

197221
然而,pstore 的容量是有限的,因此 **systemd-pstore** 服务会在启动时自动将 pstore 的内容归档至 `/var/lib/systemd/pstore`,以便腾出空间,同时保留记录供管理员查阅。
198222
也就是说,如果你在重启后发现 `/sys/fs/pstore` 是空的,那么你应该去查看 `/var/lib/systemd/pstore`
@@ -792,7 +816,7 @@ tcpdump -ni eth0 host 8.8.8.8
792816

793817
![Wireshark setting pre-master-secret log filename](../images/wireshark-tls.png)
794818

795-
[bcc](#eBPF) 提供的 `sslsniff` 工具、[eCapture](https://github.com/gojue/ecapture) 工具则通过 eBPF 的方式实现了查看加密内容的功能。
819+
[bcc](#ebpf) 提供的 `sslsniff` 工具、[eCapture](https://github.com/gojue/ecapture) 工具则通过 eBPF 的方式实现了查看加密内容的功能。
796820

797821
!!! note "HTTP/HTTPS 抓包工具"
798822

0 commit comments

Comments
 (0)