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으로 만드는 것입니다. 결과는 다음과 같은 일련의 이벤트입니다.
- 커널은 루트 파일 시스템을 읽기 전용으로 로드하고 마운트합니다.
- 초기 ramdisk에서 실행 중인 systemd는 루트 파일 시스템에서 읽기를 시도합니다
/etc/machine-id
(파일은 존재하지만 내용이 없습니다). - systemd는 시스템 식별자를 읽을 수 없지만 루트 파일 시스템이 읽기 전용으로 마운트되어 있기 때문에 새 식별자를 쓸 수 없습니다.
- systemd가 설치되어 있습니다
tmpfs
(/etc/machine-id
예, 분명히 할 수 있습니다파일 시스템을 파일에 마운트) - 시스템 호출systemd-머신-id-설정임의의 컴퓨터 ID를 생성하여 현재 휘발성에 저장합니다.
/etc/machine-id
- 시스템은 휘발성 기계 식별자로 시작됩니다.
다음 출력을 보면 시스템에 영구 컴퓨터 ID가 아닌 휘발성 컴퓨터 ID가 있는지 확인할 수 있습니다 mount
.
$ mount | grep machine-id
tmpfs on /etc/machine-id type tmpfs (ro,mode=755)
이 문제는 해결하기 쉽습니다. 영구 컴퓨터 ID를진짜 /etc/machine-id
. 그러나 실행 중인 시스템 tmpfs
에서는 제거 할 수 없으므로 말처럼 쉽지 않습니다 . /etc/machine-id
Linode의 문제를 해결하기 위해 취한 단계는 다음과 같습니다.
cp /etc/machine-id /etc/machine-id.copy
을 누른 다음 시스템 전원을 끄세요.- Linode Manager에서 Rescue 탭으로 이동하여 복구 모드로 부팅합니다.
- Lish 콘솔을 통해 시스템에 액세스
- 루트 파일 시스템을 마운트합니다.
mount /dev/xvda /mnt
- 1단계에서 생성된 복사본을 실제 컴퓨터 ID로 이동합니다.
mv /etc/machine-id.copy /etc/machine-id
- 재시작
이는 시작 시 컴퓨터 ID가 누락된 결과입니다. 앞으로 지나가는 분들께 도움이 되었으면 좋겠습니다.
답변2
다른 옵션은 uboot의 커널 매개변수를 통해 systemd를 구성하는 것입니다:
setenv bootargs 'systemd.machine_id=fce88f888f3e4a3d811ab2cd1c9b7cbe'