systemdを使用したLinux OSの起動順序 - 正確な正しい手順は何ですか?

systemdを使用したLinux OSの起動順序 - 正確な正しい手順は何ですか?

Linuxオペレーティングシステムの起動順序図

誰かが次のステップが正しいことを確認できたらいいでしょう。 正確なステップを知りたいです。

  1. コンピュータの電源を入れます。

  2. 基本I/Oシステム(BIOS/UEFI)。最初に実行されるプログラムは、PCマザーボードのROMに保存されます。

    • ファームウェア(BIOS / UEFI):デバイスプロセッサに起動プロセスを開始する方法を知らせるプログラムはファームウェアと見なされます。
    • ファームウェアは製造中にハードウェアに直接インストールされます。
    • コンピュータ、携帯電話、タブレットは、BIOSやEFIなどのファームウェアを使用してオペレーティングシステムをロードします。
  3. POST(Power On Self Test)を実行して、H / Wコンポーネントが正しく機能していることを確認します。

  4. 起動可能なデバイスを探します。見つかった場合、CONTROLはデバイスの最初のセクタであるMBRに渡されます。

  5. MBR(マスターブートレコード)。 512バイト、起動可能なデバイスの最初のセクタには、コンピュータの起動に使用される機械語コードの指示が含まれています。これには次の情報があります。

    • ブートローダ情報(446バイト) - ブートローダを指す小さな下位レベルコード[ブートローダはどこにありますか? ] /boot/grub2/grub.cfg
    • パーティションテーブル情報(64バイト)[ファイルシステムのオペレーティングシステムはどこにありますか? ]
    • エラーチェック(2バイト)
    • ブートローダ(GRUB2)をメモリにロードし、制御権をメモリに渡します。
  6. GRUB2(GRand統合ブートローダ)

    • オペレーティングシステムをロードするプログラムです。以前はMBR(446バイト)に適していましたが、サイズが拡大し続け、オペレーティングシステムも複雑になりました。ファイルシステムを正しく解釈することができる単一のプログラムではありません。
    • 起動中に/boot/grub2/grub.cfgからMBRによってメモリにロードされます。
    • ユーザーは、起動する他のオペレーティングシステムまたはカーネルを選択するようにGUIを表示できます。
    • カーネルを選択すると、そのカーネル実行可能ファイルが検索されます。
      • /boot/vmlinuz-4.18.0-408.el8.x86_64
    • 主な作業は、カーネルとinitramfs [initramfs-4.18.0–408.el8.x86_64.img]をメモリにロードすることです。
    • カーネルがRAMにロードされると、ControlはRAMに渡されます。
  7. コア:

    • Linuxカーネルにシステム制御がある場合(ブートローダによってロードされた後に取得)、メモリ構造とドライバを準備します(ハードウェア初期化)。カーネルが起動中です。
    • 私たちはRHGBとQuietによって抑制される可能性がある多くのメッセージを見ることができます。 [メッセージングを有効にするには、/etc/default/grubでGRUB_CMDLINE_LINUXパラメータを変更し、#grub2-mkconfig> /boot/grub2/grub.cfgを実行して再起動してください。]
    • 一部のLinuxベースのコンピュータシステムを正しく起動するには、initramfsが必要です。存在する場合、カーネルは initramfs で /init スクリプトを実行します。
    • 外部ドライバ、設定、または暗号化されたファイルシステムを持つシステムには、Linuxカーネルがシステムのinitバイナリに制御を渡すことができるようにinitramfsが必要です。
  8. initramfs: ref-10

    • initramfs は tmpfs に基づく初期の RAM ファイルシステムです。これは、起動時にカーネルが実行できない操作を実行できる初期ユーザースペースを提供します。
    • これには、実際のルートファイルシステムでinitバイナリを呼び出す前にファイルシステムをマウントするために必要なツールとスクリプトが含まれています。
    • これらのツールは、復号化抽象化層(暗号化されたファイルシステム用)、論理ボリュームマネージャ、ソフトウェアRAID、Bluetoothドライバベースのファイルシステムローダなどです。
    • 起動時に、カーネルは initramfs が存在するかどうかを確認するか、ブートローダが initramfs がロードされたことを Linux カーネルに通知します。
    • 見つかった場合、Linuxカーネルはtmpfsファイルシステムを作成し、そのアーカイブの内容を抽出し、tmpfsファイルシステムのルートディレクトリにある/ initスクリプトを起動します。
      • [initramfsには、/init.dというファイルが1つ以上含まれています。このファイルはカーネルによってデフォルトの初期化プロセス(PID 1)として実行されます。すべての作業を行う必要があります。 ]参照-7
    • その後、スクリプトは/ sysrootの下に実際のルートファイルシステムをマウントします(たとえば、追加のモジュールのロード、暗号化抽象化レイヤの準備などでマウントできることを確認した後など)。同様に、/usrや/varのような他の重要なファイルシステムもマウントします。
    • ルートファイルシステムやその他の重要なファイルシステムがマウントされている場合、initramfsのinitスクリプトはルートを実際のルートファイルシステムに切り替えます(これはivot_rootではなくswitch_root操作であることを覚えておいてください)。
      • [switch_rootジョブは/ sysrootを実際のルートファイルシステムに切り替え、そこからコンテンツの実行を開始し、メモリからinitramfsを削除します。 ]
    • 最後に、システムの実際のルートファイルシステムで/ sbin / init(init - > / usr / lib / systemd / systemd)バイナリをデフォルトのinitプロセス(PID 1 - initramfs / initから継承し、execの詳細を参照)として呼び出す続けます。起動プロセス。
  9. システム:

    • PID 1がロードされた最初のサービス
    • /etc/fstab からファイルシステムをマウントします。
    • 必要なすべてのサービスとプロセスを並列に開始します。
      • [/etc/systemd/system/default.target]
    • デフォルトのターゲットへの起動に必要な依存関係を持つファイルを探し始めます。
    • デフォルトのターゲットが起動し、ユーザーがログインプロンプトを表示できる場合は、システムが正常に起動したと言うことができます。

引用:

1. https://opensource.com/article/20/5/systemd-startup
2. https://opensource.com/article/20/5/systemd-units
3. https://opensource.com/article/20/4/systemd
4. https://www.quora.com/What-is-chroot-Sysroot
5.https://blog.csdn.net/flynetcn/article/details/131828832
6. https://www.linfo.org/vmlinuz.html
7. https://wiki.gentoo.org/wiki/Custom_Initramfs
8. https://www.linuxfromscratch.org/blfs/view/svn/postlfs/initramfs.html
9. https://www.quora.com/What-exactly-is-the-initramfs-program-in-Linux-Is-it-a-script-binary-or-what
10. https://wiki.gentoo.org/wiki/Initramfs/Guide
11. https://wiki.ubuntu.com/Initramfs
12. https://www.youtube.com/watch?v=saovaEhA85g
13. https://www.youtube.com/watch?v=sOIOY6Ks0xA&t=423s
14. https://sourcemage.org/HowTo/initramfs
15. https://web.archive.org/web/20160730094856/http://wiki.sourcemage.org/HowTo(2f)Initramfs.html
16. https://tiebing.blogspot.com/2014/02/linux-switchroot-vs-pivotroot-vs-chroot.html
17. https://unix.stackexchange.com/questions/126217/when-would-you-use-pivot-root-over-switch-root
18. https://linux.die.net/man/8/pivot_root
19. https://linux.die.net/man/8/switch_root
20. https://en.wikipedia.org/wiki/Exec_(system_call)
21. https://www.baeldung.com/linux/exec-command-in-shell-script
22. https://eng.libretexts.org/Bookshelves/Computer_Science/Operating_Systems/Linux_-_The_Penguin_Marches_On_(McClanahan)/13%3A_Working_with_Bash_Scripts/3.09%3A_Positional_Parameters %2 0in%20Linux、%返します。 20%20%20に移動して%20プロセスを呼び出します。
23. https://en.wikipedia.org/wiki/Overlay_(プログラミング)
24. https://superuser.com/questions/782008/linux-boot-time-scrolling-messages
25. https://itnixpro.com/how-to-view-linux-boot-messages-using-dmesg-command/?utm_content=cmp-true
26. https://linux-audit.com/finding-boot-logs-in-systemd-journals/
27. https://www.loggly.com/ultimate-guide/using-journalctl/

ベストアンサー1

まあ、あなたのinitramfsとsystemdの部分は正確ですが、残りは必ずしもそうではありません。

正確なステップは何ですか?

そのような問題の問題は次のとおりです。シングルではない「正確に正しいステップ」の答え – 1つあります様々な種類各ステップは、ハードウェアプラットフォーム、Linuxディストリビューションなどによって異なります。

特定のPCプラットフォーム(2010年代のPCの新しいRHEL / Fedora?)のいくつかの特定のLinuxディストリビューションのあなたの説明はある時点で正確ですが、同時に他のPCはGRUBではなく別のブートローダープログラムを使用するか、MBRセクターではなくまったく異なるブートローダー– 両方とも「正しい」。

  1. (まあ、「起動」と「BIOS」の間には、「BIOS」を実行してメインCPUを準備する前に実際に実行される最初の独立CPUであるIntelのMEやAMDのPSPなど、起動時に実際にCPUを初期化する隠しプロセスを含めることができますが、以前はこれがユーザーに完全には見えなかったため、これを無視してBIOSが最初のふりをすることができます。

  2. 「BIOS」は一般的な用語ですが、実際には、今日のほとんどのx86 PCで使用されているIBM PCスタイルのファームウェアを具体的に表しています。廃止- ほぼすべて「UEFI」タイプのファームウェアを使用してください。 UEFIには通常BIOSインターフェイス用の互換性モジュールが含まれていますが、ますますそうではありません。

    他のタイプのコンピュータでは、精度がはるかに低下します。私が知る限り、Intel Macには常にEFI(「BIOS」なし)がありました。 Apple Silicon Macには、完全にカスタマイズされたシステムファームウェアがあります。 ChromebookはさまざまなARM64コンピュータを使用しています。可能UEFIがあるか、他のものを使用することもできます。

    一般に、「システムファームウェア」と呼ぶ方が良いです。

  3. PCに関する限り(現在の組み込み装置は無視)、これはIBM PC BIOSブートプロセスにのみ適用されます。たとえば、UEFIを持つシステムは、ブートコードの最初のセクタをまったく使用しません。代わりに、ファームウェアはファイルシステムを理解し、ブートコードを特別なパーティションに通常のファイルとして保存します。

  4. 同様に、IBM PC BIOSでは正確ですが、UEFIでは正確ではありません。

    セクタにはまだパーティションテーブルを含めることができますが(セクタ2+でGPTパーティションテーブルを使用する方が一般的ですが)、UEFI使用しないでください起動コードはここから来ますが、GRUB2はファイルシステムから直接起動されます。

    (「EFIシステムパーティション」のIDとファイルパスは通常、ファームウェア自体によってNVRAMに保存され、2つ以上存在する可能性があります。)独自の起動メニューがあります。)

    しかし、BIOSの場合、およそ2種類のブートセクタがあります。 a) 「アクティブ」最初のセクタにジャンプするブートセクタ分割(別名VBR)、これはSyslinuxやWindowsなどで発生します。 b)インストール中に定義された固定セクタの場所にあるファイルにジャンプします。これがGRUBのMBRが行うことです。

    どちらの場合も、BIOS MBR のブートコードが小さすぎて grub.cfg を理解できません。これは次のために発生します。MBRが始まるステップです。

  5. GRUB2は一般的ですが、決して普遍的なものではありません。 (例えばrEFIndやsystemd-bootと同様に、Syslinuxでは非常に一般的です。今日、特にUEFIシステムでは、カーネルイメージ(vmlinuz)自体にスタブローダが組み込まれているため、ファームウェアはそれを直接実行できます。)

    さらに、MBRには決して適していませんでした。 GRUB2やGRUB0.xも適していません。 MS-DOSでも、MBRは「アクティブ」パーティションを見つけて対応するVBRにジャンプします(それからIO.SYSをロードし、それDOSカーネルは最終的にロードされます。したがって、GRUB2は他のブートローダと比較して実際には大きいですが、まったく新しいものではありません。

    (最終的には2つのgrub.cfgが関連付けられています。小さな「ブート」grub.cfgは、grubのインストール中に作成されたGRUBカーネルイメージに直接埋め込まれ、「実際の」grub.cfgの場所を指します。したがって、GRUBは "/ boot/grub2/grub.cfgで「ロードされる」と言うのは正確ではありません。

おすすめ記事