次の行を実行するGRUBを考えてみましょう。
kernel /vmlinuz root=/dev/sda1 ro
initrd /initrd
Linuxカーネルは起動時に/dev/sda1
デバイスノードをどのように見つけますか?
initrd/initramfs イメージには、ストレージへのアクセスを許可するためにメモリーにロードされるストレージ (など) デバイス用のモジュールが含まれていることがわかります。私を悩ませるのは、root=/dev/sda1
カーネルがカーネルパラメータをどれだけ正確に解析するかです。
initrd / initramfsの(または)スクリプトは/init
ディレクトリを作成し、その中にデバイスノードを作成しますか?それとも、「注」と「負」の数字がカーネルにハードコードされていますか?/linuxrc
/dev
/dev/sda1
/dev/sda1
ベストアンサー1
initramfsがある場合、カーネルはinitramfsを解凍してインストールしてから/init
実行されます。他のすべては/init
実行可能ファイルによって処理されます。これはまた、カーネルがブートパラメータroot
で指定されたデバイスをインストールしないことを意味します。
他のディストリビューションは異なるinitramfsフレームワークを使用します。例えばデラクールFedoraの場合、またはinitramfsのツールDebian の場合。最も一般的な解決策はudev
、mdev
または同様のものを使用することですdevtmpfs
。一部はただ使用することができますMAKEDEV
静的レイアウトを作成するか、デバイスファイルを画像に統合します。
initramfsなしで起動すると、カーネルは、たとえば既知のメジャー/マイナー番号を持つデバイスからのみ起動できますが、/dev/sda1
lvmデバイスでは起動できません。