ウェブサイト検索

Linux での起動の問題を特定して修正する方法


Linux システムの起動が非常に速いため、ほとんどの出力はスクロールが早すぎて、コンソールに送信されたテキスト (サービスが開始されていることを示す) を読むことができません。したがって、ブートの問題やエラーを観察することは、私たちにとって少し困難になります。

この記事では、Linux システムのブート プロセスのさまざまな段階について簡単に説明し、次にブートの問題を確立して原因を究明する方法 (調査するファイルやシステム ブート メッセージを表示するコマンドなど) について学びます。

Linux ブートプロセスの概要

要約すると、電源オンボタンを押すと、 マザーボードに統合されたプログラムであるBIOS (基本入出力システム) が次の処理を実行します。 >POST (パワーオンセルフテスト) – ディスク、RAM (ランダム アクセス メモリ)、キーボードなどのハードウェアがスキャンされます。エラー (ハードウェアの欠落または故障) が発生した場合は、画面に報告されます。

POST 中に、BIOS はブート デバイス、つまり起動元のディスク (通常は最初のハードディスクですが、DVD、USB になるように構成することもできます) も検索します。代わりに、ネットワークカードなど)。

次に、システムはディスクに接続し、ブート ローダー (サイズ 446 バイト) を保存するマスター ブート レコード (サイズ 512 バイト) を検索し、残りのスペースにはディスク パーティションに関する情報が保存されます。 (最大 4 つ) と MBR 自体。

推奨読書: 4 つのベスト Linux ブート ローダー

ブート ローダーは、カーネルと initrd ファイル (初期化 RAM ディスク - マウントされたルート ファイルシステムと / に保存されているモジュール/ドライバーへのカーネル アクセスを提供します) を識別して指定し、ロードします。 lib ディレクトリ)、通常はファイル システムの /boot ディレクトリに保存されます。

カーネルがロードされると、PID 1 を持つ最初のプロセスである init (または新しい Linux ディストリビューションでは systemd) が実行され、次にシステム上の他のすべてのプロセスが開始されます。これは、システムのシャットダウン時に実行される最後のプロセスでもあります。

Linux の起動の問題またはエラー メッセージを確認する方法

前に述べたように、Linux のブート プロセスは急速に行われるため、コンソールに送信される出力のほとんどを明確に読み取ることさえできません。

したがって、ブートの問題やエラーに注意するには、システム管理者が特定のコマンドと組み合わせて特定の重要なファイルを調べる必要があります。これらには次のものが含まれます。

/var/log/boot.log – システム起動メッセージのログを記録します

これはおそらく、システムの起動中に展開されるすべての内容を確認するために調べたい最初のファイルです。

起動中に画面上の出力を一生懸命追おうとするのではなく、起動プロセスが完了した後にこのファイルを表示して、起動の問題やエラーの特定と解決に役立てることができます。

そのために次のように cat コマンドを使用します (以下はこのファイルのサンプルです)。

cat /var/log/boot.log
[  OK  ] Started Load/Save RF Kill Switch Status.
[ TIME ] Timed out waiting for device dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.device.
[DEPEND] Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c208ed615.
[DEPEND] Dependency failed for Swap.
[  OK  ] Reached target System Initialization.
[  OK  ] Listening on UUID daemon activation socket.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Listening on CUPS Scheduler.
[  OK  ] Started Daily apt activities.
[  OK  ] Reached target Timers.
[  OK  ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[  OK  ] Started ACPI Events Check.
[  OK  ] Started Trigger resolvconf update for networkd DNS.
[  OK  ] Started CUPS Scheduler.
[  OK  ] Reached target Paths.
[  OK  ] Listening on D-Bus System Message Bus Socket.
[  OK  ] Listening on ACPID Listen Socket.
         Starting Console System Startup Logging...
[  OK  ] Listening on Cockpit Web Service Socket.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Basic System.
         Starting LSB: Set the CPU Frequency Scaling governor to "ondemand"...
[  OK  ] Started ACPI event daemon.
[  OK  ] Started mintsystem.service.
         Starting Detect the available GPUs and deal with any system changes...
         Starting LSB: daemon to balance interrupts for SMP systems...
         Starting Bluetooth service...
[  OK  ] Started ClamAV virus database updater.
         Starting LSB: Starts syslogd...
[  OK  ] Started Regular background program processing daemon.
         Starting Modem Manager...
         Starting Accounts Service...
......

上記の出力から、以下の行で示されるブートの問題があることがわかります。

[DEPEND] Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c208ed615.
[DEPEND] Dependency failed for Swap.

問題: スワップ パーティションの問題。システムがスワップ ファイル/デバイス/パーティションの読み取りに失敗したか、スワップ ファイル/パーティションが存在しません。

freeコマンドでシステムがスワップ領域を使用しているかどうかを確認してみましょう。

free

total        used        free      shared  buff/cache   available
Mem:        3742792     2421060      433696      287376      888036      967000
Swap:             0           0           0

あるいは、swapon コマンドを実行して、システムのスワップ領域使用量の概要を表示することもできます (出力は得られません)。

swapon -s

Linux にスワップ領域を作成することで、この問題を解決できます。

: このファイルの内容はシステムのシャットダウン時にクリアされます。新しいデータは、新たな起動時にこのファイルに保存されます。

/var/log/messages – 一般的なシステム ログ

このファイルには、システムの起動中に記録されるメッセージを含む、一般的なシステム メッセージが保存されます。

これを表示するには、次のように入力します。

cat /var/log/messages
Jun  4 13:04:44 tecmint syslogd (GNU inetutils 1.9.4): restart
Jun  4 13:19:55 tecmint -- MARK --
Jun  4 13:39:55 tecmint -- MARK --
Jun  4 13:59:55 tecmint -- MARK --
Jun  4 14:19:55 tecmint -- MARK --
Jun  4 14:20:17 tecmint vmunix: [ 4945.388740] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388837] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388903] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388930] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.389334] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.389402] pcieport 0000:00:1c.0: BAR 15: assigned [mem 0xdfa00000-0xdfbfffff 64bit pref]
.....

