ivot_root(2) 导致系统崩溃

ivot_root(2) 导致系统崩溃

我正在尝试将进程的根更改为安装在 /tmp/mount_dir 的新文件系统,并且我在其中创建了另一个目录 /tmp/mount_dir/inner_mount_dir ,并且根据手册页ivot_root(2) 没有这个系统调用的 glibc 包装器所以我自己做了

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

  return(syscall(SYS_pivot_root, new_root, put_old));

}

我在创建手册页指定的两个嵌套目录后在此代码中调用它

fprintf(stderr,"-->Changing the process's root...");
if(pivot_root(mount_dir, inner_mount_dir)){
  fprintf(stderr,"Failed..%m\n");
  return -1;
}else{
  fprintf(stderr,"Success\n");
}

系统调用返回成功,但问题是系统进入崩溃状态,首先 gnome dash 中的所有图标都消失了,我根本无法与系统交互(系统冻结我只能首先更改窗口然后一切都终止),屏幕变成空白黑屏,左上角有一个“-”,就像系统正在关闭一样,但会冻结在该状态,直到我强制关闭。

答案1

hub_root() 作用于命名空间。

要仅影响您的进程(及其子进程),请首先输入新的挂载命名空间。并且您需要确保pivot_root操作不会传播回原始命名空间,例如通过使用mount --make-rslave /.

如何使用 Linux 命名空间执行 chroot?

相关内容