版权所有 © 2014 tutorialspoint
pivot_root() 的典型用法是在系统启动期间,系统挂载一个临时根文件系统(例如 initrd),然后挂载真正的根文件系统,并最终将后者转换为所有相关进程或线程的当前根。
pivot_root() 可能会或可能不会更改使用旧根目录的任何进程或线程的当前根和当前工作目录 (cwd)。pivot_root() 的调用者必须确保具有根或 cwd 在旧根上的进程在任何情况下都能正常运行。确保这一点的简单方法是在调用 pivot_root() 之前将其根和 cwd 更改为new_root。
上面一段话有意含糊不清,因为pivot_root() 的实现将来可能会发生变化。在撰写本文时,如果进程或线程的根或 cwd 指向旧根目录,则pivot_root() 会将它们的根和 cwd 更改为new_root。这是为了防止内核线程即使它们以任何方式从未访问过文件系统,也仍然使用其根和 cwd 使旧根目录保持繁忙状态。将来,可能存在一种机制,允许内核线程显式放弃对文件系统的任何访问,这样就可以从pivot_root() 中删除这种相当侵入性的机制。
请注意,这也适用于当前进程:pivot_root() 可能会或可能不会影响其 cwd。因此,建议在pivot_root() 之后立即调用chdir("/")。
以下限制适用于new_root 和put_old
如果当前根不是挂载点(例如,在chroot(2) 或pivot_root() 之后,另请参见下文),则不是旧根目录,而是该文件系统的挂载点将挂载在put_old 上。
new_root 不必是挂载点。在这种情况下,/proc/mounts 将显示包含new_root 的文件系统的挂载点作为根 (/)。
pivot_root() 的一些更模糊的用法可能会很快导致疯狂。
chdir (2)
chroot (2)
stat (2)
pivot_root (8)
广告