CentOS 7およびRHEL 7のブートプロセスの概要とトラブルシューティング

この記事では、CentOS / RHEL 7.xシステムの起動プロセスについて説明します。RHEL 7では、以前のリリースと同様のままかもしれませんが、systemdが導入されています。起動プロセスに加えて、途中でトラブルシューティングのヒントとコツを提供します。

起動時の問題を積極的にトラブルシューティングする前に、起動プロセスを理解する必要があります。プロセスに慣れるまで、以下の手順を確認してください。

高レベルの概要

  • パワー+ポスト。
  • ファームウェアデバイスの検索。
  • ファームウェアがブートローダーを読み取ります。
  • ブートローダーは設定(grub2)をロードします。
  • ブートローダーはカーネルとinitramfsをロードします。
  • ブートローダーは制御をカーネルに渡します。
  • カーネルはハードウェアを初期化し/sbin/init、pid 1として実行します。
  • Systemdはすべてのinitrdターゲットを実行します(ファイルシステムをにマウントします/sysroot)。
  • カーネルルートFSがinitramfsルート(/sysroot)からシステムrootfs(/)に切り替わり、systemdがシステムバージョンとして再実行されます。
  • Systemdはデフォルトのターゲットを検索し、構成に従ってユニットを開始/停止しますが、依存関係を自動的に解決し、ログインページが表示されます。

起動プロセスの詳細については、システムの公式OSのドキュメントを参照してください。

Systemdターゲット

ターゲットは基本的に依存関係のチェックです。それらは、そのターゲットを満たすために必要なサービスを正確に「前」と「後」の構成にしています。例:arp.ethernet.servicefirewalld.serviceなどが開始されており、前に動作している必要がありますnetwork.target。それは達していない場合は、などのサービスhttpdnfsおよびは、ldap起動することはできません。RHEL / CentOS 7で設定できるターゲットは4つあります。

  • graphic.target(GUIインターフェース)
  • multi-user.target(マルチユーザーモード、テキストベースのログイン)
  • rescue.target(suloginプロンプト、基本的なシステム初期化)
  • 緊急ターゲット(suloginプロンプト、initramfsピボット完了、およびシステムルートは読み取り専用として/にマウントされています)

現在のデフォルトのブートターゲットを表示するには、以下を使用します。

systemctl get-default

ターゲットを分離することで、実行時にこれを変更できることに注意してください。これにより、新しいターゲットに関連付けられたすべてのサービスが開始/停止するため、注意してください(を参照systemctl isolate new.target)。

シングルユーザーモード

オペレーティングシステムの問題を修正するために、シングルユーザーモードで起動する必要がある場合があります。この例rescue.targetでは、RHEL / CentOS 7で「シングルユーザーモード」を使用する方法を示します。

  1. 「e」を押してgrub2メニューを中断し、grubメニューでプロンプトが表示されたら編集します。
  2. カーネルバージョン(vmlinuz)を指定する行を見つけて、次の行を追加します。systemd.unit=rescue.target
  3. 「Ctrl + x」を押して開始します。
  4. 次に、続行するようにrootパスワードを求められます。レスキューシェルを終了すると、ブートプロセスはデフォルトのターゲットをロードし続けます。

rootパスワードの回復

このプロセスは、以前のリリースで使用したものとは少し異なりますが、その単純なタスクであり、そのために必要な手順はほとんどありません。資格情報を回復する必要がある場合は、この方法を使用してVMにアクセスできます。ライブCDから起動し、ルートファイルシステムをマウントし、パスワードを編集することはできますが、その方法は古くなっており、より多くの労力が必要です。

  1. システムを再起動します。
  2. 「e」を押してgrub2メニューを中断し、grubメニューでプロンプトが表示されたら編集します。
  3. カーネルを指定する行の最後にカーソルを移動します(vmlinuz)。TTY0以外のすべてのコンソールを削除することもできますが、この手順は環境によっては必要ない場合があります。
  4. 追加rd.break引用符なし)すると、コントロールがinitramfsから実際のシステムに渡される直前にブートプロセスが中断されます。
  5. Ctrl + xで起動します。

