Linuxの備忘録とか・・・(目次へ)Linuxの備忘録とか・・・(目次へ)pivot_rootsys_pivot_rootはCD-ROM起動のシステムを作成するとの説明で、システムルートファイルシステムを差し替える。理解していましたが、正しくはカレントプロセスのrootのファイルシステムを差し替える。chrootで変更しなければ、プロセスのrootは、システムルートファイルシステム故、先の解釈で実用上は問題なかった。new_rootが差し替えるファイルシステムで、put_oldが差し替わる元のファイルシステムで、差し替わるファイルシステムは、current->fs->rootmntです。detach_mnt()でcurrent->fs->rootmntとnew_rootをumountし、attach_mnt()でuser_nd.mntをput_oldに、new_nd.mntをcurrent->fs->rootにmountします。pivot_rootが動作するには、以下の条件が必要です。・new_root(差し替え先)は、カレントプロセスのネームスペース配下。・カレントプロセスのrootは、マウントポイント。(マウントポイントでないパスをchrootすると、pivotできません。)・new_roo/put_oldのファイルシステムは、current->fs->rootmntのファイルシステムでない。(同じファイルシステムを差し替える事で回帰となります。)・new_rootはマウントポイント・put_oldはnew_root配下で管理されている。(pivot後に、元のファイルシステムを参照できません。nd->dentry->d_mounted++;}chroot_fs_refs()は、do_each_thread()でinit_taskをヘッドとしてリストされている全てのプロセスのcwd/rootが、pivotするマウント先パス(カレントプロセスのroot)と同じなら、差し替えるファイルシステムのマウント先パスに更新し、他のプロセスにもpivotが自然な流れで反映されます。ないなら他のプロセスのcwd/rootはそのままです。pivotはchrootと異なりdentry構造を変更しません。chrootはdentryの検索開始位置を変更しますが、pivotは検索開始位置を変更するのでなく、ファイルシステムそのものを変更するので、変更されたファイルシステムがどこにマウントされようと、そのファイルシステム内で相対パスで検索するには問題ありません。read_unlock(&tasklist_lock);}サンプルramfsとカレントプロセスのrootのファイルシステムを差し替えます。カレントプロセスのrootはシステムルートファイルシステム故、結果的にシステムルートファイルシステムを差し替えることになります。/ramdisk/old-root/dllはld-linux.so.2でコマンドのdllがクリンクされるため、/old-root配下のパス構造で、実行するコマンドは、ld-linux.so.2の引数として起動する必要があり、ld-linux.so.2が参照するdllのパスをLD_LIBRARY_PATHに設定します。カレントパスはpivot前の同じですが、rootパスは/ramdiskに更新され、/old-rootには、元のファイルシステムがマウントされています。var元の復帰します。ノースAdsense広告情報が設定されていません。