回答:
ここで素晴らしい説明を見つけました。しかし、私が答えで理解したものの短い形式を入れてみてください。
短いバージョン
pivot_root
使用し、ためにinitramfsが switch_root
使用されています。長いバージョン
さて、私が上に置いたものの詳細な説明に。
initramfsとinitrdは同じ目的を果たしますが、2つの違いがあります。最も明らかな違いは、initrdがRAMディスクにロードされることです。ramdiskにマウントされている実際のファイルシステム(通常はext2)で構成されています。一方、initramfsはファイルシステムではありません。これは、(圧縮された)cpioアーカイブ(newcタイプ)であり、tmpfsに解凍されます。これには、initramfsをもう少し最適化し、カーネルのブートプロセスでinitrdよりも少し早くロードできるという副作用があります。また、メモリ内のinitramfsのサイズは小さくなります。これは、カーネルが事前に定義されたRAMディスクサイズに依存するのではなく、実際にロードされるものにtmpfsのサイズを適合できるためです。
もう1つの副作用の違いもあります。ルートデバイス(およびその切り替え)の処理方法です。initrdはramに展開された実際のファイルシステムであるため、ルートデバイスは実際にはramdiskでなければなりません。initramfsには、initramfsが展開されるtmpfsになるカーネル「rootfs」があります(カーネルがinitramfsをロードする場合;そうでない場合、rootfsは単にroot =カーネルブートパラメーターで指定されたファイルシステムです)この暫定rootfsは、root =ブートパラメーターとして指定しないでください(デバイスが接続されていないため、これを行う方法はありません)。これは、initramfsを使用する場合でも、実際のルートデバイスをカーネルに渡すことができることを意味します。initrdでは、実際のルートデバイスを自分で処理する必要があります。また、「本物の」initrdを持つルートデバイスはramdiskです。カーネルは、実際のデバイス(ramdisk)から別のデバイス(実際のルート)にルートデバイスを実際に動かす必要があります。initramfsの場合、initramfsスペース(tmpfs)は実デバイスではないため、カーネルは実デバイスを切り替えません。したがって、コマンドpivot_rootはinitrdとともに使用されますが、initramfsには別のコマンドを使用する必要があります。Busyboxはこれを実現するためにswitch_rootを提供しますが、klibcはnew_rootを提供します。initramfsには別のコマンドを使用する必要があります。Busyboxはこれを実現するためにswitch_rootを提供しますが、klibcはnew_rootを提供します。initramfsには別のコマンドを使用する必要があります。Busyboxはこれを実現するためにswitch_rootを提供しますが、klibcはnew_rootを提供します。
/
ます。したがって、私の理解では、それは任意のパスであり、実際の「ディスク」とは関係ありません。
pivot_root
は以前initramfs に使用していましswitch_root
たが、当時は存在しませんでした。switch_root
便利な方法であると思われるpivot_root
いくつかのより多くのクリーンアップとも移動している/proc
/sys
と/dev
などだけでなく、ルート自体