この時点で、ルートシェルは、に読み取り専用モードでマウントされたルートファイルシステムとともに表示されます/sysroot。書き込み権限で再マウントする必要があります。

再マウント/sysroot

# mount -oremount,rw /sysroot

chroot jailに切り替えます。

# chroot /sysroot

資格情報が古くなっているユーザーのパスワードを変更します。

# passwd <username>

SElinuxを使用している場合は、ブートプロセスを続行する前に、すべてのファイルのラベルを付け直すことを検討してください。SElinuxを使用していない場合、この部分はスキップできます。

# touch /.autorelabel

2回終了すると、システムは中断したところからクリーンに起動します。

以前の起動からのログの確認

以前に失敗したブート試行のログを表示すると役立つ場合があります。journaldログが永続化されている場合(通常はメモリに保存され、起動時に解放されます)、これはjournalctlツールで実行できます。永続的なブートログを設定する必要がある場合は、次の手順に従ってください。

rootとして、この情報を保存するためのログファイルを作成します。

# mkdir -p 2775 /var/log/journal && chown :systemd-journal /var/log/journal
# systemctl restart systemd-journald

前回のブートのログを検査するには、-bオプションをで使用しますjournalctl。引数がない場合-b、最後のブートに関連するメッセージのみに出力をフィルタリングします。この引数に負の数を指定すると、以前のブートでフィルタリングされます。例えば:

# journalctl -b-1 -p err

これにより、最新の前に発生したブートのエラーログが表示されます。表示する必要があるブートを反映するように数値を変更する必要があります。

ディスクとファイルシステムのエラーを修復する

最も一般的な起動時エラーの1つは、誤って構成された/etc/fstabファイルです。を使用してエラーを修正することはできません。これらの問題のほとんどは、「レスキュー」がより機能的なシステムを必要とするため、使用する必要があります。rescue.target/etc/fstabemergency.target

以下は、を必要とする問題の例ですemergency.target

  1. 破損したファイルシステム。
  2. に存在しないUUIDがあり/etc/fstabます。
  3. に存在しないマウントポイント/etc/fstab
  4. のマウントオプションが正しくありません/etc/fstab

重要/etc/fstab緊急モードでファイルを編集した後、安全対策のために以下を実行する必要があります。

# systemctl daemon-reload

これはウォークスルーの例です。緊急モードで起動して、の誤ったエントリを削除します/etc/fstab

  1. 「e」を押してgrub2メニューを中断し、grubメニューでプロンプトが表示されたら編集します。
  2. カーネルバージョン(vmlinuz)を指定する行を見つけて、次の行を追加します。systemd.unit=emergency.target
  3. 「Ctrl + x」を押して起動します。
  4. 続行するには、rootパスワードの入力を求められます。
  5. ファイル/を変更できるように再マウントしfstabます。# mount -oremount,rw /
  6. mountコマンドを使用して、エラーの原因となっているエントリを確認できます。# mount -a
  7. 問題のあるエントリをfstabファイルから削除します。
  8. mount -a再度使用して、エラーが解決されたことを確認します。
  9. 使用systemctl daemon-reload私はすべてのユニットファイルをリロードし、全体の依存関係ツリーを再作成するために前述したよう。

緊急シェルを終了すると、システムは緊急ターゲットからの起動を完了し、その時点から通常どおり続行できます。この例は、緊急ターゲットを使用してシステム上のファイルに永続的な変更を加えるプロセスを示すために使用されました。

Grub 2のブートローダーの問題

/boot/grub2/grub.cfgファイルには、メインの設定ファイルです。このファイルを手動で編集しないでください。代わりに、grub2-mkconfig一連の異なる構成ファイルとインストールされたカーネルのリストを使用して、新しいgrub2 構成を生成するために使用します。このgrub2-mkconfigコマンドは/etc/default/grub、デフォルトのメニュータイムアウトや使用するカーネルコマンドラインなどのオプションを確認し、スクリプトセットを使用し/etc/grub.d/て、結果の構成ファイルを生成します。

これは、この関係のテキスト図です。

