initramfsはルートファイルシステムをどのようにマウントしますか?

initramfsはルートファイルシステムをどのようにマウントしますか?

iniramfsは、ルートファイルシステムをマウントし、制御をsystemdに渡す小さなオペレーティングシステムのようなものです。それでは、initramfsは内部的にどのように機能しますか? Linuxでルートをマウントするスクリプトはありますか?

答え1

initrd / initramfs(歴史的な違いのみ)を抽出してインストールした後、script / initが実行されます。ほとんどの場合、initramfsのモジュールを介してのみ実際のルートをインストールします。

その後、ルートを新しいパーティションに回転/切り替える必要があります。これはpid 1でのみ可能です。

以下は最小限の/initスクリプトです:

mkdir /newroot
mount /dev/sda2 /newroot
mount --move /sys /newroot
mount --move /dev /newroot
mount --move /proc /newroot

switch_root /newroot /bin/bash

(または通常の連続のためには/ sbin / init)

問題は、必要なモジュールが組み込まれていないと、カーネルが/ dev / sda2をマウントできないことです。 sda2にモジュールを置いても役に立ちません。卵と鶏の問題です。

したがって、カーネルはモジュールとスクリプトを含むルートファイルシステムを含むcpioアーカイブを取得します。カーネルは単に/ initに渡し、独自の起動を完了します。


Gentooリンクは次から始まります:

initramfsはルートファイルシステムですカーネルに組み込まれている...

それはどういう意味ですか?


以下は最小限のカーネルコマンドラインです:

vmlinuz root=/dev/sdaX

ブートローダに "vmlinuz" カーネルをロードし、カーネルに /dev/sdaX をマウントするように指示します。

これ:

vmlinuz initrd=initramfs.img root=/dev/sdaX

ブートローダにカーネルがルートとして見つけ、マウントするinitrdをロードし(デフォルト)、/initスクリプトに/ dev / sdaXに回転/切り替えるように指示します(その後、デフォルトの/ sbin / initを実行します)。

関連情報