initrd
原理
[Linuxディストリビューションの
このような
さらに
もう1つ
これらの
実装
[![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Mkinitcpio_31_screenshot.png/260px-Mkinitcpio_31_screenshot.png)
mkinitcpio
, Arch Linux およびinitrd のファイルシステムイメージ(およびカーネルイメージ)は、Linuxのブートローダやファームウェアがアクセスできる
- ルートファイルシステム
自身 - ローカルディスク
上 の ext2 か FAT でフォーマットされた小 さなパーティション(ブートパーティション) - Live CD の
場合 は、CD上 のファイルシステム - TFTPサーバ(イーサネットからブートする
場合 )
ブートローダはカーネルとinitrdイメージをメモリ
- そのイメージが(オプションでgzipで
圧縮 された)ファイルシステムイメージの場合 、特殊 なブロックデバイス (/dev/ram) として利用 可能 にし、ルートファイルシステムとしてマウントする[3]。このファイルシステム用 のドライバはカーネル内 に静的 にコンパイルしておく必要 がある。多 くのディストリビューションではデフォルトで圧縮 されたext2ファイルシステムをinitrdイメージに採用 している。他 には(Debian 3.1 など)、メモリの限 られたシステムでもブートできるようcramfsを使 うものもある。cramfsは伸長 の際 に追加 のメモリを必要 としない。
初期 化 用 ルートファイルシステムが利用 可能 になると、カーネルは最初 のプロセスとして /linuxrc を実行 する。そのプロセスが終了 (exit) するとカーネルは真 のルートファイルシステムのマウントが完了 したと判断 し、"/sbin/init" を実行 して通常 のユーザー空間 の立 ち上 げ処理 を開始 する[3]。
- そのイメージがgzipで
圧縮 されたcpioアーカイブの場合 、中間 段階 としてカーネルがそれを展開 して initramfs (Linux 2.6.13以降 利用 可能 なtmpfsの特殊 インスタンス)とし、それを初期 化 用 ルートファイルシステムとする。ext2などのファイルシステムのドライバをカーネルに組 み込 んでおく必要 がなくなるという利点 がある[4]。
- initramfs
上 で、カーネルは最初 のプロセスとして /init を実行 する。/init は終了 (exit) しない。
マウント準備
[- ブート
処理 が依存 している任意 のハードウェアドライバをロードしなければならない。通常 、一般 的 なストレージ機器 用 カーネルモジュールをまとめてinitrdに格納 しておき、ホットプラグエージェントを起動 して、検出 したハードウェアにマッチするモジュールを取出 す。 - ブートスプラッシュを
表示 するシステムでは、画面 表示 関連 ハードウェアを初期 化 し、ユーザー空間 のヘルパーを使 ってブート処理 と同期 しつつアニメーションを描画 させる。 - ルートファイルシステムがNFSの
場合 、以下 を行 う。主要 なネットワークインタフェースを起動 させる。- DHCPクライアントを
呼 び出 し、必要 な情報 を得 る。 - その
情報 からNFS共有 の名前 とNFSサーバのアドレスを取出 す。 - NFS
共有 をマウントする。
- ルートファイルシステムがソフトウェアRAIDデバイスの
場合 、RAIDボリュームがどのデバイスにまたがっているかを知 る手段 がない。通常 はMDユーティリティを呼 び出 し、全 ブロックデバイスをスキャンし、必要 なデバイスをオンラインにする。 - ルートファイルシステムが
論理 ボリュームの場合 、LVMユーティリティを呼 び出 してスキャンし、ルートファイルシステムを格納 しているボリュームグループを活性 化 させる。 - ルートファイルシステムが
暗号 化 されたブロックデバイスにある場合 、 - ルートファイルシステムをマウントした
状態 では安全 に実施 できない保守 タスクがあれば、ここで実行 する。 - ルートファイルシステムを
読 み込 み専用 でマウントする。 動作 し続 ける必要 のあるプロセス(ブートスプラッシュ用 ヘルパーやそのコマンドFIFO)を新 たにマウントしたルートファイルシステムに移行 させる。
ルートファイルシステムを
- initrd では、
真 のルートファイルシステムは一時 的 なマウントポイントにマウントし、このためだけに導入 された pivot_root(8) を使 って両者 を入 れ替 える。こうすると初期 化 用 ルートファイルシステムは新 たなマウントポイント(/initrd など)に残 るので、後 でこれをアンマウントし initrd に使 っていたメモリを解放 することができる。 - initramfs では、
初期 化 用 ルートファイルシステムを pivot_root で移動 させることができない[5]。そのため、swich_root(8)コマンドにより単 にその中身 を空 にし、真 のルートファイルシステムを上書 きするようにマウントする。
脚注 ・出典
[- ^ a b Almesberger, Werner (2000), “Booting linux: the history and the future”, Proceedings of the Ottawa Linux Symposium
- ^ a b Landley, Rob (15 March 2005), Introducing initramfs, a new model for initial RAM disks, linuxdevices.com, オリジナルの2013-01-04
時点 におけるアーカイブ。 - ^ a b Almesberger, Werner; Lermen, Hans (2000), http://www.kernel.org/doc/Documentation/initrd.txt
- ^ Landley, Rob (2005-10-17), ramfs, rootfs, and initramfs docs, take 2, Linux kernel source tree
- ^ Fish, Richard (2005-07-06), pivot_root from initramfs causes circular reference in mount tree, Linux Kernel Bug Tracker 2009
年 2月 28日 閲覧 。 - ^ Garzik, Jeff (2002-11-02), initramfs merge, part 1 of N, Linux kernel mailing list
外部 リンク
[- The switch from initrd to initramfs for newer Debian kernels initrd
生成 ツールキットの詳細 な比較 - Kernel documentation on early userspace support