/boot/grub2/grub.cfg
               |
               |__________________
               |                  |
         /etc/default/grub         /etc/grub.d/*

重要:メインのgrub.cfgファイルを編集するには、次のコマンドを実行して、ファイルに必要な変更を加え、新しい/etc/default/grubファイルを/etc/grub.d/作成する必要がありますgrub.cfg

# grub2-mkconfig > /boot/grub2/grub.cfg

Grubのトラブルシューティング

/boot/grub2/grub.cfgトラブルシューティングを行う前に、ファイルの構文を理解することが重要です。

  • まず、起動可能なエントリは「menuentry」ブロック内にエンコードされます。これらのブロックではlinux16initrd16行はディスクからロードされるカーネル(カーネルコマンドラインとともに)とロードされるinitramfsを指します。ブート時のインタラクティブな編集中に、これらの行を見つけるためにタブが使用されます。
  • これらのブロック内の「set root」行は、RHEL / CentOS 7システムのルートファイルシステムを指しているのではなく、grub2がカーネルとinitramfsファイルをロードするファイルシステムを指している。構文は、harddrive.partitionここでhd0、システムの最初のハードディスクドライブであり、hd1第二あります。パーティションはmsdos1、最初のMBRパーティションまたはgpt1最初のGPTパーティションとして示されます。

の例/boot/grub2/grub.cfg

### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-514.26.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-514.el7.x86_64-advanced-a2531d12-46f8-4a0f-8a5c-b48d6ef71275' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  123455ae-46f8-4a0f-8a5c-b48d6ef71275
    else
      search --no-floppy --fs-uuid --set=root 123455ae-46f8-4a0f-8a5c-b48d6ef71275
    fi

デバイスにブートローダーを再インストールする必要がある場合は、次のコマンドを使用します。

# grub2-install <device>

壊れたGRUBインストールの修正

システムがgrub2メニューに到達しても起動しない場合。

  • まず、GRUBメニューを編集し、構文エラーを検索する必要があります。見つかった場合は、修正してシステムにアクセスし、永続的な変更を行って問題を修正します。
  • エラーが見つからない場合は、緊急ターゲットで起動する上記のセクションを参照してください。ルート(/)を再度マウントする必要があります。
  • 次のコマンドを使用して、現在のgrub2構成を表示します。 # grub2-mkconfig
  • エラーが表示されない場合は、誰かが/boot/grub2/grub.cfgファイルを編集した可能性があります。このファイルは変更しないでください。次のコマンドで構成を再構築します。# grub2-mkconfig > /boot/grub2/grub.cfg

grub設定を再構築したら、問題なく再起動できるはずです。



Leave a Comment

CentOS 7にApacheをインストールする方法

CentOS 7にApacheをインストールする方法

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

CentOS 7サーバーにCyber​​Panelをインストールして構成する方法

CentOS 7サーバーにCyber​​Panelをインストールして構成する方法

別のシステムを使用していますか?はじめにCyber​​Panelは、オープンソースでありOpenLiteSpeedを使用する市場で最初のコントロールパネルの1つです。なんてこった

Debian、CentOS、およびFreeBSDでSudoを使用する方法

Debian、CentOS、およびFreeBSDでSudoを使用する方法

LinuxおよびUnixのシステム管理者の間では、sudoユーザーを使用してサーバーにアクセスし、コマンドをルートレベルで実行することは非常に一般的です。sudの使用

CentOS 7へのNetdataのインストール

CentOS 7へのNetdataのインストール

別のシステムを使用していますか?Netdataは、リアルタイムのシステムメトリックモニタリングの分野における新星です。同じ種類の他のツールと比較すると、Netdata:

CentOS 7にJust Cause 2(JC2-MP)サーバーをインストールする方法

CentOS 7にJust Cause 2(JC2-MP)サーバーをインストールする方法

このチュートリアルでは、Just Cause 2マルチプレイヤーサーバーのセットアップ方法をよく学びます。前提条件開始する前に、システムが完全に更新されていることを確認してください

CentOS 7にStarbound Serverをインストールする方法

CentOS 7にStarbound Serverをインストールする方法

別のシステムを使用していますか?このチュートリアルでは、CentOS 7でStarboundサーバーをセットアップする方法を説明します。前提条件このゲームを所有している必要があります。

CentOS 8、Ubuntu 18.04、Debian 10、Fedora 31にGolang 1.13をインストールする方法

CentOS 8、Ubuntu 18.04、Debian 10、Fedora 31にGolang 1.13をインストールする方法

Go(Golangとも呼ばれます)は、静的に型付けされ、コンパイルされた、Cのようなプログラミング言語で、Googleによって開発されました。シンプルさと多用途性により、b

CentOS 7にDjangoをインストールする方法

CentOS 7にDjangoをインストールする方法

Djangoは、Webアプリケーションを作成するための一般的なPythonフレームワークです。Djangoを使用すると、ホイールを再発明することなく、アプリケーションをより速く構築できます。あなたが望むなら

CentOS 7 LAMP VPSにTextPattern CMSをインストールする方法

CentOS 7 LAMP VPSにTextPattern CMSをインストールする方法

別のシステムを使用していますか?TextPattern CMS 4.6.2はシンプルで柔軟な無料のオープンソースコンテンツ管理システム(CMS)であり、Webデザイナーが

CentOS 7にElggをインストールする

CentOS 7にElggをインストールする

別のシステムを使用していますか?Elggはオープンソースのソーシャルネットワーキングエンジンであり、キャンパスのソーシャルネットワークや

CentOS 7にFroxlor Server Management Panelをインストールする方法

CentOS 7にFroxlor Server Management Panelをインストールする方法

Froxlorは、オープンソースの無料で軽量かつ強力なサーバー管理パネルであり、Webホスティングサービスの確立と管理に最適です。ティ

CentOS 7でMatrix SynapseとRiotを使用してチャットサーバーを作成する

CentOS 7でMatrix SynapseとRiotを使用してチャットサーバーを作成する

Matrixは、分散型リアルタイム通信用のオープンスタンダードの通信プロトコルです。マトリックスは、上記に分散されているホームサーバーとして実装されています

CentOS 7にVtiger CRM Open Source Editionをインストールする方法

CentOS 7にVtiger CRM Open Source Editionをインストールする方法

Vtiger CRMは、企業が売り上げを伸ばし、顧客サービスを提供し、利益を増やすのに役立つ人気の顧客関係管理アプリケーションです。私

CentOS 7にPufferPanel(無料のMinecraftコントロールパネル)をインストールする方法

CentOS 7にPufferPanel(無料のMinecraftコントロールパネル)をインストールする方法

はじめにこのチュートリアルでは、Vultr VPSにPufferPanelをインストールしてください。PufferPanelは、オープンソースで自由に使用できるコントロールパネルで、あなたを管理します

PHPを5から7に更新する方法(NGINX / Apache、CentOS 7)

PHPを5から7に更新する方法(NGINX / Apache、CentOS 7)

はじめにこのチュートリアルでは、NGINXまたはApacheを使用してPHP 5 *を7に更新する方法について説明します。前提条件始める前に、リポジトリを追加する必要があります

CentOS 7にMoinMoinをインストールする方法

CentOS 7にMoinMoinをインストールする方法

MoinMoinは、Pythonで書かれたオープンソースのファイルシステムベースのWikiエンジンです。今日、MoinMoinはオープンソースコミュニティで広く使用されています。多くのベンダー

CentOS 7にSonarQubeをインストールする方法

CentOS 7にSonarQubeをインストールする方法

別のシステムを使用していますか?SonarQubeは、品質システム開発のためのオープンソースツールです。Javaで書かれており、複数のデータベースをサポートしています。それは提供します

CentOS 7へのPritunlのインストール

CentOS 7へのPritunlのインストール

PritunlはOpenVPNのオープンソース管理インターフェイスです。プライベートネットワークが可能で、ネイティブIPv6サポートがあり、使用方法は比較的簡単です。ター

CentOS 7にApacheをインストールする方法

CentOS 7にApacheをインストールする方法

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

DebianでSnortを設定する方法

DebianでSnortを設定する方法

Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。

Ubuntu 19.04にFiveMサーバーをインストールする方法

Ubuntu 19.04にFiveMサーバーをインストールする方法

FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。

ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。