web-dev-qa-db-ja.com

pivot_rootの使用/テスト方法は?

現在のプロセスのルートファイルシステムをディレクトリ_pivot_root_に移動し、_put_old_を新しいルートファイルシステムにする _new_root_ コマンドをテストします。

しかし、常に次のエラーが発生します:

_pivot_root: failed to change root from .' toold-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 .' toold-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
_

解決

解決策を見つけました:

_--privileged=true_を指定してdockerを実行します

ですから、Dockerコンテナーでpivot_rootをテストできます。

8
vvilp

本当によろしいですか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 none /ramroot
cd Arch-root#(rootファイルシステムの内容を含む)
 find 。 -depth -xdev -print | cpio -pd --quiet /ramroot
cd /ramroot
mkdir oldroot 
 pivot_root。 oldroot 
 exec chroot。 bin/sh 
5
MattBianco

man page から、これはあなたの問題だと思います:

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.

上記によれば、put_oldnew_rootのどちらのファイルシステムも、current_rootと同じファイルシステムに常駐してはなりません。

参考文献

2
slm