Linodeインスタンスで新しいFedora 21イメージを使用すると、非常に奇妙な問題が発生しました。 Linodeの外では再現できません。問題は、システムログが再起動後も保持されないことです。 ~によると文書:
デフォルトでは、ジャーナルは/run/log/journal/にログデータを保存します。 /run/ は揮発性なので、再起動時にログデータが失われます。データを永久に作成するには、systemd-journaldがデータを保存する/var/log/journal/を作成するだけで十分です。
/var/log/journalが存在することを確認し、/etc/ Storage=persistent
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がファイルシステムイメージの内容をゼロにすることです。結果は次の一連のイベントです。
- カーネルはルートファイルシステムを読み取り専用でロードしてマウントします。
- 最初の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'