systemd에서 boot_id 값을 빠르게 변경

Chamilad

다른 컴퓨터에서 보관 된 일부 저널 파일을 살펴 보는 동안 일부 로그 항목의 __BOOT_ID이 서로 다르며 시간 간격이 매우 좁다 는 것을 알았습니다 . 예를 들어 밀리 초 간격의 로그 항목은 다른 __BOOT_ID값을 갖습니다. 기계가 그 작은 시간 간격 내에 다시 시작할 수 없기 때문에 이것은 불가능합니다.

실행할 때 journalctl -o verbose --directory <dir path> | grep -B 30 -A 30 -- "-- Reboot --"10ms 간격의 로그 이벤트에 대해 두 가지 다른 부팅 ID 값을 사용하여 다음 실제 예제를 인용 할 수 있습니다.

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재부팅 목록을 가져 오는 곳 이라는 것을 이해 하지만 특정 재부팅 정보 세트를 염두에두고 로그를 분석하려고합니다. 이러한 잘못된 긍정은 내가 작성하려는 스크립트의 결과를 오염시킵니다.

Maxpm

나는 부팅 ID가 실제로 그렇게 빠르게 바뀌고 있다고 생각하지 않습니다. 한 번에 여러 부츠의 로그를보고 있고 서로 섞여있는 것 같습니다.

시스템에 배터리 전원을 사용하는 실시간 시계가없는 경우 발생할 수 있습니다.

journalctl은 벽시계 시간을 사용하여 다른 부팅에서 발생한 로그 메시지를 정렬합니다. 부팅 할 때마다 벽시계가 재설정되면 다른 부팅의 메시지가 동시에 발생한 것처럼 보이며 journalctl은 이러한 메시지를 혼동스럽게 삽입합니다.

시스템 기능 요청 # 662 에 대한 Lennart Poettering의 의견참조하십시오 .

따라서 다음과 같은 일이 발생합니다. 재부팅 할 때마다 1970 년의 날짜와 새로 무작위 부팅 ID로 시작됩니다. 이러한 방식으로 부팅 할 때마다 몇 개의 메시지가 생성됩니다.

이제 표시하는 동안 journalctl은이 데이터를보고이를 이해하고 인터리브합니다. 인터리빙은 라인을 함께 정렬하고 최신 데이터보다 오래된 데이터를 배치해야 함을 의미합니다. 이를 위해 먼저 시퀀스 번호를 비교하려고합니다. 시퀀스 번호는 메모리에 유지되며 부팅 할 때마다 0으로 재설정됩니다. 따라서 비교할 두 줄간에 부팅 ID가 일치하는 경우에만 비교할 수 있습니다. 재부팅 할 때 부팅 ID가 다르기 때문에 (분명히 그리고 정당하게)이 순서 논리를 사용할 수 없습니다. 다음으로 journalctl은 단조로운 타임 스탬프 (즉, 부팅 이후 경과 한 시간)에 따라 순서를 지정합니다. 이러한 주문은 동일한 조건에서만 작동합니다. 단조로운 시간을 통해 동일한 부츠의 라인 만 주문할 수 있습니다.즉, wallclock 시간을 통해 두 라인을 비교하는 마지막 방법을 사용합니다. 그러나 그것은 항상 1970 년입니다. 따라서 라인이 모두 섞여있는 인터리빙이 발생합니다.

이를 확인하는 한 가지 방법 journalctl --list-boots은 날짜 범위 를 실행 하고 확인하는 것입니다. 중복되는 경우 journalctl은 가짜 타임 스탬프를 사용합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

값에 따라 셀 색상을 더 빠르게 변경

분류에서Dev

Windows에서 호스트 파일을 빠르게 편집 / 변경

분류에서Dev

vim에서 다음 몇 줄을 빠르게 변경 하시겠습니까?

분류에서Dev

Outlook VSTO에서 항목의받는 사람을 빠르게 변경

분류에서Dev

많은 변수의 값을 빠르게 변경하는 방법

분류에서Dev

배열 '열'을 배열 변수에 빠르게로드

분류에서Dev

여러 kubernetes 구성을 갖고 그들 사이에서 빠르게 변경하는 방법

분류에서Dev

Far Manager에서 폴더 변경을 빠르게 취소 할 수있는 방법이 있습니까?

분류에서Dev

Google 크롬에서 사용자 프로필을 빠르게 변경하는 방법은 무엇입니까?

분류에서Dev

Windows에서 파일 이름을 빠르게 변경하기위한 키 입력은 무엇입니까?

분류에서Dev

git에서 가져온 변경 사항을 빠르게 실행 취소하는 방법은 무엇입니까?

분류에서Dev