このファイルは比較的長い可能性があるため、次のようにmore コマンド (パーセンテージも表示) を使用してページ単位で表示できます。

more /var/log/messages

/var/log/messages の内容は、前のファイルとは異なり、ブート メッセージだけでなく、他のシステム アクティビティに関するメッセージも含まれているため、シャットダウンはクリアされません。したがって、以下に示すように、古いファイルは圧縮され、後の検査のためにシステム上に保存されます。

ls -l message*

-rw-r--r-- 1 root root 1206127 Jun 10 14:20 messages
-rw-r--r-- 1 root root 1419494 Jun  4 13:00 messages.1
-rw-r--r-- 1 root root  153011 May 28 09:30 messages.2.gz

dmesg – カーネルメッセージを表示します

dmesg コマンドは、カーネルに渡されたコマンド ライン オプションなど、ブート プロセスが完了した後の操作を表示できます。検出されたハードウェア コンポーネント、新しい USB デバイスが追加されたときのイベント、または NIC (ネットワーク インターフェイス カード) の障害やドライバーがネットワーク上でリンク アクティビティが検出されなかったと報告するなどのエラーなどです。

dmesg
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=57b36d48-1938-43c2-bf85-e97bc9f423ea ro quiet splash
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000008ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000000090000-0x00000000000bffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000020200000-0x0000000040003fff] usable
[    0.000000] BIOS-e820: [mem 0x0000000040004000-0x0000000040004fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000040005000-0x0000000080b2ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000080b30000-0x0000000080d31fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000080d32000-0x00000000ce3eefff] usable
[    0.000000] BIOS-e820: [mem 0x00000000ce3ef000-0x00000000ce5eefff] type 20
[    0.000000] BIOS-e820: [mem 0x00000000ce5ef000-0x00000000daeeefff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000daeef000-0x00000000daf9efff] ACPI NVS
....

journalctl – Systemd ジャーナルの内容をクエリする

これは、最新のシステムおよびサービス マネージャーである systemd を使用するほとんどの Linux ディストリビューションで役立ちます。その下では、システム ログはジャーナル コンポーネントを介して実行されます。ジャーナル コンポーネントは、さまざまなコンポーネントによってログに記録されたすべてのメッセージを集中的に保存します。

これらのメッセージには、カーネル メッセージとブート メッセージが含まれます。 syslog またはさまざまなサービスからのメッセージ。これを使用して、出力を読んで対象の行 (端末のテキストの色設定に応じて赤い線で示されるエラー) を特定することで、ブート メッセージを確認し、ブートの問題を確立できます。

journalctl
Jun 13 16:35:32 tecmint mtp-probe[963]: checking bus 2, device 5: "/sys/devices/pci0000:00/0000:00:1d.0/u
Jun 13 16:35:32 tecmint mtp-probe[963]: bus: 2, device: 5 was not an MTP device
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: Timed out waiting for device dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d
Jun 13 16:35:54 tecmint systemd[1]: Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c2
Jun 13 16:35:54 tecmint systemd[1]: Dependency failed for Swap.
Jun 13 16:35:54 tecmint systemd[1]: swap.target: Job swap.target/start failed with result 'dependency'.
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: Reached target System Initialization.
Jun 13 16:35:54 tecmint systemd[1]: Started ACPI Events Check.
Jun 13 16:35:54 tecmint systemd[1]: Listening on CUPS Scheduler.
Jun 13 16:35:54 tecmint systemd[1]: Starting Console System Startup Logging...
Jun 13 16:35:54 tecmint systemd[1]: Started Daily Cleanup of Temporary Directories.

上記は、/var/log/boot.log を表示することですでに特定されたエラー、つまりスワップ パーティション エラーを示すコマンド出力のサンプルです。さらに多くの出力行を表示するには、[Enter] ボタンを押すだけです。

一般的なシステム マネージャーとサービス マネージャーに関連した、Linux システムのブートとサービス管理に関する次の役立つガイドも確認してください。

  1. RHEL 7 のプロセス管理: ブート、シャットダウン、およびその間のすべて
  2. システム起動プロセスとサービスの管理 (SysVinit、Systemd、および Upstart)
  3. 「init」と「systemd」の背後にある物語: なぜ「init」を「systemd」に置き換える必要があるのか

この記事では、Linux システムのブート プロセスのさまざまな段階を簡単に説明し、ブートの問題を確立し、場合によっては解決する方法を学びました。このガイドに意見を追加するには、以下のコメント フォームを使用してください。