[Linux][directory] 起動プロセス_/boot, /etc, /lib

# 起動プロセス
```mermaid
graph TD;
  A((電源ON))
  A --> B[ファームウェア<br>（BIOS/UEFI）]
  B --> C[パーティション形式<br>（MBR/GPT））]
  C --> D[ブートローダ（GRUB/GRUB2）]
  D --> E[カーネル]
  E --> F[初期化システム（initシステム）]
  F --> G((ログイン画面表示))

  classDef step1 fill:#f2f2f2,stroke:#333,stroke-width:2px;
  classDef step2 fill:#e6f7ff,stroke:#333,stroke-width:2px;
  classDef step3 fill:#e6ffe6,stroke:#333,stroke-width:2px;
  classDef step4 fill:#ffffe6,stroke:#333,stroke-width:2px;
  classDef step5 fill:#ffebcc,stroke:#333,stroke-width:2px;

  class B step1
  class C step2
  class D step3
  class E step4
  class F step5

  B:::step1 -->|ハードウェアの初期化、POST（Power On Self Test）| B
  C:::step2 -->|MBR/GPTによるパーティション情報の読み取り、<br>ブートローダの位置特定| C
  D:::step3 -->|GRUB/GRUB2がカーネルと初期RAMディスクを選択・メモリ展開| D
  E:::step4 -->|カーネルがシステムリソース（プロセス・メモリ管理など）を初期化、<br>デバイスドライバを読み込む| E
  F:::step5 -->|initシステム（systemdなど）がサービスを開始、<br>ユーザーのログイン画面を表示| F
```

# 詳細
## 1. BIOS/UEFI
- **役割**: システムファームウェアがブートローダを探して実行
    - BIOSの場合
        1. 記憶装置(HDD)等に関して最低限の認識を行う
        1. 起動デバイスの優先順位を決定する
        1. 各デバイスのMBRを読み込む
        1. MBR内のブートローダに制御を譲渡する
    - UEFIの場合
        1. 記憶装置(HDD)等に関して最低限の認識を行う
        1. 起動デバイスの優先順位を決定する
        1. 各デバイスのGPTを読み込む
        1. GPT内のEFIシステムパーティション(ESP)を`/boot/efi`にマウントする
        1. EFP内のブートローダに制御を譲渡する
- **使用ディレクトリ**: なし（ファームウェアレベルの処理）

## 2. ブートローダ（GRUB/GRUB2）
- **役割**: カーネルと初期RAMディスク（initrd/initramfs）を読み込む
- **使用ディレクトリ**:
  - `/boot/` → ブートローダの設定やカーネルイメージを格納
  - `/boot/grub/` → GRUB の設定ファイルやモジュール

## 3a. 初期RAMディスク
- **役割**: ファイルシステムをマウントするために必要なドライバやスクリプトを提供する
- **使用ディレクトリ**:
  - `/boot/initrd.img` → 初期RAMディスクのイメージ

## 3b. カーネル
- **役割**:
    1. 初期RAMディスク内のファイルシステムへアクセスするために必要なドライバやスクリプト参照し、ルートファイルシステムをマウントする
    1. initという特別な最初のプロセスをルートファイルシステムから起動する
- **使用ディレクトリ**:
  - `/boot/vmlinuz` → カーネルイメージ
  - `/boot/initrd.img` → 初期 RAM ディスク
  - `/sbin/init` → `init`プロセスの実行ファイル



## 4. 初期化システム（init system）
- **役割**: システムの基本的な設定を行い、サービスを開始
- **PID（プロセスID）**: 必ず`1` 
- **使用ディレクトリ**:
  - `/etc/` → 設定ファイル全般
  - `/lib/` → 必要なライブラリ
  - `/sbin/` → システム管理ツール
  - `/usr/lib/` → その他のライブラリ

# 参考リンク
- [【初級者向け】Linuxシステムの起動 ～ SysVinit、Upstart、systemd ～](https://tech.pjin.jp/blog/2020/11/11/linux-system-boot-2?utm_source=chatgpt.com)
- [Linuxディレクトリ構造の基本と役割：初心者向け完全ガイド](https://benelop.jp/blog/engineer/infrastructure/linux-directory/?utm_source=chatgpt.com)

# Ping-t

- [3399_起動プロセス](https://mondai.ping-t.com/question_subjects/31/question_sessions/31585258/progressing_questions/483986848)
- [3400_起動プロセス](https://mondai.ping-t.com/question_subjects/31/question_sessions/31718661/progressing_questions/486071290)

- [34741_BIOS](https://mondai.ping-t.com/question_subjects/31/question_sessions/30974595/progressing_questions/474609662)
- [3401_ブートローダ](https://mondai.ping-t.com/question_subjects/31/question_sessions/30871191/progressing_questions/472932397)
- [3680_初期RAMディスク](https://mondai.ping-t.com/question_subjects/31/question_sessions/31719854/progressing_questions/486088047)
- [2992_カーネル](https://mondai.ping-t.com/question_subjects/31/question_sessions/31355318/progressing_questions/480441626)
- [3402_init](https://mondai.ping-t.com/question_subjects/31/question_sessions/30871191/progressing_questions/472932396)