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
。
このアーチルートを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
いくつかの重要な制限があります。そのうちの1つは、新しいルートが現在のルートとは異なるファイルシステムに存在する必要があることです。あなたの場合、/home
アーチシステムは、すでにファイルシステムがマウントされていない限り、現在のルートと同じファイルシステムにマウントされる可能性が高くなります。
しかし、あなたが望んでいない可能性がありますpivot_root()
。主にシステムの起動時に使用され、一部本当に変です実行中のシステムで使用した場合の効果。chroot
これはシステムの残りの部分に影響を与えずに影響を受けないため、代わりにこれを使用できますpivot_root
。たとえば、次のようになります。
chroot arch-root /bin/bash
答え2
質問作成者が提案した解決策:
私が見つけた解決策:
--privileged=trueでdockerを実行する
だから私たちはドッカーコンテナでivot_rootをテストできます。