많은 .NET Core project.json 파일에서 종속성 버전을 빠르게 변경

분류에서Dev

systemd에서 런레벨을 어떻게 변경합니까?

분류에서Dev

Pandas 시리즈 레이블을 해당 열에서 일련의 간접 값으로 빠르게 변환

분류에서Dev

KDE에서 오디오 장치를 빠르게 변경

분류에서Dev

태블릿에서 사진 크기가 빠르게 변경됨

분류에서Dev

Python에서 멀티 풀 HTML을 CSV 파일로 빠르게 변환

분류에서Dev

버튼을 빠르게 클릭하면 tableView textlabel 변경

분류에서Dev

배열에서 값 목록을 더 빠르게 추출

분류에서Dev

일부 매개 변수에 값을 빠르게 할당 할 수 있습니까? (파이썬)

분류에서Dev

journald에서 현재 _BOOT_ID를 얻는 방법

분류에서Dev

Outlook에서 편집 언어를 빠르게 변경하는 방법

분류에서Dev

자바 안드로이드에서 빠르게 이미지 변경

분류에서Dev

Arch Linux : 화면에서 빠르게 변경되는 동안 왜곡 (vsync)

분류에서Dev

모든 마운트를 건너 뛰면서 $ HOME에있는 모든 디렉토리의 권한을 빠르게 변경합니다.

분류에서Dev

텍스트에서 XML 로의 변환을 더 빠르게 만드는 방법은 무엇입니까?

분류에서Dev

자바에서 큰 CSV 파일을 JSON 배열로 빠르게 변환하는 방법

분류에서Dev

Postgres 9.4 : 색상을 16 진수에서 RGB 표현으로 빠르게 변환하는 방법

분류에서Dev

MySQL에서 쉼표로 구분 된 문자열을 목록으로 빠르게 변환

Related 관련 기사

  1. 1

    값에 따라 셀 색상을 더 빠르게 변경

  2. 2

    Windows에서 호스트 파일을 빠르게 편집 / 변경

  3. 3

    vim에서 다음 몇 줄을 빠르게 변경 하시겠습니까?

  4. 4

    Outlook VSTO에서 항목의받는 사람을 빠르게 변경

  5. 5

    많은 변수의 값을 빠르게 변경하는 방법

  6. 6

    배열 '열'을 배열 변수에 빠르게로드

  7. 7

    여러 kubernetes 구성을 갖고 그들 사이에서 빠르게 변경하는 방법

  8. 8

    Far Manager에서 폴더 변경을 빠르게 취소 할 수있는 방법이 있습니까?

  9. 9

    Google 크롬에서 사용자 프로필을 빠르게 변경하는 방법은 무엇입니까?

  10. 10

    Windows에서 파일 이름을 빠르게 변경하기위한 키 입력은 무엇입니까?

  11. 11

    git에서 가져온 변경 사항을 빠르게 실행 취소하는 방법은 무엇입니까?

  12. 12

    많은 .NET Core project.json 파일에서 종속성 버전을 빠르게 변경

  13. 13

    systemd에서 런레벨을 어떻게 변경합니까?

  14. 14

    Pandas 시리즈 레이블을 해당 열에서 일련의 간접 값으로 빠르게 변환

  15. 15

    KDE에서 오디오 장치를 빠르게 변경

  16. 16

    태블릿에서 사진 크기가 빠르게 변경됨

  17. 17

    Python에서 멀티 풀 HTML을 CSV 파일로 빠르게 변환

  18. 18

    버튼을 빠르게 클릭하면 tableView textlabel 변경

  19. 19

    배열에서 값 목록을 더 빠르게 추출

  20. 20

    일부 매개 변수에 값을 빠르게 할당 할 수 있습니까? (파이썬)

  21. 21

    journald에서 현재 _BOOT_ID를 얻는 방법

  22. 22

    Outlook에서 편집 언어를 빠르게 변경하는 방법

  23. 23

    자바 안드로이드에서 빠르게 이미지 변경

  24. 24

    Arch Linux : 화면에서 빠르게 변경되는 동안 왜곡 (vsync)

  25. 25

    모든 마운트를 건너 뛰면서 $ HOME에있는 모든 디렉토리의 권한을 빠르게 변경합니다.

  26. 26

    텍스트에서 XML 로의 변환을 더 빠르게 만드는 방법은 무엇입니까?

  27. 27

    자바에서 큰 CSV 파일을 JSON 배열로 빠르게 변환하는 방법

  28. 28

    Postgres 9.4 : 색상을 16 진수에서 RGB 표현으로 빠르게 변환하는 방법

  29. 29

    MySQL에서 쉼표로 구분 된 문자열을 목록으로 빠르게 변환

뜨겁다태그

보관