vvi*_*ilp 13 linux chroot docker
我想测试将pivot_root
当前进程的根文件系统移动到目录put_old
并创建new_root
新的根文件系统的命令。
但我总是收到以下错误:
pivot_root: failed to change root from .' toold-root/': Invalid argument
Run Code Online (Sandbox Code Playgroud)
我使用 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 .' toold-root/': Invalid argument
Run Code Online (Sandbox Code Playgroud)
我也尝试调用 linux 函数pivot_root("/chroot_test", "/chroot_test/old-root")
;得到同样的错误。
关于这个的任何想法?
我也尝试pivot_root
在 Docker 中进行测试。我将这个 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
Run Code Online (Sandbox Code Playgroud)
您确定它arch-root
位于可以挂载和卸载的单独文件系统上吗?
pivot_root
以及最新的switch_root
,通过处理内核中已挂载文件系统的信息来工作。
新的根文件系统必须是文件系统的“根”,不能通过“.”。作为新的根除非“。” 是挂载文件系统的根目录。
我相信,如果您想pivot_root
从当前设置中尝试(假设 arch-root 是一个子目录而不是根目录),最简单的方法是创建一个tmpfs
要切换到的文件系统,并在那里复制所需的内容。
沿着这些路线的东西可能会让你开始:(调整 500M 以适应du -sh arch-root
)
mkdir /ramroot mount -n -t tmpfs -o size=500M 无 /ramroot cd arch-root #(包含根文件系统内容) 找 。-depth -xdev -print | cpio -pd --quiet /ramroot cd /ramroot mkdir oldroot 枢轴根。老根 执行 chroot 。垃圾箱/sh
从手册页来看,我相信这是您的问题:
The following restrictions apply to new_root and put_old:
- They must be directories.
- new_root and put_old must not be on the same file system as the current
root.
- put_old must be underneath new_root, that is, adding a nonzero number of
/.. to the string pointed to by put_old must yield the same directory as
new_root.
- No other file system may be mounted on put_old.
Run Code Online (Sandbox Code Playgroud)
根据上面的内容,文件系统都不put_old
应该new_root
与 驻留在同一文件系统上current_root
。
归档时间: |
|
查看次数: |
14444 次 |
最近记录: |