GNU/Linux >> Linux の 問題 >  >> Linux

Linux – Switch_rootではなくPivot_rootをいつ使用しますか?

nfsではなくcephを介してシステムをネットブートするために、Linuxの初期化プロセスをよりよく理解したいと思っています。

その過程で、ルートを切り替える2つの形式に出くわしました。 1つはswitch_rootと呼ばれ、もう1つはpivot_rootと呼ばれます。これらのスクリプトは、pxeブートプロセスを使用してtftp経由で取得されたメモリ内ファイルシステム(initramfs)から実行されます。

いつ使用しますか?ルートに配置されたいくつかのinitスクリプトで両方が使用されているのを見てきました。

承認された回答:

ここで素晴らしい説明を見つけました。ただし、回答で理解した内容の短い形式で入力してみましょう。

短いバージョン

  1. システムの起動中は、初期のユーザースペースが必要です。
    initramfsまたはinitrdのいずれかを使用して実現できます。
  2. initrd 実際のRAMディスクにロードされます ファイルシステム
  3. initramfs ない ファイルシステム
  4. initrdの場合 pivot_root initramfsに使用されます switch_root 使用されます。

長いバージョン

さて、私が上に置いたものの詳細な説明に。

initramfsとinitrdはどちらも同じ目的を果たしますが、
2つの違いがあります。最も明らかな違いは、initrdが
RAMディスクにロードされることです。これは、RAMディスクにマウントされた実際のファイルシステム(通常は
ext2)で構成されています。一方、initramfsは
ファイルシステムではありません。これは、tmpfsに解凍される(圧縮された)cpioアーカイブ(タイプ
newc)です。これには、
initramfsをもう少し最適化し、カーネルブートプロセスのinitrdよりも少し早く
ロードできるようにするという副作用があります。また、カーネルは
事前定義されたRAMディスクサイズに依存するのではなく、
tmpfsのサイズを実際にロードされるものに適合させることができるため、
メモリ内のinitramfsのサイズは小さくなります。
使用されたRAMをクリーンアップすることもできますが、ramdiskは使用され続ける傾向があります(
ピボットルート実装の詳細のため)。

また、別の副作用の違いがあります。ルートデバイス(および
それに切り替える)の処理方法です。 initrdはramにアンパックされた実際のファイルシステムであるため
、ルートデバイスは実際にはramdiskである必要があります。
initramfsの場合、カーネル「rootfs」がtmpfsになり、
initramfsがアンパックされます(カーネルがinitramfsをロードする場合、
そうでない場合、rootfsは単にファイルシステムはroot=
カーネルブートパラメータを介して指定されます)が、この暫定rootfsは
root =ブートパラメータとして指定されるべきではありません(そして
そうする方法はありません、デバイスが接続されていないため)。これは、
initramfsを使用する場合でも、
実際のルートデバイスをカーネルに渡すことができることを意味します。 initrdを使用すると、実際のルート
デバイスが自分で何であるかを処理する必要があります。また、initrdを使用する「実際の」ルートデバイスは
ramdiskであるため、カーネルは実際にルートデバイスを一方の実際のデバイス(ramdisk)からもう一方(実際のルート)に切り替える必要があります。
initramfsの場合、initramfsスペース(tmpfs)は実際のデバイスではないため、
カーネルは実際のデバイスを切り替えません。したがって、コマンド
ivot_rootはinitrdで使用されますが、initramfsには別のコマンドを
使用する必要があります。 Busyboxはこれを実現するためにswitch_rootを提供しますが、
klibcはnew_rootを提供します。


Linux
  1. Linuxを毎日使う11の驚くべき方法

  2. どのオープンソースバックアップソリューションを使用していますか?

  3. どのLinuxターミナルコマンドを最もよく使用しますか?

  1. Linuxファイルシステムの種類の説明、どちらを使用する必要があるか

  2. Linux上のアンチウイルス:実際に使用する必要がありますか?使用する場合、いつ必要ですか?

  3. Linuxデスクトップで使用できる最高のTorrentクライアント

  1. Linuxコンテナを最初に使用したワークロードはどれですか?

  2. Linuxでいつpthread_exit()を使用し、いつpthread_join()を使用するのですか?

  3. Linux の cp コマンドで正規表現をどのように使用しますか?