ivot_root中的old_root概念是什么?

ivot_root中的old_root概念是什么?

man 2 pivot_root

pivot_root()将当前进程的根文件系统移动到目录 _put_old_ 并使 _new_root_ 成为当前进程的新根文件系统。

int pivot_root(const char *new_root, const char *put_old);

在阅读本文时,我有以下疑问

  1. _put_old_有什么用?它仅由内核用于其内部目的还是我们对此有任何用处?
  2. 为什么当前文件系统应该移动到 _put_old_ 目录?
  3. 为什么_put_old_目录应该在_new_root_目录下?

官方文档清楚地解释了如果我们想利用系统调用我们想要做什么,pivot_root但我觉得文档没有清楚地解释为什么它要执行这些规则以及它在幕后做了什么。

有知道这个的好心人帮我解决一下这个问题。

答案1

pivot_root在系统启动时使用。它的引入是为了促进 RAM 上的初始 Linux 系统和最终根文件系统之间的过渡。

当linux启动时,内核和初始根文件系统被引导加载程序加载到内存中。引导加载程序(存储在 ROM 中)是一个小程序,它将 Linux 系统加载到 RAM 中,然后执行内核。

在引导序列结束时,RAM 文件系统被安装为初始根文件系统。有两种方案可以做到这一点,initrd并且initramfs。两种方法都从初始根文件系统启动内核。

内核必须执行多项作业才能创建最终的根文件系统。有不同的技术用于此(取决于 Linux 发行版),但本质上内核加载访问最终根文件系统所需的硬件驱动程序。

例如,如果根文件系统位于 NFS 上,则内核必须首先设置网络,获取访问 NFS 共享的信息,然后挂载 NFS 共享。

一旦新的根目录可访问,新的根目录就会安装在临时安装点并使用 旋转到位pivot_root。脚本在短时间内可能仍需要原始根目录来完成任何最终的清理任务。一旦任何清理完成,初始根系统就会被卸载以释放内存。

欲了解更多详情,请参阅初始Linux ramdisk

相关内容