web-dev-qa-db-ja.com

起動後にLinuxですべての起動メッセージを表示する方法は?

関連する質問は次のとおりです。

Linuxがブートのメッセージを配置する場所

ブートプロセスが記録されるログファイルの名前

ただし、これらはこの質問の答えにはなりません。この質問は、allブートメッセージを表示する方法に関係しています。

これは、Gentoo、OpenRC、最新のカーネル、具体的に知りたい場合の4.9.6向けです。ただし、すべてのディストリビューションで機能する一般的なソリューションが推奨されます。

問題は、エラーや警告がすぐにスクロールされて表示されないことがあります。また、2つの理由(inittabで--noclearを使用している場合でも)で上にスクロールすることは常に可能ではありません。フレームバッファーに切り替えると、スイッチが配置される前の位置までスクロールすることができなくなり、次にXが開始した後、コンソールに切り替えて上にスクロールしようとすると、新しいテキストがバッファに追加されるまでスクロールはまったくできません。場合によっては、特定のメッセージがdmesgにも/ var/log/messagesにも見つからないことがあります。

すべてのメッセージを表示するにはどうすればよいですか?

ここに誰かがいます https://www.linuxquestions.org/questions/linux-newbie-8/please-how-to-pause-scrolling-messages-at-boot-323772/ スクロールロックにより一時停止する場合があります。ただし、これはあまりよくないエレガントなソリューションです。一部のメッセージはスクロールが速すぎて、最近システムがブート時に突然大量のテキストを出力する可能性があります。

これは私が理想的に望むものです:

  • Dmesg |可能であれば、タイプの少ないソリューション、またはブートプロセスをシングルステップで実行する他の方法。
  • 画面に印刷されたすべてのものもログに記録されるようにする方法。

これらのいずれかを達成する簡単な方法はありますか?

私は1つの解決策を知っています:

CONFIG_BOOT_PRINTK_DELAY:各ブートprintkメッセージをNミリ秒遅らせる

不思議なことに、menuconfigでBOOT_PRINTK_DELAYを選択することさえ許可されていないようです、それを検索すると見つけることができますが、Kernel hacking-> printk and dmesg options->では、「Show Tiking information on printks」と「Default」しかありませんメッセージログレベル」。 printk遅延オプションはどこにありますか?最初に何かを有効にしてそれを表示する必要がありますか?何?誰かが知っているなら、答えの一部としてこれがあればいいでしょう。

しかしとにかく、これにはカーネルの再コンパイルが必要であり、これは一見取るに足らないタスクの醜く侵略的なハックになります。これを行う適切な方法は大歓迎です。

12

したがって、コンソールには2種類のメッセージがあります。

  • カーネルによって(printkを介して)生成されます。
  • ユーザースペース(通常はinitシステム)によって生成されます。

カーネルメッセージは常にdmesgを介して表示されるkmsgバッファーに保存されます。また、syslogにコピーされることもよくあります。 (これは/dev/kmsgに書き込まれたユーザースペースメッセージにも適用されますが、これらはかなりまれです。)

一方、ユーザースペースがそのファンシーブートステータステキストを/dev/consoleまたは/dev/tty1に書き込むと、どこにも保存されません。画面に表示されるだけです。したがって、ローワンのシリアルコンソールの提案を除いて、かなりのanyソリューションは、非常にディストリビューション固有(各initシステムが異なる方法でロギングを実行するため)またはstraceを含む「侵入型ハック」になると思いますまたはカーネルハッキングなど。

最良の場合、あなたのinitシステムはitselfすべての重要なイベントをsyslog(/ var/log/messagesなど)に記録します。例えば:

systemd[1]: Starting BIRD routing daemon...
bird[478296]: /etc/bird.conf, line 2: syntax error
systemd[1]: bird.service: Control process exited, code=exited status=1
systemd[1]: Failed to start BIRD routing daemon.

(systemdとupstartは、サービスのstdout/stderrもログに記録します。他の多くのinitシステムは、コンソールにリダイレクトするか、どこにもリダイレクトしません。)

9
user1686

1つの提案は、別のラップトップフィルムに高解像度とフレームレートのブート画面をフィルム化させ、結果としてスロー再生することです(MOV-MP4-AVI)-おそらく最善の解決策ではなく、単にデプロイしてデバッグすることとにかくそう?ただのアイデア...

2
Devuan

グラウィティの答えは、私がブーツのその段階で達成できたであろうよりも、よりよく説明されなければなりません。

物理リダイレクト方法では、BIOSがそれをサポートする必要があります。サーバー連動ボードは通常そうです。 Intel、IBM、およびSuperMicroシステムでは、通常、BIOSのメイン見出しの下にコンソールリダイレクトオプションがあります。マザーボードに物理シリアルポートがない場合は使用できません。 USBのみ。マザーボードのピンに物理ポートを接続する必要がある場合があります。

オペレーティングシステムがシリアルポートを他の目的で使用しようとしているところまでたどり着くと、コンソールリダイレクトが奇妙なものになる可能性があります。これは、一定の使用ではなく、主に特定の場合のデバッグに使用されると思います。

使用するには、USBベースのレシーバーCOMポートに一致するポート設定を設定する必要があります。次に、2つのデバイスを、デバイス間の送信ピンと受信ピンを交換するヌルモデムケーブルでリンクする必要があります。

ソースシステムの起動中に、受信デバイスの電源を完全にオンにして、通信を監視する必要があります。受信システムは、すべてのテキストベースの出力を取得します。

起動中にOSがテキストとしてではなく、グレイプリックコンストラクトを介してテキストを表示し始める場合、受信システムは意味不明なものになります。

1
Rowan Hawkins