マウント準備
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/25 14:29 UTC 版)
一部のLinuxディストリビューションでは、特定のコンピュータでのブートに必要なものだけ(ATA、SCSI、ファイルシステムのカーネルモジュールなど)を格納したカスタマイズしたinitrdイメージを生成する。その場合、ルートファイルシステムの場所や種類を実行時に判断するのではなく、initrdイメージ内に決めうちで書き込んでおくことが多い。 他のディストリビューション(FedoraやUbuntuなど)はより汎用的なinitrdイメージを生成する。その場合、ルートファイルシステムのデバイス名(またはUUID)のみを使い、他の必要な情報はブート時に発見しなければならない。したがって、ルートファイルシステムをマウントするまでに以下のようなタスクが実行される。 ブート処理が依存している任意のハードウェアドライバをロードしなければならない。通常、一般的なストレージ機器用カーネルモジュールをまとめてinitrdに格納しておき、ホットプラグエージェントを起動して、検出したハードウェアにマッチするモジュールを取出す。 ブートスプラッシュを表示するシステムでは、画面表示関連ハードウェアを初期化し、ユーザー空間のヘルパーを使ってブート処理と同期しつつアニメーションを描画させる。 ルートファイルシステムがNFSの場合、以下を行う。主要なネットワークインタフェースを起動させる。 DHCPクライアントを呼び出し、必要な情報を得る。 その情報からNFS共有の名前とNFSサーバのアドレスを取出す。 NFS共有をマウントする。 ルートファイルシステムがソフトウェアRAIDデバイスの場合、RAIDボリュームがどのデバイスにまたがっているかを知る手段がない。通常はMDユーティリティを呼び出し、全ブロックデバイスをスキャンし、必要なデバイスをオンラインにする。 ルートファイルシステムが論理ボリュームの場合、LVMユーティリティを呼び出してスキャンし、ルートファイルシステムを格納しているボリュームグループを活性化させる。 ルートファイルシステムが暗号化されたブロックデバイスにある場合、ヘルパースクリプトを呼び出し、ユーザーにパスフレーズを入力させるかハードウェアトークン(ICカードやUSBセキュリティドングル)を挿入させる。 デバイスマッパーにより復号対象を生成する。 ルートファイルシステムをマウントした状態では安全に実施できない保守タスクがあれば、ここで実行する。 ルートファイルシステムを読み込み専用でマウントする。 動作し続ける必要のあるプロセス(ブートスプラッシュ用ヘルパーやそのコマンドFIFO)を新たにマウントしたルートファイルシステムに移行させる。 ルートファイルシステムを普通にルート(/)にマウントすると、初期化用ルートファイルシステム上のスクリプトなどを実行していたプロセスがうまくクリーンアップして終了できないため、次のような配慮が必要となる。 initrd では、真のルートファイルシステムは一時的なマウントポイントにマウントし、このためだけに導入された pivot_root(8) を使って両者を入れ替える。こうすると初期化用ルートファイルシステムは新たなマウントポイント(/initrd など)に残るので、後でこれをアンマウントし initrd に使っていたメモリを解放することができる。 initramfs では、初期化用ルートファイルシステムを pivot_root で移動させることができない。そのため、swich_root(8)コマンドにより単にその中身を空にし、真のルートファイルシステムを上書きするようにマウントする。 初期化用ルートファイルシステムには /linuxrc や /init といったシェルスクリプトがあるため、最小限のシェル(通常、/bin/ash)も含まれているし、他にも基本的なユーティリティ群(BusyBoxツールキットにあるようなもの)も格納されている。容量を節約するため、それらのシェルやユーティリティやライブラリ群は容量最適化オプション(gcc の "-Os" フラグなど)付きでコンパイルされ、klibcのような(このために開発された)標準Cライブラリの最小版とリンクされている。
※この「マウント準備」の解説は、「initrd」の解説の一部です。
「マウント準備」を含む「initrd」の記事については、「initrd」の概要を参照ください。
- マウント準備のページへのリンク