Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Linuxのブートプロセス
Search
Satoru Takeuchi
PRO
March 02, 2025
Technology
5
67
Linuxのブートプロセス
以下動画のテキストです
https://youtu.be/aqiENZbyC8Q
Satoru Takeuchi
PRO
March 02, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
シェルのジョブ
sat
PRO
1
20
常駐サービスを実現するデーモンプロセス
sat
PRO
0
24
絶対殺すSIGKILLシグナルと絶対死なないプロセス
sat
PRO
3
83
シェルのセッション
sat
PRO
2
31
RubyでKubernetesプログラミング
sat
PRO
4
180
プロセスの生成 exec編
sat
PRO
1
41
プロセスの生成 fork&exec編
sat
PRO
0
36
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
35
プロセスの生成 fork編
sat
PRO
0
38
Other Decks in Technology
See All in Technology
わたしがEMとして入社した「最初の100日」の過ごし方 / EMConfJp2025
daiksy
14
5.2k
入門 PEAK Threat Hunting @SECCON
odorusatoshi
0
170
AWSアカウントのセキュリティ自動化、どこまで進める? 最適な設計と実践ポイント
yuobayashi
7
640
RayでPHPのデバッグをちょっと快適にする
muno92
PRO
0
190
AIエージェント入門
minorun365
PRO
32
18k
Oracle Database Technology Night #87-1 : Exadata Database Service on Exascale Infrastructure(ExaDB-XS)サービス詳細
oracle4engineer
PRO
1
190
Potential EM 制度を始めた理由、そして2年後にやめた理由 - EMConf JP 2025
hoyo
2
2.8k
AIエージェント開発のノウハウと課題
pharma_x_tech
4
2.2k
IAMのマニアックな話2025
nrinetcom
PRO
5
1.1k
スキルだけでは満たせない、 “組織全体に”なじむオンボーディング/Onboarding that fits “throughout the organization” and cannot be satisfied by skills alone
bitkey
0
190
LINEギフトにおけるバックエンド開発
lycorptech_jp
PRO
0
320
NFV基盤のOpenStack更新 ~9世代バージョンアップへの挑戦~
vtj
0
360
Featured
See All Featured
Music & Morning Musume
bryan
46
6.4k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Side Projects
sachag
452
42k
Optimizing for Happiness
mojombo
376
70k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
GraphQLとの向き合い方2022年版
quramy
44
14k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
380
Navigating Team Friction
lara
183
15k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
650
What's in a price? How to price your products and services
michaelherold
244
12k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
Transcript
Linuxのブートプロセス Mar. 2nd, 2025 Satoru Takeuchi X: satoru_takeuchi 1
はなすこと • マシンの電源を入れてからLinuxのinitプロセスが起動するまでの流れ ◦ initプロセスは最近のLinuxディストリビューションの場合は大体 systemd • 前提 ◦ アーキテクチャはx86_64
◦ ファームウェアはUEFI BIOS ◦ ブートローダはGRUB ◦ 1台のディスクを搭載した物理マシン上に GRUBとLinuxをインストールしている • 以下は省略。別動画で説明するかも ◦ Secure Boot ◦ initramfs 2
大まかな流れ 1. 人間がマシンの電源を入れる 2. マシン上のUEFI BIOSが起動 3. UEFI BIOSがハードウェアを初期化 4.
UEFI BIOSがGRUBをロードして実行 5. GRUBがvmlinuzファイルをロード 6. GRUBがカーネル展開コードを実行 7. 展開コードがカーネルをロードして実行 8. カーネルがシステムを初期化してinitプロセスを実行 3
マシン上のUEFI BIOSが起動 • マシンは電源を入れると特定アドレス(0xFFFFFFF0)上に存在するUEFI BIOSプロ グラムを動かすようになっている • UEFI BIOSはマシンの不揮発性メモリ上に存在しており、システム起動時に物理ア ドレス空間の上述のアドレスにマップされている
◦ 📝 つまり物理アドレスが物理メモリ以外のデータを指すことがある ◦ 📝 UEFI BIOS以外にも物理アドレス空間にマップされるデータは他にもあるが、本動画では以下 のようなイメージを持っていればいい 4 物理アドレス空間 0 0xFFFFFFF0 不揮発性メモリ上の UEFI BIOS 物理メモリ 物理メモリ
UEFI BIOSがハードウェアを初期化 • CPUの動作確認、初期化 ◦ ブート直後は機能制限されていて、 UEFI BIOSが制限を外すというイメージ • メモリの動作確認、初期化
◦ これをする前は物理メモリにアクセスできない! • ディスクなどのその他ハードウェアを初期化 • どこの領域にどんなデータがマップされているかを記録 ◦ 📝 後でカーネルが使う 5
UEFI BIOSがGRUBをロードして実行 1. GPT形式のパーティションテーブルでフォーマットされたディスクを探す 2. BSP(Boot Strap Partition)というGUIDを持つパーティションを見つける a. 📝
このパーティションは FAT32ファイルシステムでフォーマットされている 3. BSPから「UEFIアプリケーション」と呼ばれる実行ファイルを見つける a. 📝 UEFIアプリケーションを実行するのは LinuxではなくUEFI BIOS 4. UEFI BIOSはUEFIアプリケーションとして存在しているGRUBを実行 a. 通常はGRUBがデフォルトで動作するように設定されている 6 UEFI BIOS 物理アドレス空間 disk (1) GRUBを読み出し GRUB (2) GRUBをロード&実行
GRUBがvmlinuzファイルをロード(前提知識) • BSPはLinux動作時に通常(“/boot/efi/”)にマウントされている ◦ GRUB EFIアプリケーションのファイル名は通常 ”/boot/efi/EFI/BOOT/BOOTX86.EFI” • vmlinuzファイルは通常ブートパーティション(“/boot/”)に存在する ◦
名前は”vmlinuz-<カーネバージョン>” ◦ 📝 GRUBはLinuxの一部のファイルシステム (e.g. ext4, XFS)を読み出せる ▪ “/boot”はGRUBが読み出せるファイルシステムでなければならない • カーネル圧縮イメージのフォーマット(bzImage形式と呼ばれる): 7 setup header カーネル展開コード カーネル圧縮イメージ カーネル展開コードやカーネルの ロード先メモリアドレス、エントリポイ ントを保持
GRUBがvmlinuzファイルをロード 1. 設定に基づき、システムに存在するカーネルの一覧を取得し、ユーザにどのカーネ ルをどんなブートパラメタで起動するかを選択させる a. この動画で重要なのはルートファイルシステムを指定する ”root”パラメタ 2. vmlinuzファイルをメモリ上にロード 8
物理アドレス空間 カーネル展開 コード カーネル圧縮 イメージ disk GRUB (1) vmlinuzファイルを読み出し (2) ロード * スペースの都合でsetup headerは省略
GRUBがカーネルの展開コードを実行 • カーネル展開コードのエントリポイントにジャンプして実行開始 9 物理アドレス空間 カーネル展開 コード カーネル圧縮 イメージ disk
GRUB ジャンプ
展開コードがカーネルをメモリマップして実行 1. カーネル展開コードがカーネル圧縮イメージを展開してメモリ上にマップ 2. カーネルのエントリポイントにジャンプ 10 物理アドレス空間 カーネル展開 コード カーネル圧縮
イメージ disk カーネル (1) 読み出し (2) 展開&コピー&エントリポイントにジャンプ
カーネルがシステムを初期化してinitプロセスを実行 1. ハードウェアやカーネルそのものの初期設定 a. 📝 UEFI BIOSはマシンの起動に必要な最低限の初期化しかしないが、カーネルによるハードウェ アの初期設定はシステムが稼働し続けるために必要な設定をするという違いがある 2. “root”ブートパラメタで指定した場所にあるrootファイルシステムをディスクから読み
出してmount 3. ルートファイルシステム上のinitプログラムをメモリマップして実行 11 物理アドレス空間 disk カーネル (1) rootファイルシステムを読 み出してmount (2) initプログラムをメモリマップ &実行 init
おわりに • マシンの電源を入れた後は様々なコンポーネントが取り決めに基づいて段階的に システムが起動していく • ものすごく長大だが、これでもかなり省略している。本物はもっと複雑 • 理解するのは大変だし知っていてもそれほど得はしないが、かっこいい 12