ivot_rootを有効/テストする方法は?

ivot_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。このアーチルートを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

arch-rootマウントとマウント解除が可能な別々のファイルシステムにあることは本当に確実ですか?

pivot_root最新バージョンswitch_rootでは、カーネルにマウントされたファイルシステムに関する情報を処理して機能します。

新しいルートファイルシステムはファイルシステムの「ルート」でなければならず、「.」を渡すことはできません。 「.」がマウントされたファイルシステムのルートでない限り、新しいルートとして使用されます。

現在の設定で試したい場合pivot_root(arch-rootがルートではなくサブディレクトリであると仮定)、最も簡単な方法はtmpfs切り替えるファイルシステムを作成し、そこに必要なコンテンツをコピーすることです。

次の内容から始めることができます。 (適切に500M調整du -sh arch-root

mkdir /ramroot
マウント -n -t tmpfs -o サイズ=500M no/ramroot
cd arch-root#(ルートファイルシステムの内容を含む)
探す。 -深さ-xdev -print | cpio -pd --quiet/ramroot
CD /ラムルート
mkdir 古いルートディレクトリ
ピボットルート。古い根
chrootを実行します。箱/カートン

答え2

~からマニュアルページ、これはあなたの問題だと思います。

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_rootcurrent_root

引用する

答え3

質問作成者は次の解決策を提供します。

解決策

私が見つけた解決策:

docker次に実行--privileged=true

したがって、dockerコンテナでivot_rootをテストできます。

関連情報