ブートの問題をトラブルシューティングするには、Linux のブート プロセスを理解することが重要です。これらは、ブート プロセスの大まかな手順です。これらのファイルのエラーが起動の問題を引き起こす可能性があるため、起動プロセスに関連するファイルに注意する必要があります。
起動中に問題が発生した場合は、起動プロセスのどのフェーズに問題があるかを特定して、問題を解決するための適切な措置を講じることができるようにする必要があります。
systemd の紹介
systemd CentOS/RHEL 7 の新しいシステムおよびサービス マネージャーです。RHEL 6 を含む以前のバージョンの RedHat Linux で使用されていた SysV init スクリプトと下位互換性があります。デフォルトの初期化システムとして Upstart を置き換えます。
次の手順は、RHEL/CentOS 7 で起動手順がどのように行われるかをまとめたものです。
<オール>- /etc/systemd ディレクトリから構成ファイルを読み取ります
- /etc/systemd/system/default.target によってリンクされたファイルを読み取ります
- システム ターゲットによって定義された状態にシステムを移行します
- /etc/rc.local を実行
1. POST (パワーオンセルフテスト)
最新の Universal Extended Firmware Interface (UEFI) である可能性があるシステム ファームウェアから ) または従来の基本入出力システム (BIOS) )、電源投入時セルフテスト (POST) が実行され、システムの起動に必要なハードウェアが初期化されます。
2.ブータブル デバイスの選択 (MBR あり)
– マスター ブート レコード (MBR) は、BIOS によってメモリに読み込まれるブート ドライブの最初の 512 バイトです。
– 次の 64 バイトには、ディスクのパーティション テーブルが含まれます。最後の 2 バイトは、エラー検出に使用される「マジック ナンバー」です。
– MBR は起動可能なデバイスを検出し、GRUB2 ブートローダーをメモリにロードして制御を転送します。
3.ブートローダー (GRUB2) の読み込み
– RHEL 7 で使用されるデフォルトのブートローダー プログラムは GRUB 2 です。GRUB は GRand Unified Bootloader の略です。 . GRUB 2 は、レガシー GRUB とも呼ばれる古い GRUB ブートローダーを置き換えます。
– GRUB 2 構成ファイルは /boot/grub2/grub.cfg にあります (このファイルを直接編集しないでください)。
– GRUB 2 メニュー構成設定は、grub.cfg の生成時に /etc/default/grub から取得されます。
– /etc/default/grub ファイルのサンプル:
# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap crashkernel=auto rd.lvm.lv=rhel/root rhgb quiet net.ifnames=0" GRUB_DISABLE_RECOVERY="true"
– これらのパラメータのいずれかを変更した場合は、grub2-mkconfig を実行する必要があります /boot/grub2/grub.cfg ファイルを再生成します。
# grub2-mkconfig –o /boot/grub2/grub.cfg
– GRUB2 は、/boot ディレクトリで vmlinuz とも呼ばれる圧縮されたカーネル イメージ ファイルを検索します。
– GRUB2 は vmlinuz カーネル イメージ ファイルをメモリにロードし、initramfs イメージ ファイルの内容を一時的なメモリ ベースのファイル システムに抽出します。 (tmpfs).
– 初期 RAM ディスク (initrd) は、実際のルート ファイル システムの前にマウントされる初期ルート ファイル システムです。
initramfs
– 初期 RAM ファイル システムの役割は、IDE、SCSI、RAID などのブロック デバイス モジュールをプリロードして、これらのモジュールが通常存在するルート ファイル システムにアクセスしてアクセスできるようにすることです。
– initramfs はカーネルにバインドされ、カーネルはこの initramfs を 2 段階のブート プロセスの一部としてマウントします。
– dracut ユーティリティは、新しいカーネルがインストールされるたびに initramfs を作成します。
– lsinitrd コマンドを使用して、dracut によって作成されたイメージの内容を表示します:
# lsinitrd | less
4.カーネルのロード
– カーネルは、プロセス ID 1 (PID 1) で systemd プロセスを開始します。
– また、initrd イメージから必要なドライバー モジュールをロードします。
– ブート ローダー (GRUB2) は、ユーザーにブート メニューを表示するか、デフォルトのオペレーティング システムを自動的に起動するように構成できます。
– Linux をロードすると、カーネルが initramfs と一緒にロードされます。 initramfs には、起動に必要なすべてのハードウェアのカーネル モジュールと、起動の次の段階に進むために必要な初期スクリプトが含まれています。
– RHEL 7 では、initramfs には完全な運用システムが含まれています (トラブルシューティングの目的で使用されます)。
5. systemd の起動
– カーネルは、プロセス ID 1 (PID 1) で systemd プロセスを開始します。
root 1 0 0 02:10 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
– systemd は、システムの起動後に開始される最初のプロセスであり、システムのシャットダウン時に実行される最後のプロセスです。
– 起動の最終段階を制御し、システムを使用できるように準備します。また、サービスを同時にロードすることで起動を高速化します。
– systemd は、/etc/systemd/system/default.target (たとえば、/usr/lib/systemd/system/multi-user.target) によってリンクされたファイルを読み取ります。デフォルトのシステム ターゲット (実行レベルに相当) を決定します。システム ターゲット ファイルは、systemd が開始するサービスを定義します。
– systemd を使用すると、サービス (name.service) とターゲット (name.target)、デバイス (name.device) など、システム上のさまざまなタイプのユニットを管理できます。 、ファイル システム マウント ポイント (name.mount)、およびソケット (name.socket)。
SysV 実行レベルとターゲット ユニットの比較
実行レベル | 対象ユニット | 説明 |
---|---|---|
0 | runlevel0.target, poweroff.target | シャットダウンして電源を切る |
1 | runlevel1.target、rescue.target | レスキュー シェルを設定する |
2,3,4 | runlevel[234].target, multi-user.target | 非グラフィカル マルチユーザー シェルのセットアップ |
5 | runlevel5.target、graphical.target | グラフィカル マルチユーザー シェルをセットアップする |
6 | runlevel6.target、reboot.target | システムをシャットダウンして再起動 |
systemd は、システム ターゲットによって定義された状態にシステムを移行し、次のようなシステム初期化タスクを実行します。
1.ホスト名の設定
2.ネットワークの初期化
3.構成に基づく SELinux の初期化
4.ウェルカム バナーの印刷
5.カーネル ブート引数に基づくシステム ハードウェアの初期化
6. /proc ファイル システムなどの仮想ファイル システムを含むファイル システムのマウント
7. /var 内のディレクトリをクリーンアップする
8.スワッピング開始
デフォルト/現在のターゲット単位を表示
次のコマンドを使用して、デフォルトで使用されるターゲット ユニットを表示します:
# systemctl get-default graphical.target
graphical.target target unit は、システムがグラフィカルなマルチユーザー状態で実行されていることを示します。これは、SysV init システムの実行レベル 5 に似ています。古いコマンド runlevel を使用してこれを確認できます :
# runlevel N 5
デフォルトのターゲット ユニットは /etc/systemd/system/default.target で表されます ファイル。このファイルは、現在のデフォルトのターゲット ユニットへのシンボリック リンクです。例:
# ls -lrt /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 36 Sep 23 20:01 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
デフォルトのターゲット単位を変更
次のコマンドを使用して、デフォルトのターゲット ユニットを変更します (たとえば、デフォルトを multi-user.target ユニットに変更するには):
# systemctl set-default multi-user.target Removed symlink /etc/systemd/system/default.target. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
default.target シンボリック リンクが変更され、現在 multi-user.target ユニットを指していることに注意してください:
# ls -lrt /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 41 Sep 24 11:58 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
以下の表は、特定のフェーズが構成されている場所と、問題が発生した場合にトラブルシューティングを行うためにできることをまとめたものです。
起動フェーズ | 構成 |
---|---|
投稿 | ハードウェア構成 (F2、ESC、F10 または別のキー) |
起動可能なデバイスを選択 | BIOS/UEFI 構成またはハードウェア ブート メニュー |
ブートローダーのロード | grub2-install と /etc/defaults/grub への編集 |
カーネルのロード | GRUB 構成と /etc/dracut.conf の編集 |
/sbin/init の開始 | initramfs にコンパイル |
initrd.target を処理しています | initramfs にコンパイル |
ルート ファイルシステムに切り替える | /etc/fstab |
デフォルト ターゲットの実行 | /etc/systemd/system/default.target |
CentOS / RHEL 7 :systemd ターゲットの初心者向けガイド (SysV init ラン レベルの置き換え)