我想测试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