시스템 로그가 재부팅 후에도 유지되지 않는 이유는 무엇입니까?

시스템 로그가 재부팅 후에도 유지되지 않는 이유는 무엇입니까?

Linode 인스턴스에서 새로운 Fedora 21 이미지를 사용할 때 매우 이상한 문제가 발생했습니다. Linode 외부에서는 재현할 수 없습니다. 문제는 시스템 로그가 재부팅 후에도 유지되지 않는다는 것입니다. ~에 따르면문서:

기본적으로 저널은 /run/log/journal/에 로그 데이터를 저장합니다. /run/은 휘발성이므로 재부팅 시 로그 데이터가 손실됩니다. 데이터를 영구적으로 만들려면 systemd-journald가 데이터를 저장할 /var/log/journal/을 만드는 것으로 충분합니다.

/var/log/journal이 존재하는지 확인하고 Storage=persistent/etc/systemd/journald.conf에도 설정했습니다. 로그 디렉터리에는 다음과 같은 많은 데이터가 포함되어 있습니다.

$ du -sh /var/log/journal/
89M /var/log/journal/

그러나 로그에는 마지막 시스템 재시작 이후의 로그 항목만 포함됩니다.

$ journalctl --list-boots
 0 9f6a5a789dd64ec0b067140905e6da86 Thu 2015-03-19 15:08:48 GMT—Thu 2015-03-19 22:14:37 GMT

재부팅하기 전에도 로그가 손실됩니다 journalctl --flush. 나는 이것이 Linode의 Fedora 21 이미지에 문제가 있는 것으로 의심하고 그들과 함께 지원 티켓을 열었습니다. 그동안 저는 이 문제의 원인을 계속해서 찾고 있습니다.

어떻게 디버깅할 수 있나요? 이 문제의 원인은 무엇입니까? 이 문제를 해결하려면 어떻게 해야 합니까?

답변1

/etc/machine-id이 문제는 다시 시작할 때마다 컴퓨터 식별자가 변경되기 때문에 발생합니다 . 그러면 아래에 새 로깅 디렉터리가 시작됩니다 /var/log/journal. 이전 로그는 다음 명령을 사용하여 볼 수 있습니다.

journalctl --merge

아직 컴퓨터 ID가 변경된 이유를 조사 중입니다. Linode 지원팀은 이 문제를 알고 있습니다. 자세한 내용을 알아보면 이 답변을 업데이트하겠습니다.


/etc/machine-id업데이트 - 문제의 근본 원인은 단순히 Linode가 파일 시스템 이미지의 내용을 0으로 만드는 것입니다. 결과는 다음과 같은 일련의 이벤트입니다.

  1. 커널은 루트 파일 시스템을 읽기 전용으로 로드하고 마운트합니다.
  2. 초기 ramdisk에서 실행 중인 systemd는 루트 파일 시스템에서 읽기를 시도합니다 /etc/machine-id(파일은 존재하지만 내용이 없습니다).
  3. systemd는 시스템 식별자를 읽을 수 없지만 루트 파일 시스템이 읽기 전용으로 마운트되어 있기 때문에 새 식별자를 쓸 수 없습니다.
  4. systemd가 설치되어 있습니다 tmpfs( /etc/machine-id예, 분명히 할 수 있습니다파일 시스템을 파일에 마운트)
  5. 시스템 호출systemd-머신-id-설정임의의 컴퓨터 ID를 생성하여 현재 휘발성에 저장합니다./etc/machine-id
  6. 시스템은 휘발성 기계 식별자로 시작됩니다.

다음 출력을 보면 시스템에 영구 컴퓨터 ID가 아닌 휘발성 컴퓨터 ID가 있는지 확인할 수 있습니다 mount.

$ mount | grep machine-id
tmpfs on /etc/machine-id type tmpfs (ro,mode=755)

이 문제는 해결하기 쉽습니다. 영구 컴퓨터 ID를진짜 /etc/machine-id. 그러나 실행 중인 시스템 tmpfs에서는 제거 할 수 없으므로 말처럼 쉽지 않습니다 . /etc/machine-idLinode의 문제를 해결하기 위해 취한 단계는 다음과 같습니다.

  1. cp /etc/machine-id /etc/machine-id.copy을 누른 다음 시스템 전원을 끄세요.
  2. Linode Manager에서 Rescue 탭으로 이동하여 복구 모드로 부팅합니다.
  3. Lish 콘솔을 통해 시스템에 액세스
  4. 루트 파일 시스템을 마운트합니다.mount /dev/xvda /mnt
  5. 1단계에서 생성된 복사본을 실제 컴퓨터 ID로 이동합니다.mv /etc/machine-id.copy /etc/machine-id
  6. 재시작

이는 시작 시 컴퓨터 ID가 누락된 결과입니다. 앞으로 지나가는 분들께 도움이 되었으면 좋겠습니다.

답변2

다른 옵션은 uboot의 커널 매개변수를 통해 systemd를 구성하는 것입니다:

setenv bootargs 'systemd.machine_id=fce88f888f3e4a3d811ab2cd1c9b7cbe'

관련 정보