INITRD
Section: Linux Programmer's Manual (4)
Updated: 1997-11-06
Index
JM Home Page
roff page
名前
initrd - ブートローダによって初期化された RAM ディスク
説明
/dev/initrd
スペシャルファイルは読み込み専用のブロックデバイスである。
/dev/initrd
デバイスはカーネルが起動される前にブートローダ (boot loader)
によって初期化 (例えば、ロード) される RAM ディスクである。
その後、カーネルは
/dev/initrd
ブロックデバイスの内容を二段階のシステム起動
(two phased system boot-up) で利用することができる。
最初のブートアップ段階 (first boot-up phase) では、カーネルは
(例えば、ブートローダによって初期化された RAM disk である)
/dev/initrd
の内容を初期ルートファイルシステム (root file-system) としてマウント
して起動する。
第二段階では初期ルートデバイスに含まれているものから、追加のドライ
バやその他のモジュールがロードされる。
追加のモジュールがロードされた後、新しいルートファイルシステム
(すなわち、通常時のルートファイルシステム)
が別のデバイスからマウントされる。
ブートアップ作業
initrd
を利用した時は、システムは次のようにブートする:
- 1.
-
ブートローダはカーネルプログラムと
/dev/initrd
の内容をメモリにロードする。
- 2.
-
カーネル起動時、カーネルは
/dev/initrd
デバイスの内容を展開 (uncompress) し、
/dev/ram0
にコピーする。さらに、
/dev/initrd
の使っていたメモリを解放する。
- 3.
-
カーネルは
/dev/ram0
デバイスを初期のルートファイルシステムとして読み書き可能な形式でマウン
トする。
- 4.
-
指示されたルートファイルシステムが初期ルートファイルシステム
(例えば
/dev/ram0)
と同一の場合は、カーネルは普通のブートシーケンスのための最後のステップを
省略する。
- 5.
-
/linuxrc
という実行可能なファイルが初期ルートファイルシステムに存在すれば、
/linuxrc
を UID 0 (すなわち、root) の権限で実行する。
(/linuxrc
ファイルは実行可能パーミッションが与えられていなければならない。
/linuxrc
は正当な実行ファイルであればよく、シェルスクリプトでも構わない。)
- 6.
-
/linuxrc
が実行されない、または、
/linuxrc
の実行が終了した時は、通常時ルートファイルシステムがマウントされる。
(/linuxrc
を終了した時、何らかのファイルシステムが初期ルートファイルシステム上に
マウントされている場合のカーネルの動作は
決められていない (不定である)。
現在のカーネルがどのように動作するかは、
注意
のセクションを参照のこと。)
- 7.
-
通常時ルートファイルシステムに
ディレクトリ
/initrd
があれば、
/dev/ram0
デバイスは
/
から
/initrd
に移動される。
/initrd
ディレクトリが存在しない場合は、
/dev/ram0
はアンマウントされる。
(/
が
/initrd
に移動された場合には、
/dev/ram0
はアンマウントされず、その結果、
/dev/ram0
で走り始めたプロセスはそのまま残る事ができる。
もし、
/initrd
ディレクトリが通常時ルートファイルシステムに存在せず、
/linuxrc
が終了した時に
/dev/ram0
上で実行された、なんらかのプロセスが走り続けていた場合の
カーネルの動作は
決められていない (不定である)。
現在のカーネルが、この時どのような動作をするかについては、
注意
を参照のこと。)
- 8.
-
普通のブートシーケンス (例えば、
/sbin/init
の起動) が通常時ルートファイルシステム上で行われる。
オプション
initrd
を用いる場合に、カーネルのブートアップ操作に影響を与える
ブートローダ・オプションは次のようなものがある、
- initrd=filename
-
/dev/initrd
の内容としてロードするファイルを指定する。
LOADLIN
では、これはコマンドラインオプションである。
LILO
では、
LILO
の設定ファイル
/etc/lilo.config
内でコマンドとして使用しなければならない。
このオプションで指定されるファイルは、多くの場合 gzip 圧縮された
ファイルシステムイメージである。
- noinitrd
-
この起動時オプションは二段階の起動操作を無効にする。
カーネルは
/dev/initrd
が初期化されていない場合と同様の、通常のブートアップ動作を行う。
このオプションを用いると、ブートローダによってメモリ上にロードされた
/dev/initrd
の内容はそのまま保存される。
つまり、このオプションを用いることによって、
/dev/initrd
の内容を (ブート以外の目的に) 利用することが可能になる。また、その内容は
ファイルシステムイメージに限定されない。
しかし、
/dev/initrd
デバイスは読みだしのみ可能であり、システムの起動後 1 度しか読み出す事
ができない。
- root=device-name
-
通常時ルートファイルシステムとして使われるデバイスを指定する。
LOADLIN
では、これはコマンドラインオプションである。
LILO
ではコマンドラインオプション、または、
LILO
の設定ファイルである
/etc/lilo.config
のオプションラインとして使用する。
このオプションで指定されるデバイスは、適切なルートファイルシステムとし
てマウント可能なデバイスでなければならない。
通常時ルートファイルシステムの変更
デフォルトでは、カーネルの設定
(例えば、
rdev(8)
を用いてカーネルファイル内にセットされたもの、または、コンパイル時にカー
ネルファイル内に埋め込まれたもの)、
または、ブートローダのオプション設定によって指定されたものが通常時ルー
トファイルシステムとして使われる。
NFS マウントされた通常時ルートファイルシステムを利用する場合、
nfs_root_name
と
nfs_root_addrs
ブートオプションを使って NFS の設定を与えなければならない。
NFS マウントされたルート (ファイルシステム) についての
より詳しい情報は、カーネルのドキュメントファイル
nfsroot.txt
を参照のこと。
ルートファイルシステムの設定についてのより詳しい情報は、
LILO
と
LOADLIN
のドキュメントを参照のこと。
また、
/linuxrc
を用いる事によっても通常時ルートファイルシステムデバイスを変更すること
ができる。
/linuxrc
を用いて、通常時ルートデバイスを変更するためには、
/proc
がマウントされていなければならない。
/proc
をマウントした後で、
/linuxrc
は proc ファイル
/proc/sys/kernel/real-root-dev,
/proc/sys/kernel/nfs-root-name,
/proc/sys/kernel/nfs-root-addrs
に書き込みを行い、通常時ルートデバイスを変更する。
(NFS ではない) 物理的なルートデバイスの場合、
/linuxrc
が新しいルートファイルシステムのデバイス番号を
/proc/sys/kernel/real-root-dev
に書き込むことで、ルートデバイスが変更される。
NFS ルートファイルシステムの場合、
/linuxrc
が NFS の設定を
/proc/sys/kernel/nfs-root-name
と
/proc/sys/kernel/nfs-root-addrs
に書き込み、それから
/proc/sys/kernel/real-root-dev
に (疑似 NFS デバイスナンバーである) 0xff を書き込むことで、
ルートデバイスが変更される。
例えば、次のシェルコマンドラインにより、通常時ルートデバイスを
/dev/hdb1
に変更できるだろう:
echo 0x365 >/proc/sys/kernel/real-root-dev
また、NFS の場合、次のようなシェルコマンドラインにより、
ローカルネットワークの 193.8.232.2 という IP アドレスを持つ NFS サーバの
NFS ディレクトリ
/var/nfsroot
を 193.8.232.7 という IP アドレスを持つ idefix という名前のシ
ステムの通常時ルートデバイスとしてマウントするように変更できるだろう:
echo /var/nfsroot >/proc/sys/kernel/nfs-root-name
echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \
>/proc/sys/kernel/nfs-root-addrs
echo 255 >/proc/sys/kernel/real-root-dev
注意:
ルートファイルシステムを変更するために
/proc/sys/kernel/real-root-dev
を使うのは以前の方法である。
ルートファイルシステムを変更する新しい方法についての情報は、
カーネルソースに含まれる
Documentation/initrd.txt
ファイルや、
pivot_root(2)
や
pivot_root(8)
を参照してほしい。
使い方
initrd
が実装された主な目的は、システムインストール時に、モジュール化されたカー
ネルの設定を可能にすることであった。
次のような流れのシステムインストールが可能になる:
- 1.
-
ローダプログラムは、フロッピーやその他のメディアから、
最小限のカーネル (例えば、
/dev/ram, /dev/initrd,
ext2 ファイルシステムのみのサポートしたカーネル) をブートし、
gzip 圧縮された初期ファイルシステムイメージを
/dev/initrd
にロードする。
- 2.
-
実行ファイル
/linuxrc
は、(1) 通常時ルートファイルシステムのマウントに何が必要か
(すなわち、デバイスタイプ、デバイスドライバ、ファイルシステム)、
(2) 配布メディアに何が必要か (例えば、CD-ROM, ネットワーク、テープなど)
を決定する。決定は、ユーザへの問い合わせ、自動検出、あるいはその両者の
方法を組み合わせて行われる。
- 3.
-
実行ファイル
/linuxrc
は、初期ルートファイルシステムから必要なモジュールをロードする。
- 4.
-
実行ファイル
/linuxrc
は、ルートファイルシステムを作成し、配置する (この段階では、通常時ルー
トファイルシステムは完全なシステムである必要はない)。
- 5.
-
実行ファイル
/linuxrc
は、
/proc/sys/kernel/real-root-dev
を設定し、
/proc、
マウントされている通常時ファイルシステム及びその他のファイルシステム
をアンマウントし、
実行を終了する。
- 6.
-
次に、カーネルは、通常時ルートファイルシステムをマウントする。
- 7.
-
この段階で、ファイルシステムは全く変更が行われていない状態で、
アクセスできる状態になる。
また、ブートローダをインストールすることができる。
- 8.
-
ブートローダを設定し、システム起動時に使用されるカーネルモジュールのセッ
トを含んだファイルシステムを
/dev/initrd
にロードする (例えば、
/dev/ram0
デバイスの内容を修正し、アンマウントする。最後に、
/dev/ram0
のイメージをファイルに書き出す)。
- 9.
-
これで、システムがブート可能になる。この後、さらにその他のインストール
の作業を実行できる。
上記の動作での
/dev/initrd
の役割のキーポイントは、初期カーネルの選択や大きなジェネリックカーネル、
カーネルの再構築なしに、通常のシステム操作で再利用可能な設定データを利
用することにある。
2 番目のケースは、一つの管理上のネットワークにおいて、異なる設定のハー
ドウェアのシステム上で Linux を動作させるためのインストールを行う場合
である。
このようなケースの場合、ごく小数のカーネルのセット (理想的にはたった一
つのカーネル) のみを利用し、システム固有の設定情報は可能な限り小さくす
ることが望ましいであろう。
この場合、全ての必要なモジュールが入った共通ファイルを作成する。
そして、
/linuxrc
ファイル、または、
/linuxrc
から実行されるファイルのみを異なったものにしておく。
3 番目のケースは、より便利な復旧用ディスクを作る場合である。
ルートファイルシステムのパーティションの位置といった情報は
ブート時に必要ないため、
/dev/initrd
からロードされたシステムは、
必要な正常性チェックを行った後で、ユーザへの問い合わせや自動検出
(もしくはその両方) を行うことができるようになる。
(他にもたくさん例があるだろうが) 最後の例としては、
initrd
を利用すると、CD-ROM 上の Linux ディストリビューションを
より簡単に CD-ROM からインストールすることができるだろう。
ディストリビューションは、
LOADLIN
を使って、フロッピーを全く利用せずに CD-ROM から
/dev/initrd
を直接ロードすることができる。
また、
LILO
ブートフロッピーを使ってブートを行い、
/dev/initrd
を通して CD-ROM からより大きな RAM ディスクを起動することもできる。
設定
/dev/initrd
は、メジャー番号 1、マイナー番号 250 が割り当てられた
読み込み専用のブロックデバイスである。
普通、
/dev/initrd
の所有者は
root.disk
であり、モードは 400 (root のみが読み出し可能) である。
もし、Linux システムに作成済の
/dev/initrd
ファイルがなかった場合、以下のコマンドで作成することができる:
mknod -m 400 /dev/initrd b 1 250
chown root:disk /dev/initrd
また、
/dev/initrd
を使用するためには、
"RAM disk" と "Initial RAM disk" の両方の機能が
Linux カーネルに直接組み込まれていなければならない
(例えば、カーネルのコンパイル時の設定で
CONFIG_BLK_DEV_RAM=y
かつ
CONFIG_BLK_DEV_INITRD=y
とする)。
/dev/initrd
を使用する場合には、RAM ディスクドライバをモジュールとして
ロードすることはできない。
ファイル
/dev/initrd
/dev/ram0
/linuxrc
/initrd
注意
- 1.
-
現在のカーネルでは、
/dev/ram0
が
/
から
/initrd
に移動された際に、移動時にマウントされていたファイルシステムは、
その後も継続的にアクセス可能である。しかし、
/proc/mounts
のエントリは更新されない。
- 2.
-
現在のカーネルでは、ディレクトリ
/initrd
が存在しない場合、
/dev/ram0
を何らかのプロセスが利用していたり、何らかのファイルシステムが
/dev/ram0
上にマウントされていると、
/dev/ram0
は完全にはアンマウントされない。
/dev/ram0
が、完全にアンマウントされなければ、
/dev/ram0
はメモリ上に残ってしまうはずである。
- 3.
-
/dev/initrd
の利用者は、上記の注意事項で述べた動作に依存しないようにすべきである。
これらの動作は Linux カーネルの将来のバージョンでは変更される
かもしれないからだ。
関連項目
chown(1),
mknod(1),
ram(4),
freeramdisk(8),
rdev(8)
カーネルソースパッケージに含まれるドキュメントファイル
initrd.txt、
LILO のドキュメント、LOADLIN のドキュメント、SYSLINUX のドキュメント。
Index
- 名前
-
- 説明
-
- ブートアップ作業
-
- オプション
-
- 通常時ルートファイルシステムの変更
-
- 使い方
-
- 設定
-
- ファイル
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:46 GMT, November 19, 2007