systemdジャーナルが再起動後も保持されないのはなぜですか?


8

Linodeインスタンス上の新しいFedora 21イメージで非常に奇妙な問題が発生しています。Linode以外では再現できません。問題は、私のsystemdジャーナルが再起動後も持続しないことです。ドキュメントによると:

デフォルトでは、ジャーナルは/ run / log / journal /にログデータを保存します。/ run /は揮発性であるため、再起動時にログデータは失われます。データを永続化するには、systemd-journaldがデータを保存する/ var / log / journal /を作成するだけで十分です。

/ var / log / journalが存在することを確認し、/ etc / systemd / Storage=persistentjournald.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イメージの問題だと思います。それらでサポートチケットを開きました。その間、私はこの問題の原因を探し続けています。

どうすればデバッグできますか?何が原因でしょうか?これを修正するにはどうすればよいですか?

回答:


14

この動作の理由は、/etc/machine-id再起動するたびにマシン識別子が変化するためです。これにより、の下に新しいロギングディレクトリが開始され/var/log/journalます。古いログは、次のコマンドで表示できます。

journalctl --merge

machine-idの変更の原因を調べています。Linodeサポートはこの問題を認識しています。詳細がわかり次第、この回答を更新します。


更新-問題の根本的な原因は、Linode /etc/machine-idがファイルシステムのイメージから内容をゼロにしたことです。結果は次の一連のイベントです。

  1. カーネルはルートファイルシステムを読み取り専用でロードしてマウントします
  2. systemd、最初のramdiskから実行し、/etc/machine-idルートファイルシステムからの読み取りを試みます(ファイルは存在しますが、内容がゼロです)
  3. rootdファイルシステムが読み取り専用でマウントされているため、systemdはマシン識別子を読み取ることはできませんが、新しい識別子を書き込むことはできません。
  4. systemdがマウントtmpfsする/etc/machine-id(はい、ファイルシステムをファイルにマウントできるようです
  5. systemdはsystemd-machine-id-setupを呼び出し、ランダムなmachine-idを生成して、現在のvolatileに保存します/etc/machine-id
  6. システムは揮発性のマシン識別子で起動します

の出力を確認することで、システムに永続的なマシン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で修正するために私が取った手順は次のとおりです:

  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が欠落している結果です。これが将来のランダムな通行人に役立つことを願っています。


5
あなたは、バインドは、/のマウント使って救助/リブートせずに/ etc /機械-IDを変更することができますmkdir /tmp/mnt; mount --bind / /tmp/mnt; cp -a /etc/machine-id /tmp/mnt/etc/; umount /tmp/mnt
rudimeier
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.