C语言 如何正确使用pivot_root(2)?

e4eetjau  于 2023-03-29  发布在  其他
关注(0)|答案(1)|浏览(90)

我正在做一个自我研究项目(我试图创建一个简单的容器)。
我不知道如何正确使用pivot_root(2)
我做了什么:1.

chdir("/newroot"); 
/*chroot(".");*/ 
pivot_root(".", "."); // errno: EINVAL.

1.到目前为止,我使用chroot()作为mnt名称空间,我已经注解掉了chroot(),因为它是EINVAL errno的一部分。
1.我尝试将printk添加到系统调用中,但没有按计划进行。

chdir("/newroot");
pivot_root(".", "putOld"); errno: EINVAL
mount --make-private --bind /newroot /newroot
pxy2qtax

pxy2qtax1#

The documentationpivot_root()的参数提出了几个要求。最有可能给你带来麻烦的是:

  • new_rootput_old不能与当前根目录位于同一挂载上。

[...]

  • new_root必须是一个挂载点的路径,但不能是“/"。一个还不是挂载点的路径可以通过绑定挂载路径到自身来转换为挂载点。
  • new_root的父挂载和当前根目录的父挂载的传播类型不能为MS_SHARED

有关挂载传播类型的讨论,请参见mount_namespaces(7),并特别注意注解部分。
还要注意的是,为new_rootput_old指定相同的路径对我来说没有多大意义。我认为就文件系统视图而言,这实际上是一个无操作,因为您直接将原始文件系统根安装在新文件系统根的顶部。我希望put_old在新根下指定一个不同的目录。

相关问题