如何测试pivot_root?

如何测试pivot_root?

我想测试pivot_root命令行,它将当前进程的根文件系统移动到目录 put_old 并使 new_root 成为新的根文件系统。http://man7.org/linux/man-pages/man8/pivot_root.8.html

但我总是得到

pivot_root: failed to change root from `.' to `old-root/': Invalid argument

我使用 fedora 作为基本根,我的主文件夹中有一个 Archlinux

[root@localhost arch-root]# ls
bin  boot  dev  etc  home  lib  lib64  mnt  old-root  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

[root@localhost arch-root]# pivot_root . old-root/ 
pivot_root: failed to change root from `.' to `old-root/': Invalid argument

我也尝试调用 linux 函数pivot_root("/chroot_test", "/chroot_test/old-root"); 得到同样的错误。

对此有什么想法吗?

更新1:

我也尝试在 Docker 中进行测试pivot_root

我将这个 arch-root 安装到 Docker 容器中。

但出现以下错误:Operation not permitted

root@00d871ce892b:/# cd test_root/
root@00d871ce892b:/test_root# ls
bin  boot  dev  etc  home  lib  lib64  mnt  old-root  opt  proc  root  run  sbin  srv     sys  test_pivot_root  test_pivot_root.c   tmp  usr  var
root@00d871ce892b:/test_root# pivot_root . tmp/
pivot_root: Operation not permitted

答案1

pivot_root受到许多重要限制;其中之一是新根必须位于与当前根不同的文件系统上。对于您而言,除非您已在 上安装文件系统/home,否则您的 Arch 系统很可能安装在与当前根相同的文件系统上。

但很可能你并不想要pivot_root()。它主要用于系统启动期间,并且会有一些真的很奇怪在运行的系统上使用时的效果。您可能想改用chroot它,因为这不会影响系统的其余部分,并且不受pivot_root.尝试一下,例如:

chroot arch-root /bin/bash

答案2

问题作者提出的解决方案:

我已经发现解决方案:

使用 --privileged=true 运行 docker

所以我们可以在docker容器中测试pivot_root

相关内容