現在のプロセスのルートファイルシステムをディレクトリ_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")
;も呼び出そうとしています。同じエラーが発生しました。
これについて何か考えはありますか?
また、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をテストできます。
本当によろしいですか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
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_old
とnew_root
のどちらのファイルシステムも、current_root
と同じファイルシステムに常駐してはなりません。