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を実行します)。