AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 561779
Accepted
chamilad
chamilad
Asked: 2020-01-13 16:53:35 +0800 CST2020-01-13 16:53:35 +0800 CST 2020-01-13 16:53:35 +0800 CST

在 systemd 中快速更改 boot_id 值

  • 772

在查看另一台机器上的一些归档日志文件时,我注意到一些日志条目具有不同的__BOOT_ID值,它们之间的时间间隔非常窄。例如,相隔几毫秒的日志条目将具有不同的__BOOT_ID值。这应该是不可能的,因为机器无法在这么小的时间间隔内重新启动。

当我运行时,journalctl -o verbose --directory <dir path> | grep -B 30 -A 30 -- "-- Reboot --"我可以看到引用以下真实示例,其中两个不同的引导 ID 值用于相隔 10 毫秒的日志事件。

Wed 2019-11-13 21:35:58.469925 ...
    _TRANSPORT=kernel
    PRIORITY=6
    SYSLOG_FACILITY=0
    SYSLOG_IDENTIFIER=kernel
    _BOOT_ID=fec227a60ef24474aacd023d6c02733f
...
...
...
    MESSAGE=spi1.0: ttyMAX1 at I/O 0x20 (irq = 30, base_baud = 3000000) is a MAX3109
-- Reboot --
Wed 2019-11-13 21:35:58.470352 ...
    _SOURCE_MONOTONIC_TIMESTAMP=0
    _TRANSPORT=kernel
    PRIORITY=6
    SYSLOG_FACILITY=0
    SYSLOG_IDENTIFIER=kernel
    MESSAGE=Booting Linux on physical CPU 0x0
    _BOOT_ID=21b95aabab034009a19d1b7deac80327
...
...
...

我试图搜索可能导致引导 ID 像那样快速更改但没有任何成功的原因。查看版本 ( v243) 的 systemd 源代码表明,sd_id128_get_boot()这似乎是用于读取引导 ID 的函数,它只是从文件中读取内核生成的值。


        if (sd_id128_is_null(saved_boot_id)) {
                r = id128_read("/proc/sys/kernel/random/boot_id", ID128_UUID, &saved_boot_id);
                if (r < 0)
                        return r;
        }

        *ret = saved_boot_id;
        return 0;

最终结果是显示在日志中的重新启动列表,这些重新启动可能毕竟不是重新启动。有趣的是journalctl --list-boots根本不会将这些显示为重新启动(目前正在尝试理解get_boots()实现)。

如果有人早些时候看到过这种行为,请欣赏任何想法和意见。我知道这jounalctl --list-boots是获取重新启动列表的好去处,但我正在尝试使用一组特定的重新启动信息来分析日志。这些误报污染了我正在尝试编写的脚本的结果。

systemd journalctl
  • 1 1 个回答
  • 271 Views

1 个回答

  • Voted
  1. Best Answer
    Maxpm
    2020-04-20T12:13:12+08:002020-04-20T12:13:12+08:00

    我不认为引导 ID 实际上变化得那么快。我认为您正在同时查看几个不同靴子的日志,并且它们混合在一起。

    如果您的系统没有电池供电的实时时钟,就会发生这种情况。

    journalctl 使用挂钟时间对来自不同引导的日志消息进行排序。如果挂钟在每次启动时重置,看起来来自不同启动的消息同时发生,journalctl 会混淆它们。

    请参阅Lennart Poettering对systemd 功能请求 #662的评论(强调我的):

    所以会发生这样的事情:每次重新启动时,都会从 1970 年的日期和新随机化的启动 ID 开始。每次启动都会以这种方式生成一些消息。

    在显示期间,journalctl 现在将看到这些数据,并尝试理解它,并将其交错。交错意味着它需要将行排序在一起,并将旧数据放在新数据之前。为此,它首先尝试比较序列号。序列号保存在内存中,并在每次启动时重置为零。因此,只有当引导 ID 在要比较的两行之间匹配时,才能比较它们。由于您重新启动的引导 ID 不同(显然,并且正确),因此不能使用这种排序逻辑。接下来,journalctl 尝试按单调时间戳(即自启动以来经过的时间)对事物进行排序。这种排序只能在相同的条件下工作:我们只能通过单调时间对同一引导的行进行排序。这意味着我们采用最后一种比较两条线的方法:通过挂钟时间。但这始终是 1970 年,因此会导致您看到的交错,所有线条都混合在一起。

    确认这一点的一种方法是运行journalctl --list-boots并检查日期范围。如果它们重叠,则 journalctl 使用的是伪造的时间戳。

    • 2

相关问题

  • journalctl 中的区分级别

  • 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _

  • systemd:如何在服务启动时运行脚本,而不编辑服务定义

  • 使用 systemd 看门狗支持重新启动应用程序